代码之家  ›  专栏  ›  技术社区  ›  Andrew Garrison

ACM icpc在线判断如何防止恶意攻击?[关闭]

  •  10
  • Andrew Garrison  · 技术社区  · 16 年前

    我花了几个多小时在 ACM ICPC's problem set archive 我想知道在线法官如何能够编译和运行任何用户的源代码,并防止恶意攻击他们的系统。

    编译后的二进制文件是从某种有限的沙盒中运行的吗?如何设置这种沙盒?你会使用什么操作系统?如何启动用户编译的可执行文件?

    4 回复  |  直到 11 年前
        1
  •  7
  •   Ted Kaplan    16 年前

    您可以在Linuxchroot监狱中运行它,或者将它链接到不实现任何文件I/O的libc。

        2
  •  6
  •   N8s    15 年前

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

    我是地区竞赛管理员。

        3
  •  4
  •   osgx    12 年前

    形成沙盒的简单方法(假设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() 换言之,它们就像被测试程序的调试器,judge可以控制所有的系统调用,并且可以取消任何一个系统调用而不将其传递给内核。

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

        4
  •  0
  •   Ahmad Farid    16 年前

    我想他们没有运行任何代码。有时,当您尝试在C++中读取或写入文件“流”和“IFSROW”时,会出现这种错误“受限函数”。