gcc沙盒工具 – Ubuntu 12.04上的AppArmor / CHROOT监狱

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

例如

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

这工作正常。

然而,正如你所想象的那样,如果将它公诸于世 – 这是一个安全的噩梦 – 所以我想到了两个select来保护我的堆栈:

1)CHROOT监狱 – 但这本身不足以防止目录遍历/文件访问。

2)AppArmor?

所以我的问题是真的,我怎么能保护我的堆栈可能来自任何nasties:

A)使用gcc编译未知的代码

B)执行编译的代码

这完全取决于有多大的风险,以及你愿意为保护它而牺牲的东西。

chroot监狱很可能只提供较差的保护,特别是让潜在的攻击者能够访问networking和主机的所有计算资源,以及提升本地特权升级攻击的能力(碰巧发现通常在各种软件包中,甚至包括Linux内核)。

一个MAC解决scheme(SELinux,AppArmor,TOMOYO)将允许更好的控制水平,特别是包括networking访问,但MAC不是所有的牢不可破的

另一个沙盒级别将包括拦截所有的系统调用 – 几乎与Seccomp一样 。 但显然,在这里创build一个有用的configuration文件将是一个非常大的工作。

你甚至可以更进一步,为每个被执行的代码实例分配一个虚拟机器或一个容器 – 这是你可能对资源使用和主机数据分离有最高级别控制的地方 – 但是这很可能除了一小撮用户的小事情之外,任何东西都变得昂贵。