使用Lua脚本避免宏病毒行为?

时间:2019-02-06 21:20:57

标签: lua scripting virus

因此,我正在开发一个程序,其中我将Lua脚本作为文本存储在文件中,以供以后由应用程序加载以执行(doText是我相信的功能)并返回值。我对Lua代码的期望是从C中获取一个浮点数,对该浮点数进行(仅)数学运算,然后将另一个浮点数返回给C。

我很快意识到恶意行为者可以将Lua代码注入文件中,从而使其表现得像Microsoft Word / Excel / PowerPoint中的宏病毒一样;它可能会打开Lua文件并将其复制,或更糟糕的是,将代码注入PE文件中,例如使PE文件具有病毒性和恶意性。

有没有办法阻止Lua对恶意行为者有用的功能(例如文件io操作)或实现防止这种行为的功能?

1 个答案:

答案 0 :(得分:4)

我的印象是,您想创建一个在其中运行Lua脚本的Lua沙箱。通过控制沙箱环境,您可以限制脚本可以执行的操作。

Stackoverflow中有许多类似的问题。

然后Mozilla有一个您可能会觉得有用的github。 Lua Sandbox Library

从Lua 5.1到Lua 5.2似乎有所变化,这导致许多较旧的沙箱技术无法很好地工作。这是Lua 5.1的方法的描述,Sand Boxes,但是使用的功能setfenv()在Lua 5.2中不再可用。

还有Safe Lua可能会有所帮助。

本文Sandboxing Lua from C提到了选择库来一次加载一个库以创建特定的运行环境。

  

这就是拟议的沙盒的实施方式:通常在   创建新的Lua状态时,主机代码应调用luaL_openlibs()函数   加载Lua语言提供的标准库,但是   将引入许多在某些情况下可能不需要的功能   情况。因此,此沙箱分别引入每个库   通过调用luaL_requiref()并利用以下事实:   在Lua堆栈的顶部保留一个已加载函数的表。的   然后通过为它们提供nil值来取消定义不需要的函数,...

但是,也有关于此方法的警告,未知的依赖关系会导致运行时错误。

  

有必要对建议的内容做一些最后的说明   解决方案:尚不清楚Lua解释器是否会保留完整内容   当不需要的功能之外的所有aspcts中的功能时,   仅加载了标准库的子集,但确实有效   很好,我的解决方案。无论如何,建议进行一些测试。这个到期了   事实是,   语言(例如ipairs())实际上是由基础库提供的。

最好的方法是锁定脚本,以便即使使用沙箱技术也可以将它们作为受信任的脚本运行。