2010-09-04 25 views
3

我会寻找建议/资源来编写一个程序,该程序可以拦截程序中的系统调用来监督它的文件系统,网络等访问。使用ptrace在用户空间编写程序监督器

这样做的目的是编写一个在线裁判,以便不受信任的代码可以安全地在服务器上运行。

这是在Linux上,我宁愿写C++或脚本语言(红宝石,蟒蛇等),和一个图书馆将是伟大的!

谢谢。

回答

3

这看起来是一个很好的开始。 http://www.linuxjournal.com/article/6100

+1

这似乎是一个有趣的指导,但我更感兴趣的是一个图书馆,可以在幕后做所有的繁重工作。并且可以让我用脚本语言编写。 – thomasfedb 2010-09-04 13:48:43

1

您无法安全地使用ptrace()来沙盒化恶意应用程序。

应用程序总是可以使用具有故意竞争条件的多个线程在您检查完内核之后但在内核查看它们之前更改通过指针传递的syscall参数(例如文件名)。

+0

难道这不能通过阻止孩子分手来解决,这恰好是我们想要限制的东西。 – thomasfedb 2010-09-04 16:44:49

+0

虽然它很好的了解警告,但它总是最好给我积极的建议,我感觉。 – thomasfedb 2010-09-04 17:40:50

+2

@thomasfedb:当然,如果你同时停止fork()和clone()这两个应用程序(当然,这意味着人们不能将多线程代码提交给你的在线裁判)。你也会想要停止访问共享内存段。在解决问题的其他方法方面,您可能仍然会更好 - 例如。使用SELinux进行沙盒。 – caf 2010-09-05 02:24:28