【问题标题】:Using ptrace to write a program supervisor in userspace使用 ptrace 在用户空间编写程序管理器
【发布时间】:2011-04-08 05:28:15
【问题描述】:

我将寻找建议/资源来编写一个程序,该程序可以拦截来自程序的系统调用,以监督它的文件系统、网络等访问。

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

这是在 linux 上的,我更喜欢编写 C++ 或脚本语言(ruby、python 等),并且库会很棒!

谢谢。

【问题讨论】:

    标签: c++ linux system-calls ptrace


    【解决方案1】:

    这看起来是个不错的起点。 http://www.linuxjournal.com/article/6100

    【讨论】:

    • 这似乎是一个有趣的指南,但是我更感兴趣的是一个可以在幕后完成所有繁重工作的库。最好让我用脚本语言编写。
    【解决方案2】:

    您不能安全地使用 ptrace() 沙箱恶意应用程序。

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

    【讨论】:

    • 不能通过阻止孩子分叉来解决这个问题,这恰好是我们想要限制的东西。
    • 虽然很高兴知道注意事项,但我认为最好给出积极的建议。
    • @thomasfedb: 当然,如果你同时停止fork()clone(),那你应该能顺利到达那里(当然,这意味着人们不能将多线程代码提交给你的在线法官) )。您还需要停止访问共享内存段。您可能仍然会更好地解决问题的替代方法 - 例如。使用 SELinux 进行沙盒。
    • @caf 谢谢。无论如何,我想将用户限制在一个线程中,让人们处于平等地位。无论如何,问题不会从多线程中受益。
    • 您能否引用一篇文章来证明ptrace() 本质上是不安全的?我听说实施安全追踪很棘手,但这是可能的。您对用户模式 ​​Linux(也使用 ptrace())有何看法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    相关资源
    最近更新 更多