PJY

Virtual Machine 탐지 기법


악성코드의 경우 행위기반 분석을 하는 경우가 많은데 위험성때문에 실제 머신에서 분석을 하는 경우는 드물다.

따라서 일반적으로 가상머신에서 테스트하는데 악성코드 입장에서 가상머신임을 탐지하면 프로그램 흐름이 실제 머신과 다르도록 하여 행위기반 분석을 우회하기도 한다.


실제 머신과 가상머신의 차이는 다음과 같다.


1. 특정 레지스트리

가상머신에서는 가상 디스크 컨트롤러를 위한 레지스트리가 존재한다.


2. 가상 머신에서 실행되는 프로세스

vmsrvc.exe, vmusrvc.exe, vboxtray.exe, vmtoolsd.exe, df5serv.exe, vboxservice.exe


3. CPU 사이클 측정

x86 cpu의 경우 64bit크기의 TSC(Time Stamp Counter) 레지스터가 존재한다. RDTSC 명령어를 통해 이 값을 읽을 수 있는데, 그 차이를 구한다.

일반적으로 실제 머신은 100이하의 값을 갖지만 가상머신의 경우 1000 ~ 10000이상의 큰 차이를 보인다.

rdtsc

mov time1, eax

rdtsc

mov time2, eax

sub time2, time1

에서 time2가 100보다 작으면 실제 머신, 그 외의 경우 가상머신으로 판단한다.


4. 백도어 I/O포트 확인

일반적으로 가상머신은 호스트머신과의 통신을 위해 백도어를 사용하는데 이를 탐지하는 방법은 문서로 존재한다(VMware provides official documented ways of VM detection)

간단히 설명하면 실제 머신의 현재 권한 CPL(Current Privilege Level)이 입출력 권한IOPL(I/O Privilege Level) 보다 높아야 하는데, 대부분 운영체제는 IOPL을 0으로 정의한다. 따라서 커널레벨(Ring 0)에서만 접근할 수 있는데(유저 레벨은 Ring 3) 가상머신의 경우 Ring 3에서 Ring 0으로 접근해도 오류가 발생하지 않는다.


5. CPU 코어 수

일반적으로 가상머신은 1 core를 사용하는데 반해 실제 머신은 다수의 core를 사용한다.

PEB+0x64에 CPU코어 수가 존재하는데 PEB가 fs:[0x30]이므로

mov eax, dword ptr fs:[0x30]

mov eax, dword ptr ds:[eax+0x30]

명령으로 eax에 cpu코어 수를 담을 수 있다.



End.

'Security > System' 카테고리의 다른 글

Virtual Machine 탐지 기법  (0) 2016.05.24
리눅스의 ASLR  (0) 2016.03.10
DEP와 RTL  (1) 2015.11.12
Bypass Anti-Reversing  (0) 2015.09.30
Make own FILE FUZZER  (0) 2015.09.25
Use After Free Exploit 테스트  (0) 2015.06.06

Comment +0