如何防止使用ptrace执行系统调用

我正在研究类似Ideone的系统,其中不可信用户代码必须以沙盒模式运行。

为此,我一直在寻找ptrace第一层保护的可能性。 但是,经过几次实验后,似乎:

  • 我可以在调用之前拦截系统调用并修改输入参数。
  • 我可以在调用它之后拦截系统调用并更改返回值。
  • 但是,似乎没有办法阻止电话的攻击(除了杀死整个应用程序)。
  • 我想拦截某些系统调用并返回一个虚假的结果代码,而不会实际发生调用。 有没有办法来实现这个?


    请记住,如果您的沙箱运行的代码不是多线程的,那么您的沙箱只能是安全的。 你还必须非常小心,以防止沙盒代码分叉。

    例如,参见以下关于Robert Watson关于这些问题的论文的讨论:

    利用系统调用包装中的种族

    该论文与该文章相关,但我也直接在此提供链接:

    “利用系统调用包装中的并发漏洞”

    更好的方法似乎仍然像Watson所建议的那样:将安全框架完全集成到内核中,并注意其用途以避免并发问题。 Linux和NetBSD以及Mac OS X和其他面向安全的系统已经提供了这样的框架,因此如果使用这些系统在这些现有框架内实施您的策略,那么所有这些都是必需的。 即,甚至不尝试在系统调用包装器或其他系统调用插入机制中实现您的安全策略。


    您可以通过增加IP(指令指针)来跳转执行系统调用的指令,这样调用将不会执行,您可以像往常一样设置返回值。

    编辑:

    有一个叫做pinktrace的ptrace包装器,它可以让你的工作更轻松,还有更多的信息在这里:

    https://security.stackexchange.com/questions/8484/wrapping-system-call-in-reliable-and-secure-way

    链接地址: http://www.djcxy.com/p/11373.html

    上一篇: How to prevent a system call from being executed with ptrace

    下一篇: Why is my Perl program failing with Tie::File and Unicode/UTF