- Malware들은 가상 환경에서 동작하는 것을 피하기 위해 CPU 팬 같은 하드웨어 존재 여부를 확인함
- CPU 팬 정보는 WMI의 Win32_Fan 클래스를 통해 확인 가능하며, 이 데이터는 SMBIOS에 저장됨
- Xen에서 커스텀 SMBIOS 데이터를 삽입하려면 패치와 별도의 설정이 필요하며, Cooling Device(Type 27) 와 Temperature Probe(Type 28) 테이블 모두 구성 필요함
- QEMU/KVM에서는 별도 패치 없이 -smbios 옵션으로 간단히 커스텀 SMBIOS 적용 가능함
- 이를 통해 가상 머신이 CPU 팬이 존재하는 것처럼 속여, 악성코드의 탐지 우회를 시도할 수 있음
왜 이런 작업을 하는가?
- 일부 악성코드는 가상 환경에서 실행되는지 확인하려고 특정 하드웨어(예: CPU 팬)의 존재 유무를 체크함
- Win32_Fan 등의 WMI 클래스로 하드웨어를 점검하며, 이러한 정보가 없으면 가상 머신이라고 판단하여 실행을 회피함
- 분석자들이 악성코드를 분석하지 못하게 하려는 의도임
- Win32_CacheMemory, Win32_VoltageProbe 등 다양한 WMI 클래스가 존재하지만 이번 글에서는 CPU 팬에 집중 설명함
컴퓨터는 어떻게 CPU 팬이 있는지 인식하는가?
- 컴퓨터는 SMBIOS 정보를 읽어 냉각 장치(CPU 팬) 존재를 인지함
- Win32_Fan 인스턴스는 cimwin32.dll에서 제공하며, 해당 DLL이 SMBIOS의 type 27 엔트리로부터 팬 정보를 읽음
- DLL 후킹 등도 가능하지만, SMBIOS 직접 조작이 보다 나은 접근임
SMBIOS Type 27
- SMBIOS type 27은 "Cooling Device" 를 의미함
- dmidecode 유틸리티로 SMBIOS의 Cooling Device 데이터를 직접 확인 가능
- 예시:
- Type: Chip Fan
- Status: OK
- Description: CPU Fan
- Nominal Speed: 5600 rpm 등
Xen에서 커스텀 SMBIOS 데이터 설정 방법
- Xen에서는 domain 설정 파일의 smbios_firmware 옵션을 사용해 바이너리 형태의 SMBIOS 데이터를 직접 지정할 수 있음
- smbios.bin 파일을 만들어 Cooling Device(type 27) 데이터를 삽입
- SMBIOS 구조체 크기(예: 24바이트)는 32비트 little-endian 정수로 앞에 붙여야 함
문제점: 구조체 오버라이드 제한
- Xen은 0, 1, 2, 3, 11, 22, 39번 구조체만 덮어쓸 수 있도록 제한하고 있음
- type 27은 기본적으로 허용되지 않아, 소스 패치가 필요함
- Xen 개발자 포럼에서도 관련 패치가 제안되었으나 공식적으로는 수용되지 않았음(패치 적용 및 빌드 필요)
Type 28도 필요함
- Cooling Device(type 27)은 Temperature Probe(type 28)과 연결됨
- SMBIOS에 type 28 엔트리가 없을 경우 Win32_Fan 클래스에서 정상적으로 표시되지 않음
- host 시스템의 type 28 데이터를 획득해 smbios.bin에 추가해야 정확한 인식 가능
최종 smbios.bin 구조
- Type 27과 Type 28 데이터를 모두 포함
- 각 구조체 앞에 사이즈 정보(little-endian) 삽입
- 예: 18 00 00 00 ... (type 27) ... 29 00 00 00 ... (type 28) ... 형태
Xen에서 적용 및 확인
- domain 생성 명령어로 Windows 가상 머신을 부팅한 후 WMI에서 Win32_Fan 클래스가 정상 인식되는지 확인
- Description: Cooling Device, Status: OK 표시를 통해 성공적으로 CPU 팬 인식
QEMU/KVM에서 SMBIOS 데이터 설정
- QEMU/KVM에서는 -smbios file=경로 옵션으로 손쉽게 커스텀 SMBIOS 설정 가능
- 구조체 크기 정보 없이 raw 데이터만 사용
- host의 SMBIOS 데이터를 그대로 활용해도 무방함
참고 자료
- Xen domain 설정 파일 문서, mcnewton의 세팅 노트, rejected된 Xen 패치 아카이브, System Management BIOS Reference, QEMU Anti Detection 패치 등