1. 레지스트리
1) 시스템 등록 정보
- 경로 : HKEY_LOCAL_MACHINE\SYSTEM
윈도우에서 사용하는 파일 시스템, 하드웨어 드라이버, 윈도우의 커널이 사용하는 정보 등 윈도우 하부 시스템에 관련된 다양한 설정 내용에 대한 정보가 저장된다.
- 하위키 : ControlSet001, ControlSet001
윈도우가 부팅할 때 사용하는 컨트롤 집합이 들어 있는 키로, 최소한 2개 이상 존재한다. 윈도우 XP는 하드웨어의 내용이 변경될 때 마다 새로운 컨트롤 집합을 만들어 순서대로 번호를 붙인다.
- 하위키 : CurrentControlSet
컴퓨터를 부팅하기 위해 사용한 컨트롤 집합이다. 부팅에 사용된 컨트롤 집합은 자동으로 이 키에 그 내용이 복사된다.
- 하위키 : CurrentControlSet/Enum
부팅하는 동안 시스템에서 발견된 하드웨어 장치에 대한 정보가 모두 기록되어있다.
- 하위키 : CurrentControlSet/Services
윈도우가 사용하는 드라이버와 서비스에 대해 정의되어 있다. 각 하위키는 윈도우에서 실행되는 서비스와 드라이버 이름으로 구성되어 있다. 각 키에는 Start 값이 있는데 이 값의 데이터에 따라 서비스와 드라이버가 언제 어떻게 실행되었는지 알 수 있다.
- 하위키 : CurrentControlSet/Control
SYSTEM 키의 구성 요소 중 가장 많은 항목을 포함하고 있는 키로 윈도우와 시스템 파일이 설치된 폴더, 네트워크 이름등이 저장된다.
가) VirtualBox 관련 레지스트리
- RegEnumKey : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\IDE
시스템에 설치된 하드디스크에 대한 구성이 기록된다. 이 항목은 시스템에 설치된 하드디스크별로 설정된다.
나) VMWare 관련 레지스트리
- RegEnumKey : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\SCSI
- RegEnumValue : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\disk\Enum-> 0
- RegEnumKey : HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\0000\DriverDesc
2) 하드웨어 정보
- 경로 : HKEY_LOCAL_MACHINE\HARDWARE
시스템에 장착된 하드웨어에 대한 정보가 각 하위키에 저장되어 있다. 시스템이 부팅될 때마다 하드웨어 인식기인 Ntdetect.com이 하드웨어를 인식해 이곳에 새로운 정보를 저장한다.
- 하위키 : ACPI
Advanced Configuration and Power Interface의 약자로 컴퓨터에 연결된 모든 주변기기에 전력을 시스템이 조절할 수 있도록 하는 절전 장치 규격이다. ACPI를 조정하고 지원하는 장치에 대한 정보가 들어 있다.
- 하위키 : DESCRIPTION
부팅시 설치되어 있는 하드웨어를 검사해 이 키에 관련 목록을 저장 한다. 하드웨어 인식기인 Ntdetect.com을 이용해 목록을 만들며 휘발성으로 부팅시 갱신 된다. 각 하위키에는 Identifier라는 값이 있는데, 이 값의 데이터에 장치 이름이 저장 된다.
- 하위키 : DEVICEMAP
각 하드웨어 장치들과 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services에 저장되어 있는 드라이버들을 서로 연결하는 값이 저장되어 있다. 즉 장치를 실행하기 위해 필요한 드라이버 컨트롤 집합의 위치 정보가 저장되어 있다.
가) VirtualBox 관련 레지스트리
- RegEnumKey : HKEY_LOCAL_MACHINE\HARDWARE\ACPI\DSDT
- RegEnumKey : HKEY_LOCAL_MACHINE\HARDWARE\ACPI\FADT
- RegEnumKey : HKEY_LOCAL_MACHINE\HARDWARE\ACPI\RSDT
나) VMWare 관련 레지스트리
- RegEnumValue : HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi\Scsi Port X\Scsi Bus 0\Target Id 0\Logical Unit Id 0 -> Identifier
3) 소프트웨어 정보
- 경로 : HKEY_LOCAL_MACHINE\SOFTWARE
윈도우에 설치된 소프트웨어와 디바이스 드라이버에 대한 전반적인 정보가 저장되어있다.
가) VMWare 관련 레지스트리
- HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\VMWAREHOSTOPEN.EXE 하위의 관련 키, 값
2. 관련 파일
1) 드라이버 파일
- 경로 : C:\Windows\System32\drivers
가) VMWare 관련 파일
- vmhgfs.sys
- hgfs.sys
- prleth.sys
- prlfs.sys
- prlmouse.sys
- prlvideo.sys
- prl_pv32.sys
- vpc-s3.sys
- vmsrvc.sys
- vmx86.sys
- vmnet.sys
2) GUEST <--> HOST 간의 전송된 파일들이 저장되어있는 폴더
3. 프로세스 및 서비스
1) 서비스
가) VMWare 관련 서비스
2) 프로세스
가) VMWare 관련 프로세스
4. 특정 명령어
1) I/O 명령
본래 인텔의 IN명령과 OUT명령은 커널 레벨에서만 실행 가능하다. 하지만 VMWare의 경우 Host와 Guest 간의 통신채널 제공을 위해 응용프로그램에서도 실행이 가능하다.
가) VMWare 탐지 관련 코드
VMware backdoor I/O function call |
#define VMWARE_MAGIC 0x564D5868 // Backdoor magic number #define VMWARE_PORT 0x5658 // Backdoor port number #define VMCMD_GET_VERSION 0x0a // Get version number int VMBackDoor(unsigned long *reg_a, unsigned long *reg_b, unsigned long *reg_c, unsigned long *reg_d) { unsigned long a, b, c, d; b=reg_b?*reg_b:0; c=reg_c?*reg_c:0; xtry { __asm { push eax push ebx push ecx push edx mov eax, VMWARE_MAGIC mov ebx, b mov ecx, c mov edx, VMWARE_PORT in eax, dx mov a, eax mov b, ebx mov c, ecx mov d, edx pop edx pop ecx pop ebx pop eax } } xcatch(...) {} if(reg_a) *reg_a=a; if(reg_b) *reg_b=b; if(reg_c) *reg_c=c; if(reg_d) *reg_d=d; return a; } |
Check VMware version only |
int VMGetVersion() { unsigned long version, magic, command; command=VMCMD_GET_VERSION; VMBackDoor(&version, &magic, &command, NULL); if(magic==VMWARE_MAGIC) return version; else return 0; } |
Check if running inside VMWare |
int IsVMWare() { int version=VMGetVersion(); if(version) return true; else return false; } |
5. 기타
1) User 이름
- currentuser
- sandbox
- honey
- vmware
- nepenthes
- snort
- andy
- roo
2) MAC 주소
가) VMWare 특정 MAC 주소
출처 : http://www.coffer.com/mac_find/?string=VMware
Prefix |
Vendor |
00:05:69 |
VMWARE, Inc. |
00:0C:29 |
VMware, Inc. |
00:1C:14 |
VMware, Inc. |
00:50:56 |
vmware, inc. |
00:05:69 |
VMWARE, Inc. |
00:0C:29 |
VMware, Inc. |
00:1C:14 |
VMware, Inc. |
00:50:56 |
vmware, inc. |
3) Interrupt Descriptor Table(IDT) 의 메모리 위치를 이용한 방법
- IDT의 Base address 가 0xd000000 보다 클 경우 Guest
- 단점 : 코어가 여러 개일 경우 정확하지 않음
4) 메모리 문자열 검색
- 테스트 방법
- 램 2GB의 Windows 환경
- FDPro를 이용해 메모리 덤프
- String.exe 를 이용해 문자열 추출
- “VMware” 검색 결과 관련 문자열 9160개 발견
6. 실제 악성코드가 사용하는 VM 탐지 방법
7. 쿠쿠샌드박스 (uckoo sandbox)가 VM탐지하는 악성코드를 우회하는 방법
8. 위에 적은 모든 내용을 간략하게 정리한 내용
경로 :
9. 이외의 다양한 종류의 가상머신을 탐지하는 방법
경로 : http://artemonsecurity.com/vmde.pdf
10. 서비스 탐지를 우회하는 방법
OpenService API를 사용해 해당 서비스가 설치되어있는지 확인할 수 있다. 설치되어 있지 않을 경우 NULL을 리턴 하므로 위의 API를 패치해주면 된다.
OpenService(check_serv_handle, service_name, SERVICE_QUERY_STATUS);
serivce_name이 VMware Tools 일 때 NULL을 리턴하도록 코드를 작성한다.
'보안 > 악성코드' 카테고리의 다른 글
Anti-VM 기법이 적용된 악성코드 분석 및 우회 방법 연구 (1) | 2015.06.22 |
---|