如何在沙箱环境中运行程序时禁止系统调用?

时间:2010-12-11 11:10:00

标签: c++ security fork sandbox

我正在查看codepad.org,而while(1)fork给出了以下输出。

不允许系统调用:SYS_fork

检查此链接以获取确切详细信息。 http://codepad.org/rNR9mMVv

谷歌搜索更多,我知道他们也使用套接字禁用系统调用。

不允许系统调用:SYS_socketcall

有人能告诉我如何在沙盒环境中运行程序之前禁用某些系统调用吗?

4 个答案:

答案 0 :(得分:1)

将运行时库替换为具有空存根或异常抛出器而非实际函数的模拟?

答案 1 :(得分:1)

如果您愿意支付性能损失,可以使用ptrace()。还有另一种我现在无法找到的方式。

答案 2 :(得分:0)

系统调用通过操作系统将函数注入进程来工作。但是,如果您为自己喜欢的可执行格式编写了自定义加载程序,则可以将其与自己的可执行文件链接起来。如果格式允许,您也可以二进制更改可执行文件,从您提供的单独动态库中提取这些函数。

答案 3 :(得分:0)

我知道这是一个老问题,但我正在研究相同的东西,所以这是我的建议 - 使用SELinuxGentoo项目有一些关于SELinux的nice stuff。请特别关注SELinux Policy Types(4.b)和目标政策。我不确定codepad.org,但类似的ideone.com使用Gentoo,所以也许SELinux应该是最简单的方法。