我如何开始使用libsandbox

时间:2012-12-27 19:06:07

标签: linux sandbox

我正在尝试编写一个简单的判断程序来编译和执行用户提交的c文件。我在stackoverflow上找到了libsandboxquestion

我已经安装了python模块,按照说明我正在尝试运行用C编写的hello world程序

➜  sandbox git:(V_0_3_x) ✗ ./hello                            
Hello World%                                                                   
➜  sandbox git:(V_0_3_x) ✗ python sample2.py hello   
result: RF
cpu: 2ms
mem: 288kB

正如您所看到的,当我在沙盒中运行程序时,我没有得到任何输出。如果有人能告诉我如何正确使用它,那就太好了。

2 个答案:

答案 0 :(得分:2)

libsandbox的示例代码禁止系统调用文件操作,例如open()stat()close()。也就是说,您需要(1)链接 hello world程序静态以避免打开共享库等文件(即libc.so),或者(2)编写一个允许相关系统调用的自定义沙箱策略。有关自定义沙箱策略的示例,请参阅https://github.com/liuyu81/TR-OJA-201209A

免责声明:我是libsandbox的作者。

答案 1 :(得分:1)

RF结果代码很可能是由于文件操作的意外系统调用(即SYS_open(),SYS_close(),SYS_stat(),...)。当(1)目标程序实际执行文件操作时,以及(或)(2)它是动态链接的并且需要在运行时加载.so库时,会发生这种情况。由于目标程序不调用文件操作,因此属于后一种情况。

然后,要解决射频结果,

静态链接目标程序以避免依赖共享库;要么, 扩展包装器脚本中的策略规则以处理相关的SYSCALL / SYSRET事件;

对于静态链接系统调用,我们使用ex 0,1,2 3-sys_read 1-sys_exit的系统调用代码,依此类推,直到链接了解系统调用列表的更多详细信息链接,代码为:http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html

我改变了这个:

x86_64=set([0,1,5,8,9,10,11,12,16,21,25,63,89,158,219,231])

为此:

x86_64=set([0,1,2,3,4,5,8,9,10,11,12,16,21,25,63,89,158,219,231,])
在sample2.py中

,它可以工作。

我的github存储库链接中提供了修改后的sample2.py: https://github.com/palashmaran/libsandbox.git