seccomp이란 Linux 커널에서 제공하는 process_sandboxing 기법이다. 정해지지 않는 syscall이 호출될 경우 바로 종료를 시켜버릴수가 있다. 포너블 문제에서 처음 접한 개념으로 헷갈렸던 부분만 간단하게 정리하려고 한다.
seccomp은 prctl() 함수로 설정할수 있다. prctl() 함수의 인자로 어떤게 들어가냐에 따라서 설정되는 seccomp 값이 달라진다.
•
prctl ( PR_SET_SECCOMP, mode, &sock_fprog )
요런식으로 인자가 들어가는데, 첫번쨰 인자는 seccomp을 설정하겠다는 기능을 뜻한다.두번째는 어떠한 모드로 seccomp을 설정할꺼냐인데 2가지의 mode가 있다
1.
Strict_Mode
read, write, exit, sigreturn, 4 가지의 syscall 만을 사용할 수 있는 모드이다. 허용되지 않은
syscall이 호출되었을 경우, SIGKILL_Signal을 받고 종료된다.
2.
Filter_Mode
syscall 별로 원하는 동작을 직접 지정해줄 수 있다. 즉, 특정 syscall을 내가 직접 필터링에 추가할수 있고, 원하는 동작을 수행할수 있게 설정할 수 있다. ㅇ
3번째 인자는 seccomp 설정에 관련된 환경값? 세팅이라고 보면 된다.
만약 seccomp 세팅 중 (prctl함수 호출중) 에러가 나면 seccomp 설정은 에러가나는데, 여기서 개발자가 강제 종료를 시키지 않는다면, seccomp을 우회가능하다.
또한 strict mode는 mode 값이 1로 들어간당.