본문 바로가기

새빨간거짓말

[CVE-2015-2336] Vmware 세상을 벗어나나?


굿모닝3가상환경을 벗어나나??

분석가, 보안인을 타겟으로 하는 APT 공격 가능??



 

# Vmware Security Update 발표

 

(2015.06.15) https://www.vmware.com/security/advisories/VMSA-2015-0004

    • TPView.dll Code Execution : CVE-2012-0897, CVE-2015-2336 
    • TPview.dll DoS : CVE-2015-2338, CVE-2015-2339 
    • TPInt.dll Code Execution : CVE-2015-2337
    • TPInt.dll DoS : CVE-2015-2340

 

# 해결방법


    • 보안패치적용

      (VMware Workstation 11.1.1 and 10.0.6; VMware Player 7.1.1 and 6.0.6 and the VMware Horizon Client for Windows 3.4.0, 3.2.1 and 5.4.2)

    • 또는, Guest OS 상의 "Virtual Printer" 제거 및 Disable 처리.

 

# 취약점 이야기

: Google Security Researcher, Kostya Kortchinsky에 의해 발표. (대박, 부럽소~)

: VM(가상머신)을 벗어나 Host(호스트) 시스템에서 코드실행이 가능한 Critical 취약점들.

: 대표적으로 알려진 관련 프로그램 - VMWare Workstation, VMware Player…. 등등 (우리가 주로 사용하는 것들… --;;;;)

: 보다 상세한 내용은 공개된 "[보고서]Escaping VMware Workstation through COM1" 확인.


 

# 분석 및 테스트

 

: 테스트 환경 - Vmware Workstation (Windows) 9.0.3

: Device 설정에서 "Printer Device"가 ON되어 있는 가상환경(Guest OS)

(참고로, 신규 VM Guest를 만들 때 Default로 "Printer Device" 추가됨)


[그림] Vmware 디바이스 설정 (Printer Device 포함)

 

: Exploit 공격코드는 친절하게 오픈 되어 있기 때문에 본 사이트에서는  링크 연결은 안함.

 단, 코드 사용 시 에러를 만날 수 있으니 OS와 Python 버전을 잘 선택 하시길…

 

다음과 같이 공격을 수행하면,

[ Guest OS ] Exploit 공격코드 (vm_exploit.py) 실행

[ Host System ] "BINBALLWIARD" 라는 프린터 잡과 함께 계산기 실행.

 

[그림] 성공적인 코드실행 (Host 상에서 계산기 실행)

 

: VMware Workstation 프린터 가상화(virtualization) - Guest OS에서 Host System 프린터에 접근하여 프린트 가능.

: printer proxy 상의 취약점을 이용하여, 다음과 같은 흐름으로 악의적인 메시지를 전달함으로써 공격코드를 실행.

  

 Guest OS----Virtual COM1 port : [EMFSPOOL/EMF Files] ---à Host OS(printer proxy 처리)


 

[그림] Printer Proxy 프로세스 (vprintproxy.exe)

 

[그림] Serial 통신(COM1) 메시지

 

: 알려진 다수의 취약점 "Stack overflow when processing a JPEG2000" 취약점 이용.

    • Custom EMR 0x8000 (내부에 JPEG2000 압축 이미지 관련 정보 존재함)
    • JPEG2000 중 0xff5c(Quantization Default) 레코드 처리과정에서 오류발생.       

[그림] JPEG2000 Record 종류

 

    • JPEG2000 압축 이미지 데이터 안에 다음과 같은 쉘코드 컨텐츠 존재.

[그림] 쉘코드 일부(계산기 실행코드)


 

: 아래와 같이 EMR 타입 0x8000을 확인한 후, JPEG2000 compressed image 를 읽어서 처리함.

 

 

: 압축된 이미지 데이터를 해제하는 단계에서, 해제된 데이터가 스택으로 2바이트(word)씩 복사되면서 스택 기반의 버퍼오버플로우가 발생.

 

 

[그림] 스택에 복사될 데이터

 

[그림] Overwrite된 스택

 

: 아래와 같이 코드 끝에서 RETN 명령을 수행하면서 앞서 Overwrite된 값으로 코드의 흐름이 변경됨 (ROP)

 

[그림] EIP Control 변경지점

 

: 이때, 코드 상의 ROP 가젯은 Vmware 파일 iconv.dll(Vmware\Vmware Workstation\iconv.dll) 를 이용함.

 

 

: 실제 실행할 코드는 ROP 가젯 코드를 통해  40000000 주소대역에 VirtualAlloc 후 Copy 됨.

 

 

 

: 실제 JMP 0x40000200 를 통해 "NOP+ 쉘코드"로  구성된 쉘코드 실행을 통해 계산기가  실행됨.

 

[그림] 쉘코드(NOP+Shellcode)

 

 


"인생은 BreakPoint" 다. ^^;;;;

$+47690

$+47744

$+2EB09

$+2DB4E

 

 

# 참고