加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

限制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的良好模式.
>模式B:使用了系统调用a,b,c和d的错误模式.

系统调用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中定义的符号,而不是在库中定义的符号.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读