我正在开发一个类似Ideone的系统,需要在沙盒模式下运行不受信任的用户代码。
为此,我一直在探索使用ptrace
作为第一层保护的可能性。然而,在进行了一些实验后,似乎:
- 我可以在调用系统调用之前拦截它并修改输入参数。
- 我可以在调用系统调用之后拦截它并更改返回值。
- 但是,好像没有办法完全阻止调用(除了杀死整个应用程序)。
我想拦截某些系统调用并返回虚假结果代码,而不实际发生调用。有实现这一点的方法吗?
我正在开发一个类似Ideone的系统,需要在沙盒模式下运行不受信任的用户代码。
为此,我一直在探索使用ptrace
作为第一层保护的可能性。然而,在进行了一些实验后,似乎:
我想拦截某些系统调用并返回虚假结果代码,而不实际发生调用。有实现这一点的方法吗?
你可以通过增加指令指针(IP)来跳过执行系统调用的指令,这样就不会执行该调用,然后像往常一样设置返回值。
编辑:
有一个名为pinktrace的ptrace包装器,应该能让你的工作更轻松,这里还有更多信息:
https://security.stackexchange.com/questions/8484/wrapping-system-call-in-reliable-and-secure-way