Linux seccomp机制


简介

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); 
  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

prctl:https://blog.csdn.net/wdjjwb/article/details/80853901
更多参考:http://www.linuxhowtos.org/manpages/3/seccomp_rule_add_exact.htm


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM