攻击者如何适应macOS内置防护机制
macOS安全机制概述
让我们从概述macOS中的安全机制开始,并简要描述每个机制:
- Keychain - 默认密码管理器
- TCC - 应用程序访问控制
- SIP - 确保目录和进程中信息的完整性,防止攻击
- 文件隔离 - 防止运行从互联网下载的可疑文件
- Gatekeeper - 确保只允许运行受信任的应用程序
- XProtect - macOS中基于签名的反恶意软件保护
- XProtect修复工具 - 自动响应XProtect检测到的威胁的工具
Keychain
早在1999年推出的macOS密码管理器仍然是Apple安全框架中的关键组件。它提供集中安全的各类机密存储:从证书和加密密钥到密码和凭据。默认情况下,所有用户账户和密码都存储在Keychain中。数据访问受主密码保护。
Keychain文件位于目录 ~/Library/Keychains/、/Library/Keychains/ 和 /Network/Library/Keychains/ 中。除了主密码外,每个文件都可以用自己的密钥保护。默认情况下,只有相应Keychain副本的所有者和管理员才能访问这些文件。此外,文件使用可靠的AES-256-GCM算法加密。这保证了即使有人物理访问系统,也能提供高级别的保护。
然而,对macOS密码管理器的攻击仍然存在。有专门的工具,如Chainbreaker,旨在从Keychain文件中提取数据。如果能够访问文件本身及其密码,Chainbreaker允许攻击者进行本地分析和完全数据解密,而无需绑定到受害者的设备。更重要的是,如果系统已被入侵,原生macOS工具(如Keychain Access GUI应用程序或/usr/bin/security命令行实用程序)可能被用于恶意目的。
因此,虽然Keychain架构提供了强大的保护,但控制本地访问、保护主密码并最小化系统外数据泄漏的风险仍然至关重要。以下是Chainbreaker命令的示例:
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)中已经实现并配置了使用此机制收集必要事件。
检测规则示例(Sigma):
title: Keychain access
description: This rule detects dumping of keychain
tags:- attack.credential-access- attack.t1555.001
logsource:category: process_creationproduct: macos
detection:selection:cmdline: securitycmdline: -list-keychains-dump-keychaincondition: selection
falsepositives:- Unknow
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):
title: SIP status discovery
description: This rule detects SIP status discovery
tags:- attack.discovery- attack.t1518.001
logsource:category: process_creationproduct: macos
detection:selection:cmdline: csrutil statuscondition: selection
falsepositives:- Unknow
level: low
TCC
macOS包括透明度、同意和控制(TCC)框架,通过要求应用程序明确用户同意访问敏感数据和系统功能来确保应用程序的透明度。TCC基于SQLite数据库(TCC.db)构建,位于共享目录(/Library/Application Support/com.apple.TCC/TCC.db)和单个用户目录(/Users/
这些数据库的完整性和防止未经授权的访问是通过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 <文件名>
命令手动删除属性。
如果成功删除隔离属性,运行文件时将不会显示警告,这在社会工程攻击或攻击者更喜欢在用户不知情的情况下执行恶意软件的情况下很有用。
要检测此活动,需要监控与-d
和com.apple.quarantine
结合的xattr
命令的执行,这意味着删除隔离属性。在与macOS入侵相关的事件中,还值得调查文件的来源:如果它在没有隔离标记的情况下进入主机,这是一个额外的风险因素。
检测规则示例(Sigma):
title: Quarantine attribute removal
description: This rule detects removal of the Quarantine attribute, that leads to avoid File Quarantine
tags:- attack.defense-evasion- attack.t1553.001
logsource:category: process_creationproduct: macos
detection:selection:cmdline: xattr -d com.apple.quarantinecondition: selection
falsepositives:- Unknow
level: high
Gatekeeper
Gatekeeper是macOS安全系统的关键部分,旨在保护用户免受运行潜在危险应用程序的影响。首次在OS X Leopard(2012)中引入,Gatekeeper检查应用程序的数字签名,如果存在隔离属性(com.apple.quarantine),则限制运行未签名和未经用户批准的程序,从而降低恶意代码执行的风险。
spctl实用程序用于管理Gatekeeper。以下是调用spctl检查签名有效性以及是否经过Apple验证的示例:
spctl -a -t exec -vvvv <文件路径>
Gatekeeper要求应用程序:
- 要么使用有效的Apple开发者证书签名,
- 要么在源代码验证后经过Apple认证。
如果应用程序未能满足这些要求,Gatekeeper默认情况下会阻止双击运行它的尝试。解除阻止是可能的,但这需要用户浏览设置。因此,要进行成功的攻击,威胁行为者不仅必须说服受害者将应用程序标记为受信任,还要向他们解释如何操作。运行软件的复杂过程本身看起来就很可疑。但是,如果从上下文菜单(右键单击→打开)启动,用户会看到一个弹出窗口,允许他们通过确认使用应用程序的意图来单次点击绕过阻止。这个特点被用于社会工程攻击:恶意软件可能附带说明,提示用户从上下文菜单运行文件。
让我们看一下从上下文菜单而不是双击运行程序的方法。如果我们双击带有隔离属性的程序图标,我们会得到以下窗口。
如果我们从上下文菜单(右键单击→打开)运行程序,我们会看到以下内容。
具有本地访问权限和管理员权限的攻击者可以使用spctl --master-disable
或--global-disable
命令禁用Gatekeeper。
要检测此活动,需要监控带有参数--master-disable
或--global-disable
的spctl
命令的执行,这会禁用Gatekeeper。
检测规则示例(Sigma):
title: Gatekeeper disable
description: This rule detects disabling of Gatekeeper
tags:- attack.defense-evasion- attack.t1562.001
logsource:category: process_creationproduct: macos
detection:selection:cmdline: spctl cmdline: - '--master-disable'- '--global-disable'condition: selection
要点
内置的macOS保护机制具有高度弹性并提供出色的安全性。也就是说,与任何成熟的操作系统一样,攻击者继续适应并搜索绕过即使是最可靠的保护屏障的方法。在某些情况下,当标准机制被绕过时,可能难以实施额外的安全措施并阻止攻击。因此,为了全面保护免受网络威胁,请使用第三方供应商的高级解决方案。我们的卡巴斯基EDR Expert和卡巴斯基端点安全检测并阻止本文中描述的所有威胁。此外,为防止绕过标准安全措施,请使用我们提供的Sigma规则。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
公众号二维码
公众号二维码