有人告诉我如何在程序中阻止某些特定的系统调用吗?我正在构建一个系统,它接受一段C源代码,用gcc编译并运行它.出于安全原因,我需要阻止已编译的程序调用某些系统调用.有没有办法做到这一点,从源代码级别(例如剥离gcc的头文件,检测恶意外部调用,......)到可执行级别?
编辑#1:添加有关恶意电话的详细信息.
编辑#2:我的系统是GNU/Linux系统.
编辑#3:
我在几天内尝试了一些方法,这是我到目前为止得出的结论:
扫描源代码并不能解决主要问题,因为人们总能很好地屏蔽他/她的C源文件.
"覆盖C符号"适用于库,但对于系统调用,我没有达到我想要的效果.这个想法并没有死,但这样做肯定会让我花很多时间黑客攻击(gcc和/或ld).
许可减少就像魅力一样.我可以使用fakeroot或"访客"用户来执行此操作.这种方法也是最容易实现的.
另一个是本机客户,我还没有尝试,但由于项目和我的工作之间的共同点,我肯定会在不久的将来.
正如其他人所指出的那样,程序不可能避免进行系统调用,他们会在整个地方使用C库.
但是,如果你的平台支持(如Linux)的你也许能够取得一些进展与谨慎使用LD_PRELOAD机制,:你写的具有相同符号的名称作为那些在C库,这是所谓的共享库,而不是在预期的libc功能.(例如,电栅栏被构建为在基于Debian的系统和截距共享库调用malloc
,free
等人)中
我怀疑你可以使用这种机制来捕获或参数检查你不喜欢的任何libc函数的调用,也许还要注意那些你认为无条件安全的函数.因此,扫描已编译的可执行文件以获取对应的代码可能是合理的,INT 80
以便捕获任何尝试进行原始系统调用(0xcd 0x80
- 但要注意误报).但是我只是给了这个想法,我可能很容易错过一些东西,或者这可能会变得不切实际......