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

C++ 如何在沙盒环境中运行程序时禁止系统调用?,c++,security,fork,sandbox,C++,Security,Fork,Sandbox,我正在查看codepad.org,一段时间后fork给出了以下输出 不允许的系统调用:SYS\u fork 查看此链接以了解详细信息 通过谷歌搜索,我了解到他们还使用套接字禁用系统调用 不允许的系统调用:SYS\u socketcall 有谁能告诉我,在沙盒环境中运行程序之前,如何禁用某些系统调用 将运行库替换为具有空存根或异常抛出器的模拟,而不是真正的函数?如果您愿意支付性能损失,可以使用ptrace()来实现这一点。还有一种方法我现在似乎找不到。系统调用通过操作系统将函数注入进程来工作。但是

我正在查看codepad.org,一段时间后fork给出了以下输出

不允许的系统调用:SYS\u fork

查看此链接以了解详细信息

通过谷歌搜索,我了解到他们还使用套接字禁用系统调用

不允许的系统调用:SYS\u socketcall


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

将运行库替换为具有空存根或异常抛出器的模拟,而不是真正的函数?

如果您愿意支付性能损失,可以使用ptrace()来实现这一点。还有一种方法我现在似乎找不到。

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

我知道这是一个老问题,但我正在研究相同的内容,因此我的建议是使用。这个项目有一些关于SELinux的信息。请看一看(4.b),特别是有针对性的政策。我不确定,但类似的方法使用Gentoo,因此SELinux可能是最简单的方法。

但这不会禁用这些函数的实际功能。例如,如果我替换fork()的运行时库,并且如果我想在代码中使用fork,但在其他人提交的代码中禁用fork,那么此方法仍然有效吗?如果是,请让我知道如何。。谢谢。我只是假设一下,我想为了正确的实现,你必须创建某种沙盒环境,这样你的运行时就会被复制——一个是真实的,一个是影子。不起作用。进入的人可以使用内联汇编来直接访问系统调用网关。我认为这将是一个内核级问题而不是特定于C++或任何其他本地二进制文件。除非有一个C++解释器存在于某个地方,可以在非本地环境中运行代码。