沙盒中的Linux沙盒中的Linux(Sandboxing in Linux)

2019-05-13 14:12发布

我想创建一个Web应用程序,这将允许用户上传一些C代码,并看到其执行的结果(代码将在服务器上被编译)。 用户是不可信的,这显然有一些巨大的安全隐患。

所以,我需要建立某种形式的沙箱​​中的应用。 在最基本的层面上,我想限制一些指定的目录访问文件系统。 我不能直接使用chroot的监狱,因为web应用程序不是以特权用户身份运行。 我想一个suid可执行文件,设立监狱将是一种选择。

上传的程序是相当小的,所以他们应该(最多几秒钟)快速执行。 因此,我可以在预设的超时后杀死进程,但如何确保它不会产生新的进程? 或者,如果我不能,正在扼杀整个PGID一种可靠的方法?

什么是去了解这一点的最好办法 - 比“不做它在所有”其他? :)还有什么其他明显的安全问题我错过了什么?

FWIW,Web应用程序将被用Python编写的。

Answer 1:

随着其他sugestions你可能会发现这很有用。

http://www.eelis.net/geordi/

这是http://codepad.org/about , codepad.org的有关页面。



Answer 2:

您所提供的一些细节暗示,你必须在服务器本身的管理控制,所以我的建议,使这一假设。

我想解决这个作为一个批处理系统。 网络服务器接受该源文件中,一个进程轮询提交目录的上载,处理该文件,然后将结果提交给所述web应用程序轮询,直到找到的结果,并将其显示另一个目录。

有趣的部分是如何安全处理的执行。

我的首选操作系统是FreeBSD的,所以我成立了一个预配置的监狱(不与香草chroot监混淆),将编译,运行,并保存输出。 然后,对于每一个源文件提交,启动监狱的原始副本每次执行时,里面的源文件的副本。

只要监狱的/ dev为修剪下来到几乎没有,系统资源限制的安全设置,而交通不能走出监狱的路线(绑定到不可路由的地址,或者干脆防火墙),我个人很舒服上运行此我的照顾下一个服务器。

既然你使用Linux,我会调查用户模式Linux或Linux VServer的,这在概念上与FreeBSD的监狱(我从来没有使用过自己,但看了一下他们)非常相似。 有列出了几个其他类似的系统在这里 。

这种方法比香草chroot监安全得多,而且它是更重量轻比使用完全虚拟化如QEMU / KVM或VMware。

我不是一个程序员,所以我不知道什么样的AJAX-Y的东西,你可以用它来轮询的结果,但我敢肯定,这是可以做到。 作为管理员,我会觉得这是一个有趣的项目中来参加。有乐趣。 :)



Answer 3:

我会说这是在许多层面上极其危险的。 你基本上打开自己到任何漏洞,可以在您的系统中找到(而你通常仅限于的那些人可以远程利用)。 我说不会做,如果你能避免它。

如果你想这样做,你可能想使用某种类型的虚拟机来运行用户代码。 使用类似KVM有可能建立多个虚拟机的使用相同的基本图像(你甚至可以存储快照在已经启动的状态,虽然我不知道将如何处理被克隆)。 然后,您可以根据需要创建虚拟机,运行用户代码,返回结果,然后杀死关闭虚拟机。 如果你保持彼此之间以及与网络隔离虚拟机,用户可以发泄他们想要的任何破坏,它不会伤害你的物理服务器。 你自己暴露在这些条件下,唯一的危险是某种漏洞,允许他们从虚拟机逃逸......这些都是极为罕见的,并且会随着硬件虚拟化提高更为罕见。



Answer 4:

虽然仍处于开发阶段,并没有考虑安全的,你可以看看背后的技术谷歌本地客户端 。 它的目的是让不受信任的本地代码在Web浏览器中运行,但也许可以适用于Web服务器上使用。 您可以使用像这样的其他技术顶部,如虚拟机,以增加安全性。



Answer 5:

在Fedora的11 ,还有就是SELinux的沙盒 ,似乎做你想要什么(也许除了限制产卵的新工艺,链接的博客文章并没有提到这一点)。

当然,总会有内核错误的风险; 即使SELinux的,内核部分仍暴露于所有过程。



Answer 6:

见在谷歌Chrome的沙盒方法为Linux此页面 。 正如你所看到的,有很多的方法,但是因为一些发行版可能不包括这些他们都不是伟大的,例如Chrome分发应用程序。 这不是真正的web应用程序的问题,虽然,因为你可以控制什么是安装在服务器上。

就个人而言,我最喜欢的是的Seccomp ,因为它比较像ptrace的其他工具( 每个系统调用交换机的地址空间!)或KVM(大内存饿了虚拟机),具有非常低的开销,并且与SELinux这样的工具(这是令人难以置信的简单因此,更可能是安全的)。



Answer 7:

我猜libsandbox成为你的目的。 其核心库的C / C ++编写的,但它也有Python程序的包装。 它提供的选项自定义了哪些系统调用,可以允许的,多少内存可以使用,多久能客户机程序运行等,这是已经在一对夫妇网上法官如使用HOJ 。



Answer 8:

有一个叫做工具strace的 -它可以监控给定进程的系统调用。 你只需要注意某些特定的呼叫提示“非法”的功能访问。 据我所知,这是在编程竞赛使用沙箱选手的程序方法。



Answer 9:

我想你的解决方案必须集中分析源代码。 我不知道任何工具,我认为这将是有相当困难C ,但是,例如, Pascal不包括任何模块程序会在我看来相当无害。



Answer 10:

在KVM或QEMU产生一个新的虚拟机来编译和运行代码看起来像的路要走。 在监狱运行的代码,如果它利用像网络代码操作系统的无抵押部分/ LXC会损害机器。 在虚拟机上运行的优势是显而易见的。 人们只能破解VM而不是机器本身。 但副作用是,你需要大量的资源(CPU和内存)的产卵一个VM为每个请求。



Answer 11:

对于不受信任的程序基于ptrace的禁闭可用于像中所描述的一个http://www.cs.vu.nl/~rutger/publications/jailer.pdf , http://www.cs.vu.nl/~guido /mansion/publications/ps/secrypt07.pdf 。

他们有一个变化根-ING策略规则,CHRDIR,其作用类似于chroot环境。 (参见“关押政策”)

然而,他们可能还没有公布其源代码(部分基于修改strace的http://www.liacs.nl/~wichert/strace/部分- “执行”)...

另请参见其他可用的基于ptrace的-方法的chroot在-userpace: https://unix.stackexchange.com/a/72697/4319



Answer 12:

关于唯一的机会你正在运行的虚而那些能有漏洞。 如果你希望你的机器在短期内黑客只要使用权限做出了特殊的用户访问,也许一个目录。 如果你想给黑客推迟到在未来某个时间点,然后运行一个虚拟机和端口转发到内部Web服务器。 你会想保留一个备份,因为你可能有一个小时是窃取了,想重新开始一个新的副本每隔几个小时。 您还需要保持整个机器的形象,只是重新映像整个事情一次一个星期左右,以克服每周hackings。 不要让机器说话到任何其他机器在网络上。 无处不在黑名单吧。 我说的是虚拟机与物理机的IP地址。 请在你的网络上的其他计算机的任何其它机器定期安全审计。 请重新命名的机器IHaveBeenHacked1和IHaveBeenHacked2并阻止访问那些在您的主机列表和防火墙。

这样,你可能会避开你hackage的水平一段时间。



文章来源: Sandboxing in Linux