攻击者如何适应macOS内置防护机制
macOS安全机制概述
如果一个系统受用户欢迎,那么它同样也会受到网络犯罪分子的青睐。尽管Windows仍然占据主导地位,但第二名属于macOS,这使其成为攻击者的可行目标。
macOS通过各种内置保护机制,通常为最终用户提供了相当全面的端到端安全性。本文将通过常见攻击向量示例,探讨其中一些机制的工作原理,以及检测和阻止它们的方法。
让我们从概述macOS中的安全机制集开始,并简要描述每个机制:
- Keychain – 默认密码管理器
- TCC – 应用程序访问控制
- SIP – 确保目录和进程中信息的完整性,防止攻击
- File Quarantine – 防止运行从互联网下载的可疑文件
- Gatekeeper – 确保只允许运行受信任的应用程序
- XProtect – macOS中基于签名的反恶意软件保护
- XProtect Remediator – 用于自动响应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命令的示例:
|
|
如上所述,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-keychain
和security list-keychains
命令的事件,因为此类活动对于普通macOS用户来说并不常见。以下是EDR触发Keychain转储事件的示例,以及检测规则的示例。
Sigma规则示例:
|
|
SIP
系统完整性保护(SIP)是macOS最重要的安全机制之一,旨在防止对关键系统文件和进程的未经授权干扰,即使是具有管理员权限的用户也不例外。SIP首次在OS X 10.11 El Capitan中引入,通过限制修改系统组件的能力,标志着在加强安全性方面迈出了重要一步,防止潜在恶意影响。
该机制通过分配特殊属性来保护文件和目录,这些属性阻止除受信任的系统进程(用户和第三方软件无法访问)之外的所有人修改内容。特别是,这使得难以将恶意组件注入这些文件。默认情况下,以下目录受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规则示例:
|
|
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全面安全的重要任务。
File Quarantine
文件隔离是macOS内置的安全功能,首次在OS X 10.5 Tiger中引入。它在处理从外部源下载的文件时提高了系统安全性。该机制类似于Windows中的Mark-of-the-Web功能,旨在运行下载的文件之前警告用户潜在危险。
通过浏览器或其他与文件隔离集成的应用程序下载的文件会被分配一个特殊属性(com.apple.quarantine
)。首次运行此类文件时,如果它具有有效签名且未引起Gatekeeper的任何怀疑(见下文),则会提示用户确认操作。这有助于防止意外运行恶意软件。
要获取有关com.apple.quarantine
属性的详细信息,请使用xattr -p com.apple.quarantine <文件名>
命令。以下屏幕截图显示了此命令输出的示例:
0083
– 用于进一步Gatekeeper操作的标志689cb865
– 十六进制格式的时间戳(Mac绝对时间)Safari
– 用于下载文件的浏览器66EA7FA5-1F9E-4779-A5B5-9CCA2A4A98F5
– 附加到此文件的UUID。这是为了数据库记录文件
此命令返回的信息存储在位于~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2
的数据库中,可以在其中进行审核。
为了避免其文件被隔离,攻击者使用各种技术来绕过文件隔离。例如,通过curl
、wget
或其他未与文件隔离集成的低级工具下载的文件不会被标记隔离属性。
也可以使用xattr -d com.apple.quarantine <文件名>
命令手动删除该属性。
如果成功删除了隔离属性,则在运行文件时不会显示警告,这在社会工程攻击或攻击者倾向于在用户不知情的情况下执行恶意软件的情况下非常有用。
要检测此活动,需要监控与-d
和com.apple.quarantine
结合的xattr
命令的执行,这意味着删除了隔离属性。在与macOS泄露相关的事件中,还值得调查文件的来源:如果文件在没有被隔离标记的情况下进入主机,则这是一个额外的风险因素。以下是EDR触发隔离属性删除事件的示例,以及用于检测此类事件的规则示例。
Sigma规则示例:
|
|
Gatekeeper
Gatekeeper是macOS安全系统的关键部分,旨在保护用户免受运行潜在危险应用程序的侵害。Gatekeeper首次在OS X Leopard(2012年)中引入,它检查应用程序的数字签名,如果存在隔离属性(com.apple.quarantine
),则限制运行未经签名和用户未经批准的程序,从而降低恶意代码执行的风险。
spctl
实用程序用于管理Gatekeeper。以下是调用spctl
检查签名有效性以及是否经过Apple验证的示例:
|
|
Gatekeeper要求应用程序:
- 要么使用有效的Apple开发者证书签名,
- 要么在源代码验证后经过Apple认证。
如果应用程序未能满足这些要求,Gatekeeper默认会阻止双击运行它的尝试。解除阻止是可能的,但这需要用户浏览设置。因此,为了成功进行攻击,威胁行为者不仅必须说服受害者将应用程序标记为受信任,还要向他们解释如何操作。运行软件的复杂过程本身看起来就很可疑。但是,如果从上下文菜单(右键单击→打开)启动,用户会看到一个弹出窗口,允许他们通过确认使用应用程序的意图来一键绕过阻止。这个特性被用于社会工程攻击:恶意软件可能附带说明,提示用户从上下文菜单运行文件。
让我们看一下从上下文菜单运行程序的方法,而不是双击。如果我们双击带有隔离属性的程序的图标,我们会得到以下窗口。
如果我们从上下文菜单(右键单击→打开)运行程序,我们会看到以下内容。
具有本地访问权限和管理员权限的攻击者可以使用spctl --master-disable
或--global-disable
命令禁用Gatekeeper。
要检测此活动,需要监控带有参数--master-disable
或--global-disable
的spctl
命令的执行,这些参数会禁用Gatekeeper。以下是EDR触发Gatekeeper禁用事件的示例,以及检测规则的示例。
Sigma规则示例:
|
|
总结
内置的macOS保护机制具有高度的弹性并提供出色的安全性。也就是说,与任何成熟的操作系统一样,攻击者不断适应并寻找方法来绕过即使是最可靠的保护屏障。在某些情况下,当标准机制被绕过时,可能难以实施额外的安全措施并阻止攻击。因此,为了全面防范网络威胁,请使用第三方供应商的高级解决方案。我们的卡巴斯基EDR Expert和卡巴斯基端点安全可以检测并阻止本文中描述的所有威胁。此外,为防止绕过标准安全措施,请使用我们提供的Sigma规则。