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

How to prevent a system call from being executed with ptrace

本文关键字:PTRACE 执行 何防止 系统调用      更新时间:2023-10-16

我正在使用类似IdeOne的系统,在该系统中必须以沙盒模式运行不信任的用户代码。

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

  • 我可以在调用系统之前拦截系统调用并修改输入参数。
  • 我可以在调用并更改返回值后拦截系统调用。
  • 但是,似乎根本没有办法阻止呼叫发生(除了杀死整个申请外)。

我想拦截某些系统呼叫并返回虚假的结果代码,而无需实际发生呼叫。有没有办法实现此目标?

请记住,只有在没有多线程的代码时,您的沙箱才能安全。您还必须非常谨慎地防止沙盒代码分叉。

例如,请参阅以下关于罗伯特·沃森(Robert Watson)的论文的讨论:

在系统中利用种族呼叫包装器

该文章链接到该文章,但我也会在这里直接提供链接:

"在系统调用包装器中利用并发漏洞"

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

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

编辑:

有一个名为PinkTrace的Ptrace包装器,这应该使您的工作更容易,在这里也有更多信息:

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