飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2225|回复: 0

[病毒分析] [翻译]规避技术:macOS

[复制链接]
  • TA的每日心情
    开心
    2019-3-15 11:00
  • 签到天数: 262 天

    [LV.8]以坛为家I

    发表于 2021-6-8 10:49:50 | 显示全部楼层 |阅读模式
    本帖最后由 梦幻的彼岸 于 2021-6-8 10:54 编辑

    备注
    原文地址:https://evasions.checkpoint.com/techniques/macos.html
    原文标题:Evasions: macOS
    更新日期:2021年6月8日
    此文后期:根据自身所学进行内容扩充
    因自身技术有限,只能尽自身所能翻译国外技术文章,供大家学习,若有不当或可完善的地方,希望可以指出,用于共同完善这篇文章。

    目录
    • macOS沙盒检测方法
    • 1. 硬件模型检测方法
    • 2. 检查是否启用了超线程
    • 3. 内存大小检测方法
    • 4. I/O套件注册表检测方法
    • 5. Boot ROM版本检测方法
    • 6. 检查是否启用了系统完整性保护
    • 识别标志
    • 反制措施


    macOS沙盒检测方法
    大多数针对macOS的沙盒和虚拟环境检测方法都是基于使用 "sysctl "和 "ioreg "等外壳命令。我们没有提供代码样本块,而是展示了命令和它们的参数。不幸的是,由于Apple的软件许可政策,我们无法收集各种管理程序的命令输出。因此,我们尽可能比较物理机和虚拟机的命令输出。

    1. 硬件模型检测方法
    所使用的命令:
    [C++] 纯文本查看 复制代码
    sysctl -n hw.model

    如果在本地Apple硬件上运行,返回值包含硬件的型号名称:
    [C++] 纯文本查看 复制代码
    $ sysctl -n hw.model
    Macmini8,1

    在虚拟化的硬件上,该值可能包含管理程序的名称:
    [C++] 纯文本查看 复制代码
    $ sysctl -n hw.model
    VMware7,0

    这种技术在MacRansom恶意软件中出现过。如果命令输出不包含 "Mac "子串,恶意软件认为它是在虚拟机中运行。

    2. 检查是否启用了超线程
    2018年之前发布的大多数Apple硬件(MacBook、Mac mini)都启用了超线程。这意味着物理核心的数量等于逻辑核心的一半。然而,一些管理程序不提供改变逻辑核心数量的能力,逻辑核心数量总是等于物理核心数量。
    所使用的命令:
    [C++] 纯文本查看 复制代码
    echo $((`sysctl -n hw.logicalcpu`/`sysctl -n hw.physicalcpu`))

    在物理硬件上,该命令的输出值必须等于 "2"。这一技术在MacRansom恶意软件中出现过。

    我们应该注意到,新硬件的超线程功能被禁用,例如,配备6核英特尔酷睿i7处理器的Mac mini。因此,这种方法应该被认为是过时的。

    3. 内存大小检测方法
    这种方法类似于用于PC的内存大小检测方法。当运行几个虚拟机时,每个虚拟机被分配少量的内存,而Apple物理硬件通常有超过4Gb的内存。
    所使用的命令:
    [Bash shell] 纯文本查看 复制代码
    sysctl -n hw.memsize

    该命令以字节为单位返回RAM的大小,例如:17179869184。

    4. I/O套件注册表检测方法
    有几种方法可以使用I/O工具包注册表来检测虚拟机。
    检查 "IOPlatformExpertDevice "注册表类
    所使用的命令:
    [Bash shell] 纯文本查看 复制代码
    ioreg -rd1 -c IOPlatformExpertDevice

    IOPlatformExpertDevice类的以下字段可以被检查,以检测一个虚拟机:
    Field
    Physical hardware example value
    Virtual machine example value
    VM detection rule
    IOPlatformSerialNumber
    "C07T40BYG1J2"
    "0"
    Equal to "0"
    board-id
    <"Mac-87C4F04823D6BACF">
    <"VirtualBox">
    Contains "VirtualBox", "VMware", etc.
    manufacturer
    <"Apple Inc.">
    <"innotek GmbH">
    Doesn't contain "Apple"

    检查USB设备的供应商名称:
    所使用的命令:
    [Bash shell] 纯文本查看 复制代码
    ioreg -rd1 -c IOUSBHostDevice | grep "USB Vendor Name"

    在原生的Apple硬件上的输出样本:
    [C++] 纯文本查看 复制代码
    $ ioreg -rd1 -c IOUSBHostDevice | grep "USB Vendor Name"
        "USB Vendor Name" = "Apple Inc."
        "USB Vendor Name" = "Apple Inc."
        "USB Vendor Name" = "Apple, Inc."

    在虚拟化的硬件上,该值可能包含管理程序的名称:
    [C++] 纯文本查看 复制代码
    $ ioreg -rd1 -c IOUSBHostDevice | grep "USB Vendor Name"
        "USB Vendor Name" = "VirtualBox"
        "USB Vendor Name" = "VirtualBox"

    通过检查命令输出是否包含管理程序名称,例如 "VirtualBox"、"VMware "等,可以检测到一个虚拟机。
    另一个选择是用"-l "选项调用ioreg命令,使其显示所有对象的属性。输出应与已知的hypervisor名称进行核对,例如:
    [C++] 纯文本查看 复制代码
    ioreg -l | grep -i -c -e "virtualbox" -e "oracle" -e "vmware"

    上面的命令计算了ioreg输出中各种管理程序名称的出现次数。如果出现的次数大于0,则系统很可能是虚拟化的。

    5. Boot ROM版本检测方法
    所使用的命令:
    [Bash shell] 纯文本查看 复制代码
    system_profiler SPHardwareDataType | grep "Boot ROM Version"

    如果在原生Apple硬件上运行,返回值包含相应Apple产品的字母代码,例如,"MM "代表Mac mini,"MBP "代表MacBook Pro,"MBA "代表MacBook Air:
    [C++] 纯文本查看 复制代码
    $ system_profiler SPHardwareDataType | grep "Boot ROM Version"
            Boot ROM Version: MM71.0232.B00

    如果在虚拟机上运行,返回值可能包含管理程序名称:
    [C++] 纯文本查看 复制代码
    $ system_profiler SPHardwareDataType | grep "Boot ROM Version"
            Boot ROM Version: VirtualBox

    这种方法在OceanLotus恶意软件中实现,如下所示:
    [Bash shell] 纯文本查看 复制代码
    system_profiler SPHardwareDataType 2>/dev/null | awk '/Boot ROM Version/ {split($0, line, ":");printf("%s", line[2]);}' 2>/dev/null


    6. 检查是否启用了系统完整性保护
    最新版本的macOS有系统完整性保护功能(SIP)。如果一个沙盒使用非签名的内核扩展来进行监控,那么必须禁用SIP功能来加载这种内核扩展。恶意软件可能会检查SIP是否被启用。
    所使用的命令:
    [Bash shell] 纯文本查看 复制代码
    csrutil status

    该命令返回SIP状态,例如。“System Integrity Protection status: enabled.”  #系统完整性保护状态:启用

    识别标志
    在检测到的规避技术的数量和假阳性率之间存在着一种权衡。如果我们想尽可能多地检测到使用规避技术的企图,我们应该使用范围广泛的签名。如果一个进程是用以下命令行之一创建的,这表明一个应用程序正试图使用一种规避技术:
    [Bash shell] 纯文本查看 复制代码
    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

    然而,上述命令既可用于执行规避技术,也可用于收集系统信息。为了减少假阳性检测率,可以使用特定的恶意软件签名,例如:
    [Bash shell] 纯文本查看 复制代码
    echo $((`sysctl -n hw.logicalcpu`/`sysctl -n hw.physicalcpu`))

    Apple的软件许可政策不允许在Apple原厂硬件以外的硬件上模拟macOS。它也不允许在一台主机上运行两个以上的虚拟机。因此,我们建议使用DeepFreeze等解决方案,而不是虚拟化。此外,应该使用签名的内核扩展。
    反制措施
    Apple的软件许可政策不允许在Apple原厂硬件以外的硬件上模拟macOS。它也不允许在一台主机上运行两个以上的虚拟机。因此,我们建议使用DeepFreeze等解决方案,而不是虚拟化。此外,应该使用签名的内核扩展。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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