- UID
- 1625
- 积分
- 34
- 精华
- 0
- 沃币
- 3 枚
- 注册时间
- 2024-3-8
|
本帖最后由 zer0daysec 于 2024-9-6 09:52 编辑
大多数检测 macOS 沙箱及虚拟环境都基于使用 shell 命令,例如 sysctl 和 ioreg,但由于 Apple 软件许可政策,无法收集各种虚拟机管理程序的命令输出,因此,会尽可能地比较物理机和虚拟机的命令输出。
硬件型号检测方法
命令
如果在本机 Apple 硬件上运行,返回值包含硬件的型号名称
- $ sysctl -n hw.model
- MacMini8,1
复制代码
在虚拟化硬件上,该值可能包含虚拟管理程序名称
- $ sysctl -n hw.model
- VMware7,0
复制代码
MacRansom 恶意软件 (有兴趣的可分析此样本) 中就出现了这种技术,如果命令输出不包含 Mac 子字符串,则恶意软件认为它正在虚拟机中运行。
检测超线程是否开启
2018 年之前发布的大多数 Apple 硬件 (MacBook、Mac mini) 都启用了超线程,这就意味着物理核心的数量等于逻辑核心的一半,但是,某些虚拟机管理程序不提供更改逻辑核心数量的功能,逻辑核心数量始终等于物理核心数量。
命令:
- echo $((`sysctl -n hw.logicalcpu`/`sysctl -n hw.physicalcpu`))
复制代码
在物理硬件上,命令的输出值必须等于 2,这项检测方法也出现在 MacRansom 恶意软件中。
需要注意的一点,新硬件配备了禁用超线程功能,例如 6 核 Intel Core i7 CPU 的 Mac mini,因此,这种方法被认为是过时的。
内存大小检测
该方法与在 PC 上使用的内存大小检测方法类似,当运行多个虚拟机时,每个虚拟机会分配少量的 RAM,而 Apple 物理硬件通常具有超过 4GB RAM,命令
命令返回 RAM 的大小 (以字节为单位),例如 17179869184
I/O Kit 注册检测
以下有几种方式可通过 I/O Kit 注册来检测是否为 macOS 沙箱或虚拟机
检测 IOPlatformExpertDevice 注册类
命令
- ioreg -rd1 -c IOPlatformExpertDevice
复制代码
可以检测 IOPlatformExpertDevice 类的以下字段:
字段 | 真实机 | 虚拟机 | 如何检测 | IOPlatformSerialNumber | "C07T40BYG1J2" | "0" | 是否为 "0" | board-id | <"Mac-87C4F04823D6BACF"> | <"VirtualBox"> | 是否包含 "VirtualBox", "VMware" 等 | manufacturer | <"Apple Inc."> | <"innotek GmbH"> | 不包含 "Apple" |
检测 USB 设备供应商名称
命令
- ioreg -rd1 -c IOUSBHostDevice | grep "USB Vendor Name"
复制代码
真实机上输出
- $ ioreg -rd1 -c IOUSBHostDevice | grep "USB Vendor Name"
- "USB Vendor Name" = "Apple Inc."
- "USB Vendor Name" = "Apple Inc."
- "USB Vendor Name" = "Apple, Inc."
复制代码
在虚拟化设备上输出
- $ ioreg -rd1 -c IOUSBHostDevice | grep "USB Vendor Name"
- "USB Vendor Name" = "VirtualBox"
- "USB Vendor Name" = "VirtualBox"
复制代码
可通过检测命令输出中是否包含虚拟机管理程序名称来检测虚拟机,例如 VirtualBox、VMware 等。
ioreg -l 选项
另一种选择是调用 ioreg,使用 -l 选项使其显示所有对象的属性,应根据已知的虚拟管理程序名称检测输出
- ioreg -l | grep -i -c -e "virtualbox" -e "oracle" -e "vmware"
复制代码
上面的命令统计了不同虚拟机管理程序名称在 ioreg 输出,如果出现次数大于 0,则系统可能已虚拟化。
Boot ROM 版本检测
命令
- system_profiler SPHardwareDataType | grep "Boot ROM Version"
复制代码
如果是在真实机上运行,返回值包含相应 Apple 产品的字母代码,例如 "MM" 代表 Mac mini,"MBP" 代表 MacBook Pro,"MBA" 表示 MacBook Air
- $ system_profiler SPHardwareDataType | grep "Boot ROM Version"
- Boot ROM Version: MM71.0232.B00
复制代码
如果在虚拟机上运行,返回值可能包含虚拟机管理程序名称:
- $ system_profiler SPHardwareDataType | grep "Boot ROM Version"
- Boot ROM Version: VirtualBox
复制代码
该方法在 OceanLotus 恶意软件中实现,如下:
- system_profiler SPHardwareDataType 2>/dev/null | awk '/Boot ROM Version/ {split($0, line, ":");printf("%s", line[2]);}' 2>/dev/null
复制代码
检测系统完整性保护是否启用
最新版本的 macOS 具有系统完整性保护功能 (SIP)。如果沙箱使用未签名的内核扩展进行监控,则必须禁用 SIP 功能才能加载此类内核扩展,恶意软件可能会检查 SIP 是否已启用。
命令
该命令返回 SIP 状态,例如:"System Integrity Protection status: enabled. "
签名推荐
在检测到的规避技术的数量和误报率之间存在某种权衡,如果想检测尽可能多的使用规避技术的尝试,应该使用签名。如果使用以下命令行之一创建进程,则表明应用程序正在尝试使用规避技术:
- sysctl -n hw.model
- sysctl -n hw.logicalcpu
- sysctl -n hw.physicalcpu
- sysctl -n hw.memsize
- ioreg -rd1 -c IOPlatformExpertDevice
- ioreg -rd1 -c IOUSBHostDevice
- ioreg -l
- system_profiler SPHardwareDataType
- csrutil status
复制代码
然而,上述命令既可用于执行规避技术,也可用于系统信息收集。为了降低误报检测率,可以使用特定于恶意软件的签名,例如:
- echo $((`sysctl -n hw.logicalcpu`/`sysctl -n hw.physicalcpu`))
复制代码
|
|