我目前正在为某些人提供汇编编译服务。他们可以在在线编辑器中输入汇编代码并进行编译。然后编译它时,代码会通过 ajax 请求发送到我的服务器,被编译并返回程序的输出。
但是,我想知道我能做些什么来防止对服务器造成任何严重损坏。我对自己组装很陌生,所以当他们在我的服务器上运行他们的脚本时有什么可能?他们可以删除或移动文件吗?有没有办法防止这些安全问题?
先感谢您!
看看http://sourceforge.net/projects/libsandbox/。它专为在 linux 服务器上执行您想要的操作而设计:
该项目提供 C/C++/Python 中的 API,用于在受限环境或沙箱中测试和分析简单(单进程)程序。可以根据可配置/可编程策略捕获和阻止二进制可执行程序的运行时行为。
沙盒库最初是作为 ACM/ICPC 培训的成熟在线裁判系统的核心安全模块而设计和使用的。从那时起,它们已经发展成为用于二进制程序测试、分析和安全限制的通用工具。沙盒库目前由 OpenJudge Alliance (http://openjudge.net/) 作为独立的开源项目维护,以促进 IT/CS 教育的各种作业评分解决方案。
如果这是一个教程服务,那么客户端只需要测试杂项汇编代码并且不需要在他们的程序之外执行操作(例如读取或修改文件系统),那么另一个选项是只允许选择的子集指示。特别是,不允许任何可以进行系统调用的指令,并且只允许有限的控制转移指令(例如,不返回,只分支到用户代码中定义的标签,等等)。您还可以提供一些有限的方法来返回输出,例如打印特定寄存器中的任何值的库调用。不允许在文本(代码)部分中声明数据,因为可以输入任意机器代码作为数字数据定义。
尽管我写了“另一个选项”,但这应该是其他受访者建议的其他选项的补充,例如沙盒。
这种方法容易出错,如果使用,应该仔细和彻底地设计。例如,一些汇编器允许在一行上执行多条指令。因此,仅仅确保一行的第一个指令字段中的文本是可接受的,就会错过该行的其余指令。
在你的服务器上编译和运行别人的任意代码就是任意代码执行。任意代码执行是每个恶意黑客追求的圣杯。有人可能会使用这个问题来找到您的服务并在这一秒内利用它。立即停止运行服务。如果您希望继续运行此服务,您应该在沙箱中编译并运行该程序。但是,在此实施之前,您应该暂停服务。
您应该在虚拟机沙箱中运行代码,因为如果代码是恶意的,沙箱将阻止代码损坏您的实际操作系统。一些虚拟机包括 VirtualBox 和 Xen。您还可以对代码执行某种签名检测以搜索已知的恶意功能,尽管可以击败任何形式的签名检测。
这是 VirtualBox 主页的链接:https ://www.virtualbox.org/
这是 Xen 的链接:http: //xen.org/