Web 취약점 진단 - 운영체제 명령 실행

1. 운영체제 명령 실행(OC)

 

2. 취약점 개요 

 

운영체제 명령 실행 취약점은 웹 애플리케이션이나 시스템에서 사용자로부터 입력받은 값을 충분한 검증이나 필터링 없이 운영체제의 시스템 명령어 인자로 전달할 때 발생하는 보안 결함이다. 해당 취약점이 존재할 경우, 공격자는 입력값에 명령어 구분자를 삽입하여 개발자가 의도하지 않은 임의의 시스템 명령어를 실행할 수 있다.

 

※ 운영체제 명령어 예) ls, cat, cp, mv, id, pwd, ifconfig, ping 등

※ 공격 예) ping -c 3 192.168.xx.xx; cat /etc/passwd 

- ping 명령어는 정상이지만, cat 명령어는 공격자가 주입한 운영체제 명령어 

- 사용자 입력은 데이터로 해석해야되는데 서버는 명령의 일부로 해석할때 위험

- &, |, ; , `  와 같은 특수문자를 사용해 운영체제 명령을 다르게 해석하게 함

- 특수문자가 포함된 사용자 입력값을 서버는 단순한 문자열로 처리하지만, 해당 문자열이 운영체제 명령어 실행 과정으로 전달될 경우 운영체제(OS)는 이를 명령어 문법으로 해석하여 실행할 수 있기 때문에 위험

쉽게 말해서 사용자 입력값을 데이터로만 해석하면 실행이 안되지만, 그 입력값이 운영체제 명령어로 해석되면 실제로 실행되기 때문에 위험하다.

 

 

3. 점검 결과 

 

1) 웹 애플리케이션에 전달되는 파라미터 값에 공개적으로 알려진 운영체제 명령 실행코드 삽입 후 명령어가 실행되는지 확인

 

운영체제 명령어 ls 실행 확인

※ 웹 애플리케이션을 통해 전달된 입력값이 서버에서 운영체제 명령으로 해석되어 서버 파일 정보가 출력된 결과 

 

 

4. 권고 사항 

 

1) 애플리케이션은 운영체제로부터 명령어를 직접적으로 호출하지 않도록 구현해야한다. 명령어를 직접 호출해야 하는 경우, 데이터가 OS의 명령어 해석기에 전달되기 전에 입력 값을 검증/확인하는 로직을 반드시 구현해야 함

2) 입력 값에 대한 파라미터 데이터 중 명령 실행에 악용될 수 있는 특수 문자('&', '|', ';', '`')에 대한 필터링 처리가 필요함

3) 웹 방화벽(WAF)에 모든 사용자 입력 값을 대상으로 악용될 수 있는 특수 문자, 특수 구문 등을 필터링할 수 있도록 규칙을 적용하여 애플리케이션 외부 방어선을 강화해야 함