蕎麦で喋ろうかとも思ったけど、まとめきれなかったし古いネタなのでメモだけしとこうと思います。
VMware Workstationによるハニーポットは多いが、ゲスト側のバックドアをチェックすれば「現在VMwareの中にいる」ということがわかる。
VMWareのローカル検知
http://chitchat.at.infoseek.co.jp/vmware/backdoorj.html
によれば、
/* Intel 表記 (MASM 他、多くの Windows 系アセンブラ) */ MOV EAX, 564D5868h /* マジックナンバー */ MOV EBX, コマンド特有のパラメータ MOV CX, バックドアコマンド番号 MOV DX, 5658h /* VMware I/O ポート */ IN EAX, DX (または OUT DX, EAX) /* AT&T 表記 (gnu as 他、多くの unix 系アセンブラ) */ movl $0x564D5868, %eax; /* マジックナンバー */ movl コマンド特有のパラメータ, %ebx; movw バックドアコマンド番号, %cx; movw $0x5658, %dx; /* VMware I/O ポート */ inl %dx, %eax; (または outl %eax, %dx)
という手順でバックドア機能を呼び出すことが可能であるようだ。
あるいは、BIOSを探ることで「もしかしてVM?」と疑うこともできる。このあたりを称してVMのフィンガープリントという。
実際にAGOBOTのソース?にも、バックドアを利用する検知機能が組み込まれている。実際にバックドアにコマンドを送りつけ、バージョン情報などの結果を得ている。
/* executes 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; #ifdef _WIN32 __try { #endif __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 } #ifdef _WIN32 } __except (EXCEPTION_EXECUTE_HANDLER) {} #endif 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; } CDebugDetect::CDebugDetect() { m_bIsDebug=false; }
フランスのハニーポットプロジェクトのVMwareパッチを用いれば、各種のVMフィンガープリントを「偽装」することが可能ではある。
http://honeynet.rstack.org/tools/vmpatch.c
ただしVMware Workstation 5.0.0 build-13124用。
関連:
http://www.securityfocus.com/infocus/1803
http://www.securityfocus.com/infocus/1805
http://www.securityfocus.com/infocus/1826
http://www.securityfocus.com/infocus/1828