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

在這裏插入圖片描述

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章