DecoyMini 技术交流社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 164|回复: 0

[技术前沿] macOS 沙箱检测手段

[复制链接]

13

主题

2

回帖

2

荣誉

Rank: 1

UID
1625
积分
33
精华
0
沃币
3 枚
注册时间
2024-3-8
发表于 2024-9-6 09:53:54 | 显示全部楼层 |阅读模式
本帖最后由 zer0daysec 于 2024-9-6 09:52 编辑

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

硬件型号检测方法


命令

  1. sysctl -n hw.model
复制代码

如果在本机 Apple 硬件上运行,返回值包含硬件的型号名称

  1. $ sysctl -n hw.model
  2. MacMini8,1
复制代码

在虚拟化硬件上,该值可能包含虚拟管理程序名称

  1. $ sysctl -n hw.model
  2. VMware7,0
复制代码

MacRansom 恶意软件 (有兴趣的可分析此样本) 中就出现了这种技术,如果命令输出不包含 Mac 子字符串,则恶意软件认为它正在虚拟机中运行。

检测超线程是否开启


2018 年之前发布的大多数 Apple 硬件 (MacBook、Mac mini) 都启用了超线程,这就意味着物理核心的数量等于逻辑核心的一半,但是,某些虚拟机管理程序不提供更改逻辑核心数量的功能,逻辑核心数量始终等于物理核心数量。

命令:

  1. echo $((`sysctl -n hw.logicalcpu`/`sysctl -n hw.physicalcpu`))
复制代码

在物理硬件上,命令的输出值必须等于 2,这项检测方法也出现在 MacRansom 恶意软件中。

需要注意的一点,新硬件配备了禁用超线程功能,例如 6 核 Intel Core i7 CPU 的 Mac mini,因此,这种方法被认为是过时的。

内存大小检测


该方法与在 PC 上使用的内存大小检测方法类似,当运行多个虚拟机时,每个虚拟机会分配少量的 RAM,而 Apple 物理硬件通常具有超过 4GB RAM,命令

  1. sysctl -n hw.memsize
复制代码

命令返回 RAM 的大小 (以字节为单位),例如 17179869184

I/O Kit 注册检测


以下有几种方式可通过 I/O Kit 注册来检测是否为 macOS 沙箱或虚拟机

检测 IOPlatformExpertDevice 注册类

命令

  1. ioreg -rd1 -c IOPlatformExpertDevice
复制代码

可以检测 IOPlatformExpertDevice 类的以下字段:

字段真实机虚拟机如何检测
IOPlatformSerialNumber"C07T40BYG1J2""0"是否为 "0"
board-id<"Mac-87C4F04823D6BACF"><"VirtualBox">是否包含 "VirtualBox", "VMware" 等
manufacturer<"Apple Inc."><"innotek GmbH">不包含 "Apple"

检测 USB 设备供应商名称

命令

  1. ioreg -rd1 -c IOUSBHostDevice | grep "USB Vendor Name"
复制代码

真实机上输出

  1. $ ioreg -rd1 -c IOUSBHostDevice | grep "USB Vendor Name"
  2.     "USB Vendor Name" = "Apple Inc."
  3.     "USB Vendor Name" = "Apple Inc."
  4.     "USB Vendor Name" = "Apple, Inc."
复制代码

在虚拟化设备上输出

  1. $ ioreg -rd1 -c IOUSBHostDevice | grep "USB Vendor Name"
  2.     "USB Vendor Name" = "VirtualBox"
  3.     "USB Vendor Name" = "VirtualBox"
复制代码

可通过检测命令输出中是否包含虚拟机管理程序名称来检测虚拟机,例如 VirtualBox、VMware 等。

ioreg -l 选项

另一种选择是调用 ioreg,使用 -l 选项使其显示所有对象的属性,应根据已知的虚拟管理程序名称检测输出

  1. ioreg -l | grep -i -c -e "virtualbox" -e "oracle" -e "vmware"
复制代码

上面的命令统计了不同虚拟机管理程序名称在 ioreg 输出,如果出现次数大于 0,则系统可能已虚拟化。

Boot ROM 版本检测


命令

  1. system_profiler SPHardwareDataType | grep "Boot ROM Version"
复制代码

如果是在真实机上运行,返回值包含相应 Apple 产品的字母代码,例如 "MM" 代表 Mac mini,"MBP" 代表 MacBook Pro,"MBA" 表示 MacBook Air

  1. $ system_profiler SPHardwareDataType | grep "Boot ROM Version"
  2.         Boot ROM Version: MM71.0232.B00
复制代码

如果在虚拟机上运行,​​返回值可能包含虚拟机管理程序名称:

  1. $ system_profiler SPHardwareDataType | grep "Boot ROM Version"
  2.         Boot ROM Version: VirtualBox
复制代码

该方法在 OceanLotus 恶意软件中实现,如下:

  1. system_profiler SPHardwareDataType 2>/dev/null | awk '/Boot ROM Version/ {split($0, line, ":");printf("%s", line[2]);}' 2>/dev/null
复制代码

检测系统完整性保护是否启用


最新版本的 macOS 具有系统完整性保护功能 (SIP)。如果沙箱使用未签名的内核扩展进行监控,则必须禁用 SIP 功能才能加载此类内核扩展,恶意软件可能会检查 SIP 是否已启用

命令

  1. csrutil status
复制代码

该命令返回 SIP 状态,例如:"System Integrity Protection status: enabled. "

签名推荐


在检测到的规避技术的数量和误报率之间存在某种权衡,如果想检测尽可能多的使用规避技术的尝试,应该使用签名。如果使用以下命令行之一创建进程,则表明应用程序正在尝试使用规避技术:

  1. sysctl -n hw.model
  2. sysctl -n hw.logicalcpu
  3. sysctl -n hw.physicalcpu
  4. sysctl -n hw.memsize
  5. ioreg -rd1 -c IOPlatformExpertDevice
  6. ioreg -rd1 -c IOUSBHostDevice
  7. ioreg -l
  8. system_profiler SPHardwareDataType
  9. csrutil status
复制代码

然而,上述命令既可用于执行规避技术,也可用于系统信息收集。为了降低误报检测率,可以使用特定于恶意软件的签名,例如:

  1. echo $((`sysctl -n hw.logicalcpu`/`sysctl -n hw.physicalcpu`))
复制代码

Hi, guys, This is My Blog -> https://ma1waresearch.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|DecoyMini 技术交流社区 ( 京ICP备2021005070号 )

GMT+8, 2024-9-17 03:29 , Processed in 0.057265 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表