gcc 沙盒工具 - Ubuntu 12.04 上的 AppArmor / CHROOT jail

gcc 沙盒工具 - Ubuntu 12.04 上的 AppArmor / CHROOT jail

我们有一个 Node 应用程序作为 C++ 沙盒工具的前端,它使用 gcc 编译代码并将结果输出到浏览器。

例如

exec("gcc -o /tmp/test /tmp/test.cpp",
    function (error, stdout, stderr) {
        if(!stderr) {
            execFile('/tmp/test', function(error, stdout, stderr) {});
        }
    }
);

这很好用。

然而,你可以想象,如果将其公开,这将是一场安全噩梦——所以我考虑了两个选项来保护我的堆栈:

  1. CHROOT 监狱 - 但这本身不足以阻止目录遍历/文件访问。
  2. AppArmor?

所以我的问题是,我怎样才能保护我的堆栈免受可能来自以下方面的影响:

A)使用 gcc 编译未知代码

B)执行编译后的代码

答案1

这完全取决于风险有多大以及你愿意为确保它而牺牲什么。

chroot jail 可能只能提供较低级别的保护,尤其会让潜在攻击者可以访问网络和主机的所有计算资源,以及提升本地权限提升漏洞的能力(这种漏洞在各种软件包中经常被发现,甚至包括 Linux 内核)。

MAC 解决方案(SELinux、AppArmor、TOMOYO)可以实现更精细的控制,尤其是包括网络访问,但是MAC 并非牢不可破

另一个级别的沙盒将包括拦截所有系统调用 - 几乎就是你所看到的赛康普。但显然,在这里创建一个有用的个人资料将是一项艰巨的工作。

您甚至可以更进一步,为执行的代码的每个实例分离一个虚拟机或容器 - 在这里您可能对资源使用和与主机数据的分离拥有最高级别的控制 - 但这可能会变得昂贵,除了只有少数用户的简单情况。

相关内容