가상환경을 벗어나나??
분석가, 보안인을 타겟으로 하는 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
# 참고
-
VMware issues fix for critical virtual machine flaw
http://www.scmagazineuk.com/vmware-issues-fix-for-critical-virtual-machine-flaw/article/420215/
-
VMware Security Advisories VMSA-2015-0004
-
Escaping VMware Workstation through COM1
https://docs.google.com/document/d/1sIYgqrytPK-CFWfqDntraA_Fwi2Ov-YBgMtl5hdrYd4/preview?sle=true