seccomp
·
Wargame/Dreamhack
// gcc -o seccomp seccomp.cq #include #include #include #include #include #include #include #include #include #include #include #include int mode = SECCOMP_MODE_STRICT; void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(60); } int syscall_filter() { #define syscall_nr (o..
Bypass SECCOMP-1
·
Wargame/Dreamhack
코드부터 보자. // Name: bypass_syscall.c // Compile: gcc -o bypass_syscall bypass_syscall.c -lseccomp #include #include #include #include #include #include #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } void sandbox() { scmp_filter_ctx ctx; ctx = seccomp_init(SCMP_ACT_ALLOW); if (ctx == NULL) { exit(0); } seccomp_rule_add(ctx, SCMP_ACT_KILL, SCMP_SYS(open), 0); se..
seccomp 요약
·
Tips & theory
원리 요약하자면 system call filtering 이다. syscall NR을 기준으로 실행여부를 판단한다. 구조 사용은 아래와 같이 한다. int prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5); Mode 아래와 같이 2가지 모드가 있다. strict mode : read, write, sigreturn, exit만 허용함. 이외의 system call은 SIGKILL과 함께 즉시 종료. filter mode : 아래와 같은 추가 모드가 있다. SECCOMP_RET_KILL : System call을 수행하지 않고 해당 process를 즉시 종료 시킨다. 해당 proces..