Seccomp

밍기적·2023년 2월 6일
0

Seccomp(Secure Computing Mode)

리눅스에서 sandbox 기반으로 syscall을 허용 및 차단하여 공격의 가능성을 막는 보안 메커니즘

Sandbox

  • 외부의 공격으로부터 시스템을 보호하기 위해 설계된 기법
  • Allow List와 Deny List 두 가지를 선택해 적용이 가능

Seccomp은 prctl()이라는 함수로 사용할 수 있음

Prctl()

  • 프로세스를 관리하는 함수
int prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5);
  • 모드를 결정해주는 option 인자에 값을 정하면 나머지 전달되는 인자 값이 달라짐
  • 해당 인자에 PR_SET_SECCMOP 상수를 전달할 시 seccomp을 설정할 수 있음

STRICT_MODE

STRICT_MODE는 read(2), write(2), _exit(2), sigreturn(2) (but not exit_group(2))로 제한하는 것

해당 시스템 콜 이외의 호출이 들어오면 SIGKILL 시그널을 발생시키며 프로그램이 종료된다

 prctl(PR_SET_SECCOMP, SECCOMP_MODE_STRICT); 

FILTER_MODE

Berkeley Packet Filter (BPF)라는 필터식을 이용해 시스템콜을 관리하는 모드이다

원하는 시스템 콜의 호출을 허용하거나 거부할 수 있다

임의 데이터를 비교하고, 결과에 따라 특정 구문으로 분기하는 명령어를 제공

먼저 스레드의 no_new_privs 비트가 설정되어 있어야 아래와 같이 설정이 가능하다

prctl(PR_SET_NO_NEW_PRIVS, 1);

이후 코드로 필터식을 선언하면 된다

prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, args);

0개의 댓글