攻击者如何绕过macOS内置防护机制

本文深入解析macOS五大核心安全机制(Keychain密码管理、SIP系统完整性保护、TCC权限控制、文件隔离机制和Gatekeeper应用验证)的工作原理,通过具体攻击案例展示攻击者如何利用系统工具和社会工程学手段绕过防护,并提供基于Sigma规则的检测方案。

概述macOS安全机制

如果一个系统受用户欢迎,那么它同样也会受到网络犯罪分子的青睐。尽管Windows仍占据主导地位,但macOS已稳居第二,这使其成为攻击者的可行目标。

macOS通过各种内置防护机制,通常能为终端用户提供端到端的安全保障。本文将通过常见攻击向量案例,探讨部分机制的工作原理及检测防御方法。

Keychain密码管理器

自1999年推出以来,macOS的密码管理器始终是苹果安全框架的核心组件。它提供各类机密信息的集中安全存储:从证书、加密密钥到密码和凭据。所有用户账户和密码默认存储在Keychain中,数据访问受主密码保护。

Keychain文件位于目录~/Library/Keychains//Library/Keychains//Network/Library/Keychains/中。除主密码外,每个文件还可使用独立密钥保护。默认情况下,仅Keychain副本所有者和管理员有权访问这些文件。此外,文件采用可靠的AES-256-GCM算法加密,即使攻击者物理接触设备也能保证高安全级别。

然而针对macOS密码管理器的攻击仍时有发生。存在专门工具(如Chainbreaker)可从Keychain文件提取数据。若攻击者获得文件本身及其密码,Chainbreaker允许在本地进行分析并完全解密数据,无需接触受害者设备。更甚者,若系统已被入侵,原生macOS工具(如Keychain Access图形应用或/usr/bin/security命令行工具)也可被恶意利用。

以下为Chainbreaker命令示例:

1
python -m chainbreaker -pa test_keychain.keychain -o output

如前所述,security工具可用于命令行管理,具体命令包括:

  • security list-keychains:显示所有可用Keychain文件
  • security dump-keychain -a -d:导出所有Keychain文件
  • security dump-keychain ~/Library/Keychains/login.keychain-db:导出特定Keychain文件(示例为用户文件)

检测此类攻击需配置进程启动事件日志记录。最佳方案是使用macOS内置日志工具ESF,该工具可收集必要事件以构建检测逻辑。卡巴斯基终端检测与响应(KEDR)已实现并配置该机制的所需事件收集。

检测此类活动需关注包含security dump-keychainsecurity list-keychains命令的事件,因此类活动对普通macOS用户并不常见。以下是EDR触发Keychain导出事件的示例及检测规则示例。

Sigma检测规则:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
title: Keychain访问
description: 检测Keychain导出行为
tags:
    - attack.credential-access
    - attack.t1555.001
logsource:
    category: process_creation
    product: macos
detection:
    selection:
        cmdline: security
        cmdline: 
            -list-keychains
            -dump-keychain
    condition: selection
falsepositives:
    - 未知
level: medium

SIP系统完整性保护

系统完整性保护(SIP)是macOS最重要的安全机制之一,旨在防止对关键系统文件和进程的未授权干预,即使管理员权限用户也不例外。该机制首次出现于OS X 10.11 El Capitan,通过限制修改系统组件的能力显著提升了安全性。

SIP通过分配特殊属性保护文件和目录,禁止除可信系统进程外的所有用户修改内容,尤其增加了向这些文件注入恶意组件的难度。默认受SIP保护的目录包括:

  • /System
  • /sbin
  • /bin
  • /usr(除/usr/local外)
  • /Applications(预装应用)
  • /Library/Application Support/com.apple.TCC

完整受保护目录列表见配置文件/System/Library/Sandbox/rootless.conf。虽然主要是系统文件和预装应用,但SIP允许添加额外路径。

SIP为系统组件提供高等级保护,但若攻击者获得物理访问权限或管理员账户被入侵,SIP可被禁用——需重启系统至恢复模式,然后在终端运行csrutil disable命令。检查SIP状态可使用csrutil status命令。

检测此活动需监控csrutil status命令。攻击者常检查SIP状态以寻找可用选项。由于他们在恢复模式部署csrutil disable时监控方案尚未加载,该命令不会被记录,因此追踪其执行无意义。替代方案是设置SIP状态监控,若状态变化则发送安全警报。

Sigma检测规则:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
title: SIP状态探测
description: 检测SIP状态探测行为
tags:
    - attack.discovery
    - attack.t1518.001
logsource:
    category: process_creation
    product: macos
detection:
    selection:
        cmdline: csrutil status
    condition: selection
falsepositives:
    - 未知
level: low

TCC透明度、同意与控制

macOS包含TCC框架,通过要求应用显式获得用户同意来确保敏感数据和系统功能访问的透明度。TCC基于SQLite数据库(TCC.db)构建,这些数据库既存在于共享目录(/Library/Application Support/com.apple.TCC/TCC.db),也存在于各用户目录(/Users/<username>/Library/Application Support/com.apple.TCC/TCC.db)。

