为什么要进行虚拟机探测
病毒分析师等人员通常会在虚拟机或沙盒中启动并分析木马病毒。许多防病毒和安全产品会在虚拟机中测试可疑文件以检测其行为。木马识别出它运行在虚拟环境中可能就会改变其行为,比如停止执行或降低活动水平,以此躲避安全分析。
因此熟知检测是否在虚拟机环境中的方法很有必要,知名的PowerShell渗透框架nishang中给出了如何用PowerShell检测虚拟机环境的脚本Check-VM.ps1,我们可以从这个脚本入手了解如何用PowerShell进行虚拟机检测。
Hyper-V检测
读五个注册表项:
-
HKLM:SOFTWAREMicrosoft: 存储微软安装软件的具体信息的注册表项。 -
hklm:HARDWAREDESCRIPTIONSystem -Name SystemBiosVersion: BIOS 版本描述信息的注册表项。 -
HKLM:HARDWAREACPIFADT: 存储系统的固件 ACPI 数据表(Fixed ACPI Description Table,FADT)信息的注册表项 -
HKLM:HARDWAREACPIRSDT: 存储系统的固件 ACPI 数据表(Root System Description Table,RSDT)信息的注册表项,Hyper-V 虚拟化环境可能会在该表中添加特定的标志。 -
HKLM:SYSTEMControlSet001Services: 这个键包含当前系统所有运行的服务信息。一些特定服务如“vmicheartbeat”, "vmicvss", "vmicshutdown", "vmiexchange"只会出现在 Hyper-V 环境中,这些服务的存在可以被视作 Hyper-V 环境的标志。
Get-ChildItem HKLM:SOFTWAREMicrosoft | Select-String -Pattern "Virtual Machine|Hyper-V"
Get-ItemProperty hklm:HARDWAREDESCRIPTIONSystem -Name SystemBiosVersion | Select-String -Pattern "vrtual|VRTUAL|Vrtual"
Get-ChildItem HKLM:HARDWAREACPIFADT Select-String -Pattern "vrtual|VRTUAL|Vrtual"
Get-ChildItem HKLM:HARDWAREACPIRSDT Select-String -Pattern "vrtual|VRTUAL|Vrtual"
Get-ChildItem HKLM:SYSTEMControlSet001Services | Select-String -Pattern "VirtualMachine|Hyper-V|vmicheartbeat|vmicvss|vmicshutdown|vmicexchange"
VMware检测
检测VMware的方法除了检查注册表项以外,还可以检查机器上是否有"vmware"有关的进程,主要检测方法为:
-
HKLM:SYSTEMControlSet001Services: 这个键在注册表中保存了系统中所有运行的服务的信息。这里查找的是与VMware相关的服务,如"vmdebug","vmmouse","VMTools","VMMEMCTL"。 -
hklm:HARDWAREDESCRIPTIONSystemBIOS -Name SystemManufacturer: 这是用来存储计算机BIOS制造商信息的注册表项。在这里,脚本通过检查此项的值来查找"vmware"字符串来识别VMware虚拟化环境。 -
hklm:hardwaredevicemapscsi: 这个键在注册表中包含了系统中所有的SCSI设备的映射信息。如果在这其中的一个"identifier"值包含"vmware",则表示这可能是一个VMware虚拟化环境。 -
获取进程列表,检查进程名称是否包含“vmwareuser.exe”或者“vmwaretray.exe”
Get-ChildItem HKLM:SYSTEMControlSet001Services | Select-String -Pattern "vmdebug|vmmouse|VMTools|VMMEMCTL"
Get-ItemProperty hklm:HARDWAREDESCRIPTIONSystemBIOS -Name SystemManufacturer | Select-String -Pattern "vmware"
Get-Childitem hklm:hardwaredevicemapscsi -recurse | gp -Name identifier | Select-String -Pattern "vmware"
Get-Process | Select-String -Pattern "vmware|Vmware|VMWare|VMWARE|vmtools"
Virtual PC
Virtual PC的检测方式大同小异:
1. 当前系统的进程列表。检查列表中是否出现进程名为"vmusrvc.exe"或"vmsrvc.exe"的进程
Get-Process | Select-String -Pattern "vmusrvc|vmsrvc"
Get-Process | Select-String -Pattern "vmwareuser|vmwaretray"
Get-ChildItem HKLM:SYSTEMControlSet001Services | Select-String -Pattern "vpc-s3|vpcuhub|msvmmouf"
Virtual Box
1. 获取当前系统的进程列表,检查列表中出现名为"vboxservice.exe"或"vboxtray.exe"的进程。
Get-Process | Select-String -Pattern "vboxservice|vboxtray"
Get-ChildItem HKLM:HARDWAREACPIFADT | Select-String -Pattern "vbox_"
Get-ChildItem HKLM:HARDWAREACPIRSDT | Select-String -Pattern "vbox_"
Get-Childitem hklm:hardwaredevicemapscsi -recurse | gp -Name identifier | Select-String -Pattern "vbox"
Get-ItemProperty hklm:HARDWAREDESCRIPTIONSystem -Name SystemBiosVersion | Select-String -Pattern "vbox"
Get-ChildItem HKLM:SYSTEMControlSet001Services | Select-String -Pattern "VBoxMouse|VBoxGuest|VBoxService|VBoxSF"
Xen
1. 获取当前系统的进程列表。检查列表中名为"xenservice.exe"的进程。
Get-Process | Select-String -Pattern "xenservice.exe"
Get-ChildItem HKLM:HARDWAREACPIFADT | Select-String -Pattern "xen"
Get-ChildItem HKLM:HARDWAREACPIDSDT | Select-String -Pattern "xen"
Get-ChildItem HKLM:HARDWAREACPIRSDT | Select-String -Pattern "xen"
Get-ChildItem HKLM:SYSTEMControlSet001Services | Select-String -Pattern "xenevtchn|xennet|xennet6|xensvc|xenvdb"
QEMU
1. 查询注册表项hklm:hardwaredevicemapscsi下的所有子项的 "identifier" 值,查找字符串"qemu"。
Get-Childitem hklm:hardwaredevicemapscsi -recurse | Get-ItemProperty -Name identifier | Select-String -Pattern "qemu"
Get-ItemProperty HKLM:HARDWAREDESCRIPTIONSystemCentralProcessor0 -Name ProcessorNameString | Select-String -Pattern "qemu"
总结
原文始发于微信公众号(赛博安全狗):【权限维持技术】利用PowerShell进行虚拟机探测
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论