zer0daysec 发表于 2024-9-6 09:53:54

macOS 沙箱检测手段

本帖最后由 zer0daysec 于 2024-9-6 09:52 编辑

大多数检测 macOS 沙箱及虚拟环境都基于使用 shell 命令,例如 sysctl 和 ioreg,但由于 Apple 软件许可政策,无法收集各种虚拟机管理程序的命令输出,因此,会尽可能地比较物理机和虚拟机的命令输出。

硬件型号检测方法
命令

sysctl -n hw.model
如果在本机 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,命令

sysctl -n hw.memsize
命令返回 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>/dev/null
检测系统完整性保护是否启用
最新版本的 macOS 具有系统完整性保护功能 (SIP)。如果沙箱使用未签名的内核扩展进行监控,则必须禁用 SIP 功能才能加载此类内核扩展,恶意软件可能会检查 SIP 是否已启用。

命令

csrutil status
该命令返回 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`))
页: [1]
查看完整版本: macOS 沙箱检测手段