Linux seccomp机制
程序员文章站
2022-06-17 07:54:06
...
简介
seccomp是一种内核中的安全机制,正常情况下,程序可以使用所有的syscall,这是不安全的,比如程序劫持程序流后通过execve的syscall来getshell。通过seccomp我们可以在程序中禁用掉某些syscall,这就就算劫持了程序流也只能调用部分的syscall了
演示
正常的系统调用,可以使用所有系统调用
#include<unistd.h>
#include<sys/syscall.h>
int main()
{
char * filename = "/bin/sh";
char * argv[] = { "/bin/sh", NULL };
char * envp[] = { NULL };
syscall(59, filename, argv, envp); // execve
return 0;
}
ban掉了59系统调用即execve()
#include<unistd.h>
#include<seccomp.h>
#include<sys/syscall.h>
int main()
{
scmp_filter_ctx ctx;
ctx = seccomp_init(SCMP_ACT_ALLOW); // 初始化过滤状态为允许所有系统调用
seccomp_rule_add(ctx, SCMP_ACT_KILL, SCMP_SYS(execve), 0); // 添加需要限制的系统调用
seccomp_load(ctx);
char * filename = "/bin/sh";
char * argv[] = { "/bin/sh", NULL };
char * envp[] = { NULL };
syscall(59, filename, argv, envp);
return 0;
}
编译条件方法
ubuntu需要要先安装下面的文件
sudo apt install libseccomp-dev libseccomp2 seccomp
编译
gcc -o ban ban.c -lseccomp
最后的运行结果如下:
工具
可以分析程序的seccomp状态,哪些被系统被禁用了
项目地址seccomp-tools
安装
sudo apt install gcc ruby-dev
gem install seccomp-tools
更多参考:http://www.linuxhowtos.org/manpages/3/seccomp_rule_add_exact.htm
上一篇: Qt容器类之一:Qt的容器类介绍
下一篇: 容器