由于在分析恶意代码时,经常遇见反虚拟机技术, 传统的反病毒厂商也都利用虚拟机进行大量的分析从而获取样本运行的大量信息进行分析处理。常见杀软所使用的虚拟机软件通常包括VMware、VirtualBox、KVM等,这些虚拟机可以在一台物理计算机上模拟出多台虚拟的计算机,这些虚拟机完全就像真正的计算机那样进行工作。攻击者为了逃避这些虚拟机以及病毒分析沙箱,会在恶意程序中加入检测虚拟机及沙箱的代码,以判断程序所处的运行环境。当发现程序处于虚拟机沙箱中时,它就会改变操作行为隐蔽恶意动作,逃避检测。
虚拟机识别包括对系统的注册表、文件系统、硬件信息、进程识别等。虚拟机的注册表中会记录虚拟机信息相关的键值,文件系统中有与虚拟机相关的文件、文件夹,任务进程中,也会运行一些特殊的进程,这类进程名可作为识别虚拟机检测的依据。
进程识别
遍历的虚拟机进程有:
"VBoxTray.exe"
"VBoxService.exe"
"VMwareUser.exe"
"VMwareTray.exe"
"VMUpgradeHelper.exe"
"vmtoolsd.exe"
"vmacthlp.exe"文件系统
%system32%\drivers\winmouse.sys
%system32%\drivers\vmmouse.sys
%system32%\drivers\vmhgfs.sys
%system32%\drivers\VBoxMouse.sys
%system32%\drivers\VBoxGuest.sys
%System32\drivers\目录下是否存在hgfs.sys、prleth.sys、vmhgfs.sys驱动文件,其中hgfs.sys驱动文件为VMware Tools的驱动文件.
虚拟机硬件信息
虚拟机的网卡信息会有固定指纹
MAC地址:
00:05:69:xx:xx:xx VMware
00:0C:29:xx:xx:xx VMware
00:1C:14:xx:xx:xx VMware
00:50:56:xx:xx:xx VMware
00:15:5D:xx:xx:xx Hyper V
00:16:3e:xx:xx:xx Xen注册表信息
检测键(包含VM关键字)、键值。
键:HKEY_CLASSES_ROOT\Applications\VMwareHostOpen.exe
键:Monitors\ThinPrint Print Port Monitor for VMWare
键值:VMware Tools
键值:VMware SVGA II
键值:55274-640-2673064-23950 (JoeBox)
键值:76487-644-3177037-23510 (CWSandbox)
键值:76487-337-8429955-22614 (Anubis)基于真实机与虚拟机时间差
由于一般情况下同样的指令在真实机里运行时间会比在虚拟机中短。所以可以根据时间差来判断。如果它的运行时间大于0xFF时,就可以确定它处于虚拟机之中了,因此不难写出检测程序,具体实现代码如下:
代码:
.data
szTitle db "VMDetect With RDTSC", 0h
szInsideVM db "Inside VMware!", 0h
szOutsideVM db "Native OS!", 0h
.code
start:
RDTSC
xchg ecx, eax
RDTSC
sub eax, ecx
cmp eax, 0FFh
jg Detected
invoke MessageBox, 0, offset szOutsideVM, offset szTitle, 0
ret
Detected:
invoke MessageBox, 0, offset szInsideVM, offset szTitle, 0
ret
end start
-
WMI查询
由于WMI ( Windows Management Instrumentation)查询的滥用,越多的恶意代码使用WMI查询来检测虚拟机。例如一个样本通过WMI查询系统的版本,如果系统版本在6.0(Vista)以上执行,否则退出。
火眼报告列出几种可能出现的WMI查询:
文档参考来源:
https://www.fireeye.com/blog/threat-research/2016/10/increased_use_ofwmi.html
http://www.antiy.com/response/anti-virtual-machine-and-anti-sandbox-in-malware.html
http://bbs.pediy.com/showthread.php?t=119969