운영체제 명령 실행 취약점에 대해서 알아보도록 하겠습니다.
1. 취약점 이해
1-1. 개요
웹 어플리케이션에서 system(), exec()와 같은 시스템 명령어를 실행시킬 수 있는 함수를 제공하며 사용자 입력 값에 대한 필터링이 제대로 이루어지지 않을 경우 공격자가 운영체제 시스템 명령어를 호출하여 백도어 설치나 관리자 권한 탈취 등 시스템 보안에 심각한 영향을 미칠 수 있는 취약점입니다.
1-2. 파급 효과
- 시스템 계정 정보 유출
- 백도어 설치
- 관리자 권한 탈취
- 시스템 명령어 실행
1-3. 취약점의 이해
해당 홈페이지에 명령어를 실행할 수 있으므로 홈페이지 내에 저장된 파일을 지우거나, 바이러스를 깔거나, 홈페이지 서버를 다운시키는 등의 나쁜 행위를 할 수 있게 됩니다.
2. 취약점 진단
2-1. 취약점 진단 방법
URL 파라미터 값 부분에 운영체제 명령어를 이용하여 공격 시도 시 웹 페이지 화면에 요청한 값에 대한 응답으로 실행되는지 확인해봅니다.
아래와 같이 URL의 중간이나 마지막에 &cmd=ls 등의 형태로 점검하면 됩니다.
http://host/?file=../../../var/apache/error_log&cmd=ls/etc http://host/?file=../../../var/apache/e..&cmd=uname-a |
3. 실습
실습은 DVWA을 통해 진행하였습니다.
=> 아래와 같이 IP를 입력하면 Ping테스트를 할 수 있는 폼이 있습니다.
=> IP를 입력하고 submit을 클릭하면 해당 IP에 대한 Ping 테스트를 진행할 수 있습니다.
=> ping 테스트 이외의 명령어가 실행이 되는지 확인을 해봅니다.
=> 공격자에 의해 삽입한 운영체제 명령어에 의해서 시스템 내부에서 실행되어 외부로 노출되지 않아야 할 정보까지 실행되는 것을 확인할 수 있습니다.
4. 대응방안
① 어플리케이션이 운영체제로부터 어떠한 명령어도 직접적으로 호출하지 못하도록 합니다.
② 모든 사용자 입력 폼(로그인 폼, 검색 폼, URL 등)을 대상으로 특수문자, 특수구문 필터링 규칙을 적용합니다.
③ 반드시 함수를 사용해야 하는 경우에는 입력값을 검증하여 파이프, 앰퍼샌트, 세미콜론 등 시스템 상에서 멀티라인을 지원하는 특수문자에 대한 검증을 실시해야 합니다.
④ 웹 어플리케이션 소스코드 시큐어 코딩을 적용합니다.
본 글은 "누구나 쉽게 따라하는 웹 취약점 진단 기술" 서적과 "KISA의 취약점 진단 제거 가이드(2013.12)"를 참고하여 작성하였습니다.