kno*_*orv 4 linux security hook system-calls linux-kernel
假设Linux二进制文件foobar有两种不同的操作模式:
a,b并且c被使用.a,b,c和d使用.Syscalls a,b并且c是无害的,而系统调用d具有潜在的危险性,可能导致机器不稳定.
进一步假设应用程序运行的两种模式中的哪一种是随机的:应用程序以模式A运行,概率为95%,模式B运行概率为5%.该应用程序没有源代码,因此无法修改,只能按原样运行.
我想确保应用程序无法执行系统调用d.执行系统调用时d,结果应该是NOOP或应用程序的立即终止.
如何在Linux环境中实现这一目标?
应用程序是静态链接的吗?
您可以覆盖某些符号,例如,让我们重新定义 socket
int socket(int domain, int type, int protocol)
{
write(1,"Error\n",6);
return -1;
}
Run Code Online (Sandbox Code Playgroud)
然后构建共享库:
gcc -fPIC -shared test.c -o libtest.so
Run Code Online (Sandbox Code Playgroud)
我们来吧:
nc -l -p 6000
Run Code Online (Sandbox Code Playgroud)
好
现在:
$ LD_PRELOAD=./libtest.so nc -l -p 6000
Error
Can't get socket
Run Code Online (Sandbox Code Playgroud)
使用变量运行时会发生什么,LD_PRELOAD=./libtest.so它会覆盖libtest.so中定义的符号,而不是在库中定义的符号.
| 归档时间: |
|
| 查看次数: |
1221 次 |
| 最近记录: |