当前位置:  开发笔记 > 运维 > 正文

GCC如何在程序中阻止系统调用?

如何解决《GCC如何在程序中阻止系统调用?》经验,为你挑选了1个好方法。

有人告诉我如何在程序中阻止某些特定的系统调用吗?我正在构建一个系统,它接受一段C源代码,用gcc编译并运行它.出于安全原因,我需要阻止已编译的程序调用某些系统调用.有没有办法做到这一点,从源代码级别(例如剥离gcc的头文件,检测恶意外部调用,......)到可执行级别?

编辑#1:添加有关恶意电话的详细信息.

编辑#2:我的系统是GNU/Linux系统.

编辑#3:

我在几天内尝试了一些方法,这是我到目前为止得出的结论:

    扫描源代码并不能解决主要问题,因为人们总能很好地屏蔽他/她的C源文件.

    "覆盖C符号"适用于库,但对于系统调用,我没有达到我想要的效果.这个想法并没有死,但这样做肯定会让我花很多时间黑客攻击(gcc和/或ld).

    许可减少就像魅力一样.我可以使用fakeroot或"访客"用户来执行此操作.这种方法也是最容易实现的.

另一个是本机客户,我还没有尝试,但由于项目和我的工作之间的共同点,我肯定会在不久的将来.



1> crazyscot..:

正如其他人所指出的那样,程序不可能避免进行系统调用,他们会在整个地方使用C库.

但是,如果你的平台支持(如Linux)的你也许能够取得一些进展与谨慎使用LD_PRELOAD机制,:你写的具有相同符号的名称作为那些在C库,这是所谓的共享库,而不是在预期的libc功能.(例如,电栅栏被构建为在基于Debian的系统和截距共享库调用malloc,free等人)中

我怀疑你可以使用这种机制来捕获或参数检查你不喜欢的任何libc函数的调用,也许还要注意那些你认为无条件安全的函数.因此,扫描已编译的可执行文件以获取对应的代码可能是合理的,INT 80以便捕获任何尝试进行原始系统调用(0xcd 0x80- 但要注意误报).但是我只是给了这个想法,我可能很容易错过一些东西,或者这可能会变得不切实际......


可以在不使用任何库的情况下执行系统调用,因此如果您希望构建一个针对恶意用户的系统安全,则使用LD_PRELOAD是不够的.
推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有