리눅스에서 sandbox 기반으로 syscall을 허용 및 차단하여 공격의 가능성을 막는 보안 메커니즘
Seccomp은 prctl()이라는 함수로 사용할 수 있음
int prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5);
STRICT_MODE는 read(2), write(2), _exit(2), sigreturn(2) (but not exit_group(2))로 제한하는 것
해당 시스템 콜 이외의 호출이 들어오면 SIGKILL 시그널을 발생시키며 프로그램이 종료된다
prctl(PR_SET_SECCOMP, SECCOMP_MODE_STRICT);
Berkeley Packet Filter (BPF)라는 필터식을 이용해 시스템콜을 관리하는 모드이다
원하는 시스템 콜의 호출을 허용하거나 거부할 수 있다
임의 데이터를 비교하고, 결과에 따라 특정 구문으로 분기하는 명령어를 제공
먼저 스레드의 no_new_privs 비트가 설정되어 있어야 아래와 같이 설정이 가능하다
prctl(PR_SET_NO_NEW_PRIVS, 1);
이후 코드로 필터식을 선언하면 된다
prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, args);