限制Linux应用程序的系统调用访问
发布时间:2020-12-14 01:35:38 所属栏目:Linux 来源:网络整理
导读:假设 Linux二进制foobar有两种不同的操作模式: 模式A:使用系统调用a,b和c的良好模式. 模式B:使用了系统调用a,b,c和d的错误模式. 系统调用a,b和c是无害的,而系统调用d有潜在危险,可能导致机器不稳定. 进一步假设应用程序运行的两种模式中的哪一种是随机的
假设
Linux二进制foobar有两种不同的操作模式:
>模式A:使用系统调用a,b和c的良好模式. 系统调用a,b和c是无害的,而系统调用d有潜在危险,可能导致机器不稳定. 进一步假设应用程序运行的两种模式中的哪一种是随机的:应用程序以模式A运行,概率为95%,模式B运行概率为5%.该应用程序没有源代码,因此无法修改,只能按原样运行. 我想确保应用程序无法执行syscall d.执行系统调用时,结果应该是NOOP或应用程序的立即终止. 如何在Linux环境中实现这一目标? 解决方法
应用程序是静态链接的吗?
您可以覆盖一些符号,例如,让我们重新定义套接字 int socket(int domain,int type,int protocol) { write(1,"Errorn",6); return -1; } 然后构建共享库: gcc -fPIC -shared test.c -o libtest.so 我们来吧: nc -l -p 6000 好 现在: $LD_PRELOAD=./libtest.so nc -l -p 6000 Error Can't get socket 使用变量LD_PRELOAD =./ libtest.so运行时会发生什么情况它会覆盖libtest.so中定义的符号,而不是在库中定义的符号. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |