首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >网上法官的安全问题

问网上法官的安全问题
EN

Stack Overflow用户
提问于 2011-03-16 16:02:39
回答 2查看 2.7K关注 0票数 11

我参与了一个在线编程-判断支持C/C++,如SPOJ,UVA等Linux机器(Ubuntu)。代码本身在C++中。我必须防止服务器的恶意代码。

我计划分两步实施安全。

  1. 通过监禁(沙箱),在受限环境的文件夹中使用chroot系统调用执行代码。我遇到了一个实用程序Jailkit,但我认为仅系统调用就足以满足我的工作,因为我不需要对用户进行监禁,只需要对正在执行的代码进行监禁。为了在文件夹中创建运行时环境,我复制了以下文件以及创建受限shell的文件(只允许shell内置)

$ ldd ./a.out

linux-gate.so.1 => (0x00f4c000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x007a5000)

libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x00b80000)

libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00e0c000)

libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00110000)

/lib/ld-linux.so.2 (0x00f7c000)

其中a.out是一个可执行的c++文件。

遇到的问题:

我尝试过几个在监狱里运行良好的程序。但是,谁能确认这些文件对于所有的算法密集型代码都是足够的,即不需要显式地处理任何系统调用。

( ii)如果任何人都能建议任何方法来限制某些系统调用,那就太好了,方法是限制提供给监狱文件夹的运行时库,这些库是由代码所不期望的叉()、socket()等等提供的。

为了知道,我还复制了ldd /usr/bin/gcc和/usr/bin/gcc所显示的文件。但是我不能错误地使用gcc在监狱里

bash-4.1# /usr/bin/gcc try.c gcc: error trying to exec 'cc1': execvp: No such file or directory

我怎么才能修好它?

2.通过跟踪系统调用,在帕斯莱和KILLing的帮助下,运行代码,如果使用可疑的系统调用。现在的问题是什么系统调用应该被禁止?我感觉到的是限制叉()、vfork()和execve()来完成这项工作,因为每个程序都有一个执行时间限制(几乎不超过10秒)。在此之后,它将被自动终止,并且没有其他方法来创建另一个进程,除了fork(),vfork()。但是,由于我的思想被我的想象所束缚,如果有人有其他的意见来改变我的想法,那就太好了。

因此,基本上我担心的是(一)和(二)在“遇到的问题”中,如果有人能想出一种在第二点的限制之后黑客攻击的方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-16 17:00:26

运行这类设备的最大安全风险是在端口25上进行传出网络连接的可能性。有人会发现你的服务,赚取数千美元的垃圾邮件,你会被你的主人禁止。此外,你会让你的主机提供商/isp上的其他人讨厌你把整个ip块黑名单在每个狂热的反垃圾邮件大亨的数据库中。

幸运的是,iptables可以根据创建它们的进程的uid阻止本地发起的数据包。这可能是保护自己不成为垃圾邮件发送者的一种最不明显的方式,但如果盒子不需要进行合法的传出连接,您可以使用更严格的防火墙。

还请注意,现在,传出的http和https连接可能对垃圾邮件同样有用(留言板、受损的Twitter和FB帐户等)。作为smtp,您可能真的想做一些更大的阻塞,或者只是完全阻止网络访问。

票数 4
EN

Stack Overflow用户

发布于 2011-03-16 16:30:33

你为什么要在监狱里调用编译器?它确实可以调用像cc1这样的外部程序。只调用已检查的程序是可以的。您可以查看与您指定的目的相同的补丁。

在使用fork()进行程序检测和禁止之前,计算密集型代码可以做很多事情,例如,创建一个分叉炸弹。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5328075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档