【权限维持技术】利用PowerShell进行虚拟机探测

admin 2023年12月12日15:35:25评论10 views字数 4627阅读15分25秒阅读模式

 

【权限维持技术】利用PowerShell进行虚拟机探测

为什么要进行虚拟机探测

【权限维持技术】利用PowerShell进行虚拟机探测

病毒分析师等人员通常会在虚拟机或沙盒中启动并分析木马病毒。许多防病毒和安全产品会在虚拟机中测试可疑文件以检测其行为。木马识别出它运行在虚拟环境中可能就会改变其行为,比如停止执行或降低活动水平,以此躲避安全分析。

因此熟知检测是否在虚拟机环境中的方法很有必要,知名的PowerShell渗透框架nishang中给出了如何用PowerShell检测虚拟机环境的脚本Check-VM.ps1,我们可以从这个脚本入手了解如何用PowerShell进行虚拟机检测。

【权限维持技术】利用PowerShell进行虚拟机探测

 

【权限维持技术】利用PowerShell进行虚拟机探测

Hyper-V检测

【权限维持技术】利用PowerShell进行虚拟机探测

读五个注册表项

  1. HKLM:SOFTWAREMicrosoft: 存储微软安装软件的具体信息的注册表项。
  2. hklm:HARDWAREDESCRIPTIONSystem -Name SystemBiosVersion: BIOS 版本描述信息的注册表项。
  3. HKLM:HARDWAREACPIFADT: 存储系统的固件 ACPI 数据表(Fixed ACPI Description Table,FADT)信息的注册表项
  4. HKLM:HARDWAREACPIRSDT: 存储系统的固件 ACPI 数据表(Root System Description Table,RSDT)信息的注册表项,Hyper-V 虚拟化环境可能会在该表中添加特定的标志。
  5. HKLM:SYSTEMControlSet001Services: 这个键包含当前系统所有运行的服务信息。一些特定服务如“vmicheartbeat”, "vmicvss", "vmicshutdown", "vmiexchange"只会出现在 Hyper-V 环境中,这些服务的存在可以被视作 Hyper-V 环境的标志。
可以使用以下PowerShell语句进行查询:
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"

【权限维持技术】利用PowerShell进行虚拟机探测

【权限维持技术】利用PowerShell进行虚拟机探测

【权限维持技术】利用PowerShell进行虚拟机探测

VMware检测

【权限维持技术】利用PowerShell进行虚拟机探测

检测VMware的方法除了检查注册表项以外,还可以检查机器上是否有"vmware"有关的进程,主要检测方法为:

  1. HKLM:SYSTEMControlSet001Services: 这个键在注册表中保存了系统中所有运行的服务的信息。这里查找的是与VMware相关的服务,如"vmdebug","vmmouse","VMTools","VMMEMCTL"。
  2. hklm:HARDWAREDESCRIPTIONSystemBIOS -Name SystemManufacturer: 这是用来存储计算机BIOS制造商信息的注册表项。在这里,脚本通过检查此项的值来查找"vmware"字符串来识别VMware虚拟化环境。
  3. hklm:hardwaredevicemapscsi: 这个键在注册表中包含了系统中所有的SCSI设备的映射信息。如果在这其中的一个"identifier"值包含"vmware",则表示这可能是一个VMware虚拟化环境。
  4. 获取进程列表,检查进程名称是否包含“vmwareuser.exe”或者“vmwaretray.exe”
可以使用以下PowerShell语句进行查询:
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"

【权限维持技术】利用PowerShell进行虚拟机探测

【权限维持技术】利用PowerShell进行虚拟机探测

【权限维持技术】利用PowerShell进行虚拟机探测

【权限维持技术】利用PowerShell进行虚拟机探测

【权限维持技术】利用PowerShell进行虚拟机探测

Virtual PC

【权限维持技术】利用PowerShell进行虚拟机探测

Virtual PC的检测方式大同小异:

1. 当前系统的进程列表。检查列表中是否出现进程名为"vmusrvc.exe"或"vmsrvc.exe"的进程

2. 检查是否存在名为"vmwareuser.exe"或"vmwaretray.exe"的进程
3. 查询注册表项HKLM:SYSTEMControlSet001Services下的所有子项,查找名为"vpc-s3","vpcuhub"或"msvmmouf"的服务。
可以使用以下PowerShell语句进行查询:
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"
【权限维持技术】利用PowerShell进行虚拟机探测

Virtual Box

【权限维持技术】利用PowerShell进行虚拟机探测

1. 获取当前系统的进程列表,检查列表中出现名为"vboxservice.exe"或"vboxtray.exe"的进程。

2. 查询注册表项HKLM:HARDWAREACPIFADT下的所有子项,查找字符串"vbox_"。
3. 查询注册表项HKLM:HARDWAREACPIRSDT下的所有子项,再次查找字符串"vbox_"。
4. 查询注册表项hklm:hardwaredevicemapscsi下的所有子项的 "identifier" 值,查找字符串"vbox"。
5. 查询注册表项hklm:HARDWAREDESCRIPTIONSystem -Name SystemBiosVersion的值,检查是否包含字符串"vbox"。
6.查询注册表项HKLM:SYSTEMControlSet001Services下的所有子项,查找名为"VBoxMouse","VBoxGuest","VBoxService"或"VBoxSF"的服务。
可以使用以下PowerShell语句进行查询:
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"
【权限维持技术】利用PowerShell进行虚拟机探测

Xen

【权限维持技术】利用PowerShell进行虚拟机探测

1. 获取当前系统的进程列表。检查列表中名为"xenservice.exe"的进程。

2. 查询注册表项HKLM:HARDWAREACPIFADT下的所有子项,查找字符串"xen"。
3. 查询注册表项HKLM:HARDWAREACPIDSDT下的所有子项,查找字符串"xen"。
4. 查询注册表项HKLM:HARDWAREACPIRSDT下的所有子项,查找字符串"xen"。
5.查询注册表项HKLM:SYSTEMControlSet001Services下的所有子项,查找名为"xenevtchn", "xennet", "xennet6", "xensvc", "xenvdb"的服务。
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"
【权限维持技术】利用PowerShell进行虚拟机探测

QEMU

【权限维持技术】利用PowerShell进行虚拟机探测

1. 查询注册表项hklm:hardwaredevicemapscsi下的所有子项的 "identifier" 值,查找字符串"qemu"。

2.查询注册表项HKLM:HARDWAREDESCRIPTIONSystemCentralProcessor�下名为 "ProcessorNameString" 的项的值,查找是否包含字符串"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进行虚拟机探测

总结

【权限维持技术】利用PowerShell进行虚拟机探测
本文分析了知名渗透框架nishang中检测虚拟机环境的逻辑,给出了VMWare、QEMU等多种不同虚拟机的检测方法,有利于分析木马病毒规避查杀的手段。

原文始发于微信公众号(赛博安全狗):【权限维持技术】利用PowerShell进行虚拟机探测

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月12日15:35:25
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【权限维持技术】利用PowerShell进行虚拟机探测https://cn-sec.com/archives/2290401.html

发表评论

匿名网友 填写信息