Web/Backend

온라인 저지에서 시스템 콜 막기(Sandbox)

백준과 같은 온라인 저지에서는 코드에 악의적인 system call을 넣는 사용자들을 막기 위해 다양한 방법을 사용한다.
(Sandbox)

 

Sandbox

외부로부터 들어온 프로그램이 보호된 영역에서 동작해 시스템이 부정하게 조작되는 것을 막는 보안 형태

 

 

Seccomp

리눅스 커널에서 애플리케이션 샌드박싱 메커니즘을 제공하는 컴퓨터 보안 기능

정해지지 않은 system call이 들어오면 바로 종료시켜버림.

2가지의 mode가 있다.

  1. Strict_Mode
    read, write, exit, sigreturn 4 가지의 syscall 만을 사용할 수 있는 모드 허용되지 않은 syscall이 호출되었을 경우, SIGKILL_Signal을 받고 종료된다.
  2. Filter_Mode
    syscall 별로 원하는 동작을 직접 지정해줄 수 있다. 즉, 특정 syscall을 내가 직접 필터링에 추가할수 있고, 원하는 동작을 수행할수 있게 설정할 수 있다.
    => 칭다오 저지는 이 모드를 사용(추가적으로 화이트리스트를 만들어 씀)

 

칭다오 Judger

- Judger의 코드는 기본적으로 seccomp의 rule을 사용하여 System call 을 탐지하여 프로세스를 고립시키는 것이 목적

- 동시에 rusage를 사용하여 자식 프로세스의 리소스 사용량을 모니터링하여 메모리, 스택등의 사용량을 제한하는 작업까지 모두 구현해 놓음

- Whitelist

{SCMP_SYS(read), SCMP_SYS(fstat), SCMP_SYS(mmap), SCMP_SYS(mprotect), SCMP_SYS(munmap), SCMP_SYS(uname), SCMP_SYS(arch_prctl), SCMP_SYS(brk), SCMP_SYS(access), SCMP_SYS(exit_group), SCMP_SYS(close), SCMP_SYS(readlink), SCMP_SYS(sysinfo), SCMP_SYS(write), SCMP_SYS(writev), SCMP_SYS(lseek), SCMP_SYS(clock_gettime)}

728x90