【发布时间】:2010-06-01 09:07:32
【问题描述】:
请问有人告诉我如何阻止程序中的某些特定系统调用吗?我正在构建一个系统,它需要一段 C 源代码,用 gcc 编译并运行它。出于安全考虑,我需要防止编译后的程序调用一些系统调用。有没有办法做到这一点,从源代码级别(例如剥离 gcc 的头文件,检测恶意外部调用,......)到可执行级别?
已编辑 #1: 添加有关恶意呼叫的详细信息。
已编辑 #2: 我的系统是 GNU/Linux 系统。
编辑#3:
我在几天内尝试了一些方法,以下是我目前得到的结论:
- 扫描源代码并不能解决主要问题,因为人们总是可以很好地混淆他/她的 C 源文件。
- “覆盖 C 符号”适用于库,但对于系统调用,我还没有达到我想要的效果。这个想法并没有死,但是,这样做肯定会导致我大量时间黑客(gcc 和/或 ld)。
- 权限降级就像一个魅力。我可以使用 fakeroot 或“来宾”用户来执行此操作。这种方法也是最容易实现的。
另一个是native client,我还没有尝试过,但由于项目和我的工作之间的共同点,我肯定会在不久的将来。
【问题讨论】:
-
这看起来是一个相当大的挑战。毕竟,几乎所有可以想象的 C 程序都会非常合理地进行系统调用,例如:分配内存、读写文件、使用标准输入和标准输出等等。
-
你认为什么样的程序永远不会进行系统调用?请发布一个示例。
-
@High Performance Mark:好吧,我只是想阻止一些特定的系统调用,因为它们是有限的,例如 fork()、open()、...等调用 @Neil Butterworth:我的意思是不所有系统调用,但恶意系统调用,例如execv() 可用于执行 BASH 脚本,该脚本会清除磁盘上的数据。
-
为什么没有人提到seccomp
标签: c gcc system-calls