概要
- マルウェアは 仮想マシン検出 のためにハードウェア構成を確認
- CPUファン情報 の有無をWMI経由でチェックする手法が存在
- SMBIOSデータ改ざん で仮想マシンにCPUファンを偽装可能
- XenとQEMU/KVMでは 設定方法や注意点 が異なる
- SMBIOS構造体や WMIクラスの関係 が重要なポイント
マルウェアによる仮想マシン検出とCPUファン偽装
- 一部の マルウェア は、仮想マシンかどうかを判別するために特殊なハードウェア構成をチェック
- Win32_Fan クラスをWMI経由で参照し、CPUファンの存在を確認する手法が代表例
- これは仮想環境では通常 CPUファン情報が存在しない ため、分析回避のために利用される
- WMIには他にも多くの 仮想ハードウェア特有の情報 を取得できるクラス(Win32_CacheMemoryなど)が存在
WindowsがCPUファンを認識する仕組み
- Windowsは SMBIOSデータ を読み込み、CPUファンの存在を判断
- Win32_Fanクラスの情報は、 cimwin32.dll がSMBIOSタイプ27(Cooling Device)から取得
- SMBIOSデータは dmidecode コマンドでダンプ・編集が可能
XenでSMBIOSデータをカスタマイズする方法
- Xenでは smbios_firmware オプションでSMBIOSデータファイルを指定可能
- ファイル作成時、各SMBIOS構造体の前に 32ビットのサイズ情報 を付加する必要
- 例:CPUファン(タイプ27)と温度プローブ(タイプ28)の両方を定義し、 バイナリデータを組み合わせて1ファイル化
- 例:
18 00 00 00 ...(タイプ27),29 00 00 00 ...(タイプ28)
- 例:
- Xenの制約により、 一部のSMBIOSタイプのみ上書き可能 (タイプ27,28はパッチ適用が必要)
- パッチ適用後、仮想マシン起動時に Win32_FanクラスでCPUファンが認識
QEMU/KVMでのSMBIOS偽装
- QEMU/KVMでは -smbios file=... オプションでSMBIOSデータを簡単に指定可能
- Xenと異なり、 サイズ情報の付加は不要 で、純粋なSMBIOSバイナリデータのみでOK
- ホストのSMBIOSデータをそのまま流用することも可能
- 例:
cat /sys/firmware/dmi/tables/DMI > /path/to/smbios.bin
- 例:
まとめと応用
- マルウェアの 仮想マシン検出回避 や解析環境の偽装に有効な手法
- SMBIOSデータの編集 は他のハードウェア情報(例:Win32_CacheMemory等)にも応用可能
- Xenの場合は パッチ適用や構造体サイズの管理 に注意、QEMU/KVMは比較的容易