ACM ICPC在线评判如何防止恶意攻击?

And*_*son 10 security

我花了几个多小时在ACM ICPC的问题集存档上羞辱自己,我想知道在线评判如何能够编译和运行任何用户的源代码并防止对他们的系统进行恶意攻击.

编译的二进制文件是从某种有限的沙箱运行的吗?如何建立这种沙箱?你会用什么操作系统?您将如何启动用户的已编译可执行文件?

thi*_*ven 7

您可以在Linux chroot jail中运行它,或者将它链接到不实现任何文件I/O的libc.

  • 它是某些UNIX系统中可用的环境,它允许程序在没有任何访问完整文件系统的情况下运行.在jail中运行的进程将某个子目录视为其根目录,并且无法访问其外部的任何内容.具体来说,系统调用设置伪造的根目录,所有子进程都继承它. (3认同)

小智 6

这些程序在一个有限运行时间的chrooted监狱中运行.判断计算机分布在多个服务器上,以帮助防止单点故障或DOS攻击.

我是区域竞赛管理员.


osg*_*sgx 5

形成沙箱的简单方法(假设 Linux 作为服务器操作系统,这在 ACM 中很常见)是使用(古老的)chroot 或一些内核补丁。现在内核中有一些更高级的沙盒技术,例如:

  • seccomp - Linux 2.6.12+ - 进程可以使用特殊prset调用请求操作系统,将进程功能限制为:退出、读取和写入已打开的文件。操作系统将拒绝执行任何其他有效地将程序与外部世界隔离的系统调用。并且没有办法重新设置这些功能。(此解决方案可能会破坏一些想要在运行时加载一些插件的渐进式语言,如 python、perl、ruby 等。)

  • 命名空间隔离 - cgroups。chroot 是一个改变(隔离)文件系统命名空间的程序,还有其他命名空间,例如网络或进程。使用 cgroups 我们可以只使用 chroot 来限制更多。

一些内核补丁,写给在线评委,例如* ejudge.ru 有补丁到 2.6.38.8、3.4.15、3.7.5;以及一些适用于 Windows 的解决方案。(俄文网站。)我想,这个系统可能会用在俄罗斯的一些比赛中,不确定1/4 ACM ICPC。

一些判断系统使用ptrace()系统调用——换句话说,它们就像被测试程序的调试器一样,判断可以控制所有的系统调用,并且可以取消其中的任何一个而不将它传递到内核。

还有开源的判断系统,例如https://openjudge.net/ (libsandbox)