Online Judge에서 발생할 수 있는 보안 이슈
Web/Backend

Online Judge에서 발생할 수 있는 보안 이슈

Online Judge 온라인 저지

코드를 제출/컴파일/실행 후 제시된 문제에 대해 올바른 코드인지 여부를 판단해주는 서비스를 제공하는 사이트를 의미한다. 커스터마이징을 잘 한다면 알고리즘/자료구조 뿐만이 아니라 일반적인 프로그래밍 과제 채점에도 사용 가능할 수 있다. 객관적이고 효율적인 채점이 가능하다는 장점이 있음. 하지만 사용자가 직접 작성한 코드를 가져와서 실행시키는 Process 구조 상 여러가지 보안 문제가 발생할 위험성이 높다.

 

Authorization(권한)

Online Judge는 과제 채점 및 대회 개최를 위해 기관에서 사용하기 위한 것이므로, 적절한 권한 승인 프로세스를 통합해야 한다. 사용자는 온라인에서 신중하게 권한을 부여받아야 한다. 보안 침해 시도를 방지하기 위해 각 사용자마다 별도의 ID를 제공해야 한다. 각 사용자의 개인 데이터베이스에 대한 해킹 시도를 방지하기 위해 각 사용자에게 별도의 ID를 제공해야 한다. 이러한 고유 ID를 사용하여 각 사용자는 보관된 응답과 웹사이트 환경에 액세스하여 나중에 사용할 수 있다. 예를 들어, 어떤 참가자도 입력/출력 또는 문제 설명을 변경할 수 없으며, 반면에 문제 출제자는 진행 중인 콘테스트에 참가할 수 없어야 한다.

 

Solution Access

부정 행위 및 표절 위험을 방지하기 위해 진행중인 콘테스트/과제에서 사용자/참가자는 다른 사용자의 솔루션을 볼 수 없어야 한다. 테스터/평가자는 모든 코드에 액세스할 수 있어야 한다.

 

Malicious Codes

사용자는 무한 루프와 같은 악성 코드를 실행하여 많은 메모리를 소모할 수 있다. 메모리나 시간과 같은 리소스에 대한 제한을 사용하면 이러한 경우에서 벗어날 수 있다. 또한 사용자가 많은 자식 프로세스를 생성하여 서버 리소스를 손상시키는 경우가 있을 수 있다. 악성 프로그램 코드 및 터미널 명령문을 사용하면 Online Judge 환경이 손상될 수 있다. 사용자의 이러한 행동을 방지하기 위해 Online Judge는 Sandbox Libraries를 사용하여 보호된다. Sandbox Libraries는 C/C++ 및 Python 개발자가 자동화된 프로파일링 도구 및 감시 프로그램을 만들 수 있는 소프트웨어 구성 요소의 오픈 소스 제품군을 의미한다. 샌드박스 라이브러리의 일부 기능은 다음과 같다.

  • 실행되는 프로그램이 호출하는 인수 및 System Call을 캡처하고 사용자 정의 정책 모듈을 통해 악의적 작업을 차단.
  • 프로그램에 할당된 리소스의 할당량 제한을 지정합니다.
  • 프로그램 권한을 최소화하고, 운영 체제의 중요한 부분으로부터 격리함

 

Users may have access to the codes of other user during ongoing contest/assignments

Online Judge 시스템의 사용자는 다른 사용자의 프로그램 코드에 액세스하는 것이 엄격히 금지되어 있다. 다른 사용자의 프로그램 코드를 자신의 코드처럼 사용하여 Online Judge에 제출하는 것은 표절로 간주될 수 있기 때문. 이 문제에 대한 해결책이 더 논의되어야만 한다. 각 사용자의 프로그램 코드를 보호하기 위해 Cascaded 암호화가 각 코드에 적용된다. 3DES(Triple Data Encryption Standard) 암호화 기술은 사용자의 프로그램 코드를 암호화하는 데 사용된다. 3DES 암호화를 사용하면 네트워크 위협이나 프로그램 코드의 무단 액세스가 발생할 경우 네트워크를 통해 데이터 보안을 구현할 수 있다.

 

Network Attacks

Online Judge의 또 다른 보안 문제는 DoS와 같은 네트워크 공격의 가능성이다. 해킹은 이러한 시스템에서 또 다른 문제이다. Online Judge 환경의 보안 위험 요소 중 하나의 시나리오는 IP 주소를 Spamming하는 데 사용할 수 있는 Outgoing 네트워크 연결을 만들어 호스트 서버로 하여금 Online Judge의 IP에 대한 지원을 그만두게 만들 수 있다는 것이다. 이러한 공격은 해당 패킷을 생성한 프로세스의 UID를 기반으로 로컬에서 발생하는 패킷을 차단할 수 있는 iptables를 사용하여 처리된다.

 

참고: http://www.iosrjournals.org/iosr-jce/papers/Vol19-issue3/Version-2/R190302102106.pdf

 

728x90