如何防止系统调用使用PTRACE执行
How to prevent a system call from being executed with ptrace
我正在使用类似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
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- C++,系统无法执行指定的程序
- 使用C++中的模板和运算符重载执行矩阵运算
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 执行函数时导致崩溃的变量
- 无论条件是否为true,if总是在c++中执行
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 在C++中对T*类型执行std::move的意外行为
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如何在没有信号的情况下从C++执行QML插槽
- 如何确认我的constexpr表达式实际上已经在编译时执行
- C++17中的并行执行策略
- QML按钮点击功能执行顺序
- 程序在执行程序的其余部分之前退出
- 为什么catch中的代码没有被执行
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 将执行、作业和WinAPI相乘
- 对字符数组中的元素执行逐位操作
- 为什么g++在未执行的代码处标记强制转换错误
- 如何防止系统调用使用PTRACE执行