본문 바로가기

정보보안/애플리케이션 보안

[웹 애플리케이션 취약점] 운영체제 명령 실행 취약점

운영체제 명령 실행 취약점
(OS Commend Execution)

 

① 개념

  • 적절한 검증 절차(필터링 등)를 거치지 않은 사용자 입력값이 운영체제 명령어의 일부 또는 전부로 구성되어 실행되는 경우, 의도되지 않은 시스템 명령어가 실행되어 운영에 악역향을 끼치는 취약점
  • (취약점) 웹 애플리케이션에서 시스템 명령어(system(), exec() 등)를 실행할 수 있는 함수를 제공하며, 사용자 입력값에 대한 필터링이 제대로 이루어지지 않을 경우 발생한다.
  • (공격 결과) 시스템 계정 정보 유출, 백도어 설치, 관리자 권한 탈취 등의 공격을 수행한다.

② 공격 과정

  1. 공격자는 입력 폼에 시스템 명령어를 삽입한다.
    • 같은 리눅스 명령어가 실행될 수 있는 페이지(ex. ip 입력시, ping 명령을 테스트한 결과를 반환하는 페이지)에다가 입력값과 명령어를 연속해서 실행하는 특수문자 (;,&&,||, |) , 공격자가 넣을 시스템 명령어를 넣어 실행
    • (ex. 127.0.0.1; cat /etc/passwd)
  2. 해당 요청은 URL 파라미터에 포함되어 서버에 전달된다.(웹 프록시를 통한 요청 메시지에서 확인 가능)
  3. 시스템 명령 실행 결과가 응답된다.
  4. PHP의 경우 사용할 수 있는 명령어는 다음과 같다.
    • shell_exec(cmd),passthru(cmd),exec(cmd),system(cmd)

③ 취약점 판단 기준

  • 운영체제 명령 실행 취약점이 발생할 수 잇는 입력 가능한 폼에 명령어를 삽입하여 해당 명령어가 실행되면 취약한 것으로 판단.
    • [리눅스/유닉스] url 파라미터에 ls, cat 등과 명령어 삽입
    • [윈도우] url 파라미터에 dir, config 등의 명령어 삽입

④ 대응책

  • (입력값 필터링) 사용자 입력값에 대해 운영체제 명령어를 실행할 수 있는 문자열 (;,&&,|,|| 등)을 필터링하도록 웹 소스를 작성핸다.
  • (보안장치 필터링) 웹 방화벽 등 필터링이 가능한 보안장치를 운영중이라면 룰셋(필터릿 정책)을 적용한다.
  • (화이트리스트) 웹 애플리케이션 운영상 운영체제 명령어를 사용해야 한다면 허용할 수 있는 명령어리스트를 선정해 해당 명령어만 실행할 수 있도록 한다.