VM이 CPU 팬을 가진 것처럼 인식하게 만들어서 악성코드를 속이기
카테고리
보안
서브카테고리
인프라/DevOps/보안
대상자
보안 연구자, 악성코드 분석자, 가상화 환경 운영자
핵심 요약
- SMBIOS 구조체를 조작해 Cooling Device(Type 27)와 Temperature Probe(Type 28) 정보를 삽입함으로써, VM이 CPU 팬이 존재하는 것처럼 속임
- QEMU/KVM은
-smbios
옵션으로 간단히 커스텀 SMBIOS 적용 가능하지만, Xen은 소스 패치 및 별도 설정이 필요 - Win32_Fan 클래스를 통해 악성코드가 하드웨어 존재 여부를 점검하며, 이 정보가 없으면 VM이라고 판단하여 실행을 회피
섹션별 세부 요약
SMBIOS와 WMI의 역할
- WMI의 Win32_Fan 클래스는 SMBIOS 정보를 기반으로 CPU 팬 존재 여부를 확인
- cimwin32.dll은 SMBIOS의 Type 27(Cooling Device) 엔트리로부터 팬 정보를 읽음
- dmidecode 유틸리티로 SMBIOS의 Cooling Device 데이터를 직접 확인 가능
Xen과 QEMU/KVM의 SMBIOS 설정
- Xen은 smbios_firmware 옵션을 통해 바이너리 형태의 SMBIOS 데이터를 직접 지정해야 하며, Type 27은 기본적으로 허용되지 않음
- QEMU/KVM은
-smbios file=경로
옵션으로 간단히 커스텀 SMBIOS 설정 가능 - Xen은 0, 1, 2, 3, 11, 22, 39 번 구조체만 덮어쓸 수 있도록 제한
실제 적용 예시
- smbios.bin 파일을 생성해 Type 27(Cooling Device)과 Type 28(Temperature Probe) 데이터를 삽입
- 각 구조체 앞에 little-endian 형식의 크기 정보(예:
18 00 00 00
) 삽입 - Windows VM 부팅 후 WMI에서 Win32_Fan 클래스가 정상적으로 인식되는지 확인
결론
- QEMU/KVM은
-smbios
옵션을 사용해 간단히 SMBIOS 조작 가능, Xen은 패치와 별도 설정이 필수적 - 악성코드가 WMI 클래스를 통해 하드웨어 존재 여부를 점검하므로, SMBIOS 데이터 조작은 탐지 우회에 효과적
- SMBIOS 정보가 실제 하드웨어와 불일치하는 경우, 악성코드는 50% 이상의 VM에서 탐지 실패 가능하지만, 이는 악성코드 제작자에게도 충분한 가치가 있음