1. Bash Shell Shock(CVE-2014-6271)
- 리눅스 계열 OS에서 주로 사용하는 GNU Bash에 공격자가 원격에서 악의적인 시스템 명령을 내릴 수 있는 취약점
- 환경변수를 통해 공격자가 원격으로 명령을 실행할 수 있음.
- 현재는 보안패치를 통해 취약점이 제거된 상태
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 등)가 활성화되면서 많이 사용되지는 않음.
- 모든 bash shell이 취약점에 노출되어있는 것이 아닌, 환경변수를 통해 bash를 호출할 수 있는 프로그램이 시스템에 존재할 경우 취약점에 노출되는 것으로, 대표적인 프로그램으로는 CGI가 있음.
2.3) 환경변수
- "자주 사용하는" 혹은 "필요한 변수들을 미리 선언해 놓은 변수"를 뜻함
- export 명령을 통해 선언하며, env 명령을 통해 선언된 전체 환경변수를 확인할 수 있음.
- 환경변수로 함수를 선언하는 것 또한 가능하며, 함수는 다음과 같이 선언
- 만약, 환경변수의 값을 명령을 포함하여 함수와 비슷한 형태로 선언 후 bash 명령어를 통해 초기화할 경우
- 입력 값에 대한 유효성 검증을 하지않는 버그로 인해 명령어까지 환경변수로 등록되며, 이후 해당 변수 실행 시 해당 명령까지 실행되어 취약점이 발생.
3. 공격 실습
3.1) 피해자 환경
IP : 192.168.56.110
bash 버전 : 4.2.45(1)-releasa (i686-pc-linux-gnu)
3.2) 공격자 환경
IP : 192.168.56.102
- 웹 브라우저의 개발자 도구를 통해 확인해보면, "/cgi-bin/"의 "status" 스크립트를 실행시켜 결과를 반환함.
- /cgi-bin/status를 이용하는 과정을 악용해 취약점 사용이 가능함.
- 공격자는 리버스쉘 연결을 위해 9999포트를 오픈한 후 조작된 요청을 전송함.
- 조작된 요청을 전송한 결과 공격자는 쉘을 획득하며 추가적인 명령을 수행할 수 있음.
- 뿐만아니라 공격자는 임의의 명령을 수행할 수 있음.
- 와이어샤크를 통해 패킷을 확인해보면 다음과 같음.
4. 대응방안
- 취약점이 패치된 bash 업데이트 적용.
- 사용하지 않는 CGI 서비스 삭제 또는 관련 서비스 중지
- 패킷을 분석하여 공격 패턴(ex. "() {" 등)을 등록하여 탐지 및 차단
참고
'취약점 > RCE' 카테고리의 다른 글
iControl REST unauthenticated RCE(CVE-2021-22986) (1) | 2022.09.25 |
---|---|
vBulletin Pre-Auth RCE(CVE-2019-16759) (0) | 2022.09.20 |
bWAPP PHP Code Injection (0) | 2022.07.29 |
PHPUnit 원격코드 실행 취약점 (CVE-2017-9841) (0) | 2022.07.29 |
ThinkPHP 원격 코드 실행 취약점(CVE-2018-20062) (0) | 2022.07.19 |