1. Bash Shell Shock(CVE-2014-6271)

- 리눅스 계열 OS에서 주로 사용하는 GNU Bash에 공격자가 원격에서 악의적인 시스템 명령을 내릴 수 있는 취약점

- 환경변수를 통해 공격자가 원격으로 명령을 실행할 수 있음.

- 현재는 보안패치를 통해 취약점이 제거된 상태

[캡쳐 1] NVD CVE-2014-6271

2. 취약점 분석

2.1) 영향받는 bash 버전

Bash-4.2.45.5.el7_0.2
bash-4.1.2-15.el6_5.1
bash-4.1.2-15.el6_5.1.sjis.1
bash-4.1.2-9.el6_2.1
bash-4.1.2-15.el6_4.1
bash-3.2-33.el5.1
bash-3.2-33.el5_11.1.sjis.1
bash-3.2-24.el5_6.1
bash-3.2-32.el5_9.1
bash-3.2-32.el5_9.2
bash-3.0-27.el4.2

2.2) CGI (Common Gateway Interface)

- CGI란 웹서버와 외부 프로그램 사이에서 정보를 주고받는 방법이나 규약을 뜻함.

- 웹 서버와 사용자 프로그램 사이에서 정보를 주고받는  프로그램.

- 서버에 cgi-bin 폴더를 만든 후 내부에 스크립트 파일을 생성, 웹 서버가 CGI를 통해 cgi-bin에 접속 및 파일 실행 후 결과를 클라이언트에 응답.

- 현재는 서버단 스크립트 언어(Server-side Script Language : ASP, JSP, PHP 등)가 활성화되면서 많이 사용되지는 않음.

[캡쳐 2] CGI (https://velog.io/@seanlion/cgi)

- 모든 bash shell이 취약점에 노출되어있는 것이 아닌, 환경변수를 통해 bash를 호출할 수 있는 프로그램이 시스템에 존재할 경우 취약점에 노출되는 것으로, 대표적인 프로그램으로는 CGI가 있음.

2.3) 환경변수

- "자주 사용하는" 혹은 "필요한 변수들을 미리 선언해 놓은 변수"를 뜻함

- export 명령을 통해 선언하며, env 명령을 통해 선언된 전체 환경변수를 확인할 수 있음.

[캡쳐 3] 환경변수 x 선언 및 확인

- 환경변수로 함수를 선언하는 것 또한 가능하며, 함수는 다음과 같이 선언

[캡쳐 4] 환경변수 함수 선언 및 확인

- 만약, 환경변수의 값을 명령을 포함하여 함수와 비슷한 형태로 선언 후 bash 명령어를 통해 초기화할 경우

- 입력 값에 대한 유효성 검증을 하지않는 버그로 인해 명령어까지 환경변수로 등록되며, 이후 해당 변수 실행 시 해당 명령까지 실행되어 취약점이 발생.

[캡쳐 5] 취약점 발생

3. 공격 실습

 

PentesterLab: Learn Web App Pentesting!

This course details the exploitation of the vulnerability CVE-2014-6271. This vulnerability impacts the Bourne Again Shell "Bash". Bash is not usually available through a web application but can be indirectly exposed through a Common Gateway Interface "CGI

pentesterlab.com

3.1) 피해자 환경

IP : 192.168.56.110
bash 버전 : 4.2.45(1)-releasa (i686-pc-linux-gnu)

[캡쳐 6] 취약한 버전의 bash

3.2) 공격자 환경

IP : 192.168.56.102

[캡쳐 7] /cgi-bin/status

- 웹 브라우저의 개발자 도구를 통해 확인해보면, "/cgi-bin/"의 "status" 스크립트를 실행시켜 결과를 반환함.

[캡쳐 8] /cgi-bin/status 결과

- /cgi-bin/status를 이용하는 과정을 악용해 취약점 사용이 가능함.

[캡쳐 9] 리버스쉘

- 공격자는 리버스쉘 연결을 위해 9999포트를 오픈한 후 조작된 요청을 전송함.

[캡쳐 10] 조작된 요청 전송

- 조작된 요청을 전송한 결과 공격자는 쉘을 획득하며 추가적인 명령을 수행할 수 있음.

[캡쳐 11] 공격자의 쉘 획득

- 뿐만아니라 공격자는 임의의 명령을 수행할 수 있음.

[캡쳐 12] ping 명령 및 /etc/passwd 내용 노출

- 와이어샤크를 통해 패킷을 확인해보면 다음과 같음.

[캡쳐 13] 200 응답값 확인

4. 대응방안

- 취약점이 패치된 bash 업데이트 적용.

- 사용하지 않는 CGI 서비스 삭제 또는 관련 서비스 중지

- 패킷을 분석하여 공격 패턴(ex. "() {" 등)을 등록하여 탐지 및 차단

 

참고

 

KISA 한국인터넷진흥원

□ FOCUS  ○ GNU Bash 원격코드실행 취약점 이슈 분석 및 대응방안 4

www.kisa.or.kr

+ Recent posts