개요
Command Injection은 웹 요청 메시지에 임의의 시스템 명령어를 삽입하고 전송하여 웹 서버에서 해당 명령어를 실행하도록 하는 공격입니다.
어떤 웹 애플리케이션이 내부에서 시스템 명령어를 실행할 때, 만약 사용자가 입력한 값을 적절한 검증 없이 시스템 명령어의 일부분으로 전달하면 공격자는 이 값을 조작하여 임의의 시스템 명령어를 실행할 수 있습니다.
위 그림은 사용자가 IP 주소를 입력하면 웹 서버에서 ping 명령어를 실행하고 그 결과를 알려주는 웹 페이지에 관한 사진입니다. ping 명령은 입력된 IP 주소의 시스템이 현재 동작하고 있는지 확인할 때 사용하는 명령입니다.
이 때 공격자는 IP 주소 뒤에 ;을 입력하고 다른 시스템 명령어를 추가합니다. ;는 리눅스에서 여러개의 명령어를 실행하고자 할 때 입력하는 특수문자입니다. 또, cat /etc/passwd 명령어는 리눅스의 사용자 목록을 확인할 때 사용하는 명령입니다. 따라서 위 사진에서는 ping 명령어와 cat 명령어를 동시에 실행하는 것입니다
취약점 발생 원인
Command Injection 공격에 취약한 함수를 사용하였거나 사용자의 입력값을 제대로 필터링하지 못하여 발생합니다.
공격 발생 영향
- 시스템 권한 장악
- 파일 유출
- 기타 심각한 문제
대응 방안
입력값 필터링
공격자가 Command Injection을 일으키기 위해 사용하는 메타문자(| || ; && 등)를 필터링 하여 개발자가 정해놓은 시스템 명령어에 추가적으로 시스템 명령어가 실행되는 것을 막아야 합니다.