这些数据库的完整性和防未授权访问通过SIP实现,使得直接修改成为不可能。攻击者要干扰这些数据库,必须禁用SIP或获得可信系统进程的访问权。这使TCC具有高度抗干扰性。

TCC工作流程如下:当应用首次访问敏感功能(摄像头、麦克风、地理位置、全磁盘访问、输入控制等)时,会弹出交互窗口请求用户确认。这使得用户能够控制权限授予。

潜在绕过机制是TCC点击劫持——该技术在权限请求窗口上方叠加视觉篡改窗口,隐藏请求的真实性质。用户在不疑有诈的情况下点击按钮,从而向恶意软件授予权限。虽然该技术未直接利用TCC漏洞,但使攻击者能访问敏感系统功能。

攻击者关注获取全磁盘访问或辅助功能权限,因这些权限授予系统几乎无限制的访问权。因此,监控TCC.db变更和管理敏感权限仍是确保macOS全面安全的关键任务。

文件隔离

文件隔离是macOS内置安全功能,首次推出于OS X 10.5 Tiger。它提升了系统处理从外部来源下载文件时的安全性。该机制类似于Windows的Mark-of-the-Web功能,旨在运行下载文件前向用户提示潜在危险。

通过浏览器或其他与文件隔离集成的应用下载的文件会被分配特殊属性(com.apple.quarantine)。首次运行此类文件时,若其具有有效签名且未引发Gatekeeper怀疑(见下文),系统会要求用户确认操作。这有助于防止意外运行恶意软件。

要获取com.apple.quarantine属性的详细信息,可使用命令xattr -p com.apple.quarantine <文件名>。该命令返回的信息存储在数据库~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2中,可供审计。

为避免文件被隔离,攻击者使用多种技术绕过文件隔离。例如,通过curl、wget等未与文件隔离集成的底层工具下载的文件不会被标记隔离属性。也可使用命令xattr -d com.apple.quarantine <文件名>手动移除属性。

若成功移除隔离属性,运行文件时将不显示警告,这在社会工程学攻击或攻击者希望无声无息执行恶意软件时非常有用。

检测此活动需监控结合使用xattr命令与-dcom.apple.quarantine参数的行为,这暗示隔离属性被移除。在macOS入侵事件中,还值得调查文件来源:若文件进入主机时未标记隔离属性,此为额外风险因素。

Sigma检测规则:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
title: 隔离属性移除
description: 检测隔离属性移除行为,该行为导致绕过文件隔离
tags:
    - attack.defense-evasion
    - attack.t1553.001
logsource:
    category: process_creation
    product: macos
detection:
    selection:
        cmdline: xattr -d com.apple.quarantine
    condition: selection
falsepositives:
    - 未知
level: high

Gatekeeper

Gatekeeper是macOS安全系统的关键部分,旨在保护用户免于运行潜在危险应用。该功能首次出现于OS X Leopard(2012年),会检查应用的数字签名,若存在隔离属性(com.apple.quarantine)则限制运行未签名和未经用户批准的程序,从而降低恶意代码执行风险。

管理Gatekeeper使用spctl工具。以下是调用spctl检查签名有效性及是否通过苹果验证的示例:

1
spctl -a -t exec -vvvv <文件路径>

Gatekeeper要求应用满足以下条件之一:

  • 使用有效的苹果开发者证书签名
  • 经苹果源码验证后认证

若应用不符合这些要求,Gatekeeper默认阻止双击运行。解阻可行,但需要用户导航至设置中操作。因此,为成功实施攻击,威胁行为者不仅需说服受害者标记应用为可信,还需解释具体操作步骤。复杂的软件运行流程本身显得可疑。然而,若通过上下文菜单(右键→打开)启动,用户会看到弹出窗口,可通过一次点击确认使用应用的意图。此特性被用于社会工程学攻击:恶意软件可能附带指示,诱使用户从上下文菜单运行文件。

具有本地访问权和管理员权限的攻击者可使用命令spctl --master-disable--global-disable禁用Gatekeeper。

检测此活动需监控带参数--master-disable--global-disable的spctl命令执行,这些参数会禁用Gatekeeper。

Sigma检测规则:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
title: Gatekeeper禁用
description: 检测Gatekeeper禁用行为
tags:
    - attack.defense-evasion
    - attack.t1562.001
logsource:
    category: process_creation
    product: macos
detection:
    selection:
        cmdline: spctl 
        cmdline: 
            - '--master-disable'
            - '--global-disable'
    condition: selection

总结

macOS内置防护机制具有高度韧性,提供卓越的安全性。尽管如此,与任何成熟操作系统一样,攻击者持续适应并寻找方法绕过即使最可靠的防护屏障。在某些标准机制被绕过的场景下,实施额外安全措施和阻止攻击可能较为困难。因此,为全面防护网络威胁,建议采用第三方厂商的高级解决方案。我们的卡巴斯基EDR Expert和卡巴斯基终端安全能够检测并阻止本文描述的所有威胁。此外,为防范标准安全措施被绕过,可使用我们提供的Sigma规则。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计