完整的磁盘访问
要理解苹果实现TCC的问题,重要的是要理解TCC特权存在于两个级别:用户级和系统级。在用户级别,单个用户可以允许某些权限,这些权限仅设计为应用于他们自己的帐户,而不是其他帐户。如果Alice允许终端访问她的桌面或下载文件夹,那就不关Bob的事了。当Bob登录时,Terminal将不能访问Bob的Desktop或Downloads文件夹。
至少,它应该是这样工作的,但是如果 Alice 是管理员用户并授予终端全磁盘访问权限 (FDA),那么 Alice 就可以很迅速地导航到 Bob 的桌面和下载文件夹,而不管 Bob 的 TCC 设置如何。请注意,如果 Bob 也是管理员用户,则他不会受到任何特殊保护。全磁盘访问意味着它可以由一个具有管理员权限的用户设置,并授予对系统范围内所有用户数据的访问权限。
虽然这对系统管理员来说似乎是个好消息,但其中的影响可能并不明显,这些影响会影响管理员自己的数据安全性。
当Alice向终端授予FDA许可时,所有用户现在也通过终端获得FDA许可。结果是,Alice不仅授予自己访问他人数据的权限,也授予他人访问其本身数据的权限。
令人惊讶的是,Alice意外的允许也扩展到非特权用户。正如CVE-2020-9771报告的那样,允许终端拥有完全磁盘访问权限,从而在不存在任何进一步的安全挑战的情况下可读取所有数据,致使整个磁盘甚至可以被非管理员用户挂载和读取。总之,任何用户都可以创建和挂载系统的本地快照,并读取所有其他用户的数据。
解决这个问题的技巧在于两个命令行实用程序,所有用户都可以使用这两个实用程序:/usr/bin/tmutil 和 /sbin/mount。 第一个允许我们创建整个系统的本地快照,第二个将该快照挂载为 apfs 只读文件系统。 这样,我们可以导航在已安装快照上捕获的所有用户数据。
上面提到的 CVE 是能够在没有完整磁盘访问的情况下利用它的漏洞,苹果的修复方法是仅在授予全磁盘访问权限时才可能实现。
所以,当你授予自己完整磁盘访问权限时,就意味着授予所有用户(甚至是非特权用户)读取磁盘上所有其他用户数据的能力,包括你本身的数据。
通过自动化后门全盘访问
这种情况不仅限于用户:它也扩展到用户进程。根据程序授权,全磁盘访问可以访问所有用户数据。如果该应用程序是恶意软件或者可能是被恶意软件控制,那么恶意软件也一样。但是应用程序控制由另一个 TCC 管理。
另外还有另一个漏洞:Mac 上有一个应用程序Finder始终具有完整磁盘访问权限,但从未出现在系统偏好设置的完整磁盘访问选项中。
任何可以控制 Finder(在隐私选项的“自动化”中列出)的应用程序也具有完整磁盘访问,尽管你不会在完整磁盘中看到 Finder 和控制应用程序访问选项。
由于这种复杂性,管理人员必须意识到,即使他们从未授予 FDA权限,或者即使他们锁定了完整磁盘访问(可能通过 MDM 解决方案),只允许在“自动化”选项中控制 Finder 的应用程序将绕过这些限制。
在上图中,终端和两个合法的第三方自动化应用程序、脚本调试器和FastScripts(一款Mac OS平台上的脚本调用工具,让用户快速在任何应用程序中通过菜单执行AppleScript或shell脚本)都具有完整磁盘访问权限,尽管在完整磁盘访问隐私选项中没有显示:
如上所述,这是因为 Finder 具有不可撤销的 FDA 许可,而这些应用程序具有获得了对 Finder 的自动化控制。
虽然终端没有被授予完全磁盘访问权限,但是如果它在过去由于某些原因被授予了自动化权限,那么在终端中执行上面的脚本将返回“private.txt”文件所包含的内容。由于“private.txt”位于用户的桌面,一个表面上受TCC保护的位置,如果没有应用程序被明确授予FDA许可,该文件的内容谁也看不见。但事实证明并非如此。
这里明显的缓解措施是不允许应用程序自动执行 Finder。但是,有两点需要注意,首先,将 Finder 自动化授予终端或其他生产力应用程序有许多正当理由:任何对通过自动化提高生产力感兴趣的熟练用户很可能已经这样做或希望这样做。 不幸的是,这是一笔“全押”交易。 如果用户有这样做的特定目的,则无法阻止终端(或其他程序)使用此访问权限的其他不太合法的使用。
其次,以这种方式对 FDA 访问进行后门会降低授权障碍。 以通常的方式授予 FDA 需要管理员密码。 然而,人们可以在没有密码的情况下同意 Finder(以及 FDA 后门)的自动化。 有一个带有简单点击的同意对话框就足够了:
虽然警告文本足够明确(如果用户阅读它),但鉴于 Finder 不可撤销的全盘访问权限,赋予控制应用程序的权力远远超出当前用户的同意或控制,这远非透明。如果它在过去的任何时候被授予过,那么该权限仍然有效,除非在系统偏好设置的“自动化”选项中或通过前面提到的 tccutil 撤销复位命令。
所以,应该密切关注系统偏好设置隐私面板中允许自动执行 Finder 的内容。
TCC 经常被绕过
到目前为止我们提到的所有安全策略实际上都是设计使然,但是 TCC 经常被绕过。当macOS Mojave首次公开发布时,就有人注意到可以通过SSH绕过TCC。最近的一个TCC绕过在2020年8月被XCSSET恶意软件利用。虽然苹果在9个月后的2021年5月修补了这个特定的漏洞,但它仍然可以在尚未更新到 macOS 11.4 或 10.15.7 的设备上被利用。
在易受攻击的系统上,复制起来非常容易。
1.创建一个需要TCC权限的简单木马应用程序。在这里,我们将创建一个应用程序
需要访问当前用户的桌面以枚举保存在那里的文件。
% osacompile -e ‘do shell script “ls -al /Users/sphil/Desktop >> /tmp/lsout”’ -o / tmp/ls.app
2. 将这个新的“ls.app”木马复制到已经获得 TCC 的应用程序包中访问桌面的权限。
% cp -R /tmp/ls.app /Applications/Some Privileged.app/
你可以通过“系统偏好设置”的“安全和隐私”面板的“隐私”选项卡中的“文件和文件夹”类别找到当前允许的应用程序列表
3. 执行木马应用程序:
% open /Applications/Some Privileged.app/ls.app
有安全意识的读者无疑想知道攻击者如何在不了解 TCC 权限的情况下实现第 2 步,除非终端已经拥有完整磁盘访问权限,否则你无法从终端枚举 TCC.db 中的特权应用程序列表。
假设目标尚未出于其他合法原因授予终端 FDA 特权,那攻击者或恶意软件可以改为枚举 Applications 文件夹的内容,并根据以下内容进行有根据的猜测并找到需要的内容,例如 Xcode、Camtasia 和 Zoom,都是如果安装了就可能获得特权的应用程序。
同样,可以对已知具有此类权限的应用程序列表进行硬编码,并在目标设备上搜索它们。 这正是 XCSSET 恶意软件的工作原理:恶意软件使用一系列应用程序进行硬编码,它希望拥有屏幕捕获权限,并将其自己的应用程序注入到任何找到的应用程序包中。
不幸的是,针对此特定漏洞的修复并不能有效阻止恶意软件开发者。 如果绕过失败,只需模拟 Finder 并要求用户进行控制就很简单了。 与自动化请求一样,这仅需要用户点击他们的同意书,而不是提供密码。
正如我们上面提到的,默认情况下Finder 已经具有完整磁盘访问权限,因此用户看到请求对话框要求授予 Finder 访问任何文件夹的权限时,应该立即怀疑是否有问题。
因此,我们知道恶意软件会滥用其中的一些漏洞,并且存在各种尚未修补的 TCC 漏洞。 所以我们的结论是,用户和管理员都不应过于相信 TCC 的保护能力。
TCC 也可以攻击你
对 Apple 用户隐私控制的一个常见误解是它阻止访问某些位置,例如,桌面、文档、下载、iCloud 文件夹。然而,事实并非如此。
管理员需要注意,TCC 不会防止文件被非特权进程写入 TCC 保护区,同样也不会阻止这些进程读取写入的文件。
如果你安装了无法访问 TCC 保护区的任何类型的安全或监控软件,则没有什么可以阻止恶意软件将其部分或全部组件隐藏在这些保护区中。
解决 macOS 在企业中的安全挑战
选择不依赖 Rosetta 转换在 Apple 芯片上运行的安全解决方案。如上所述,仅使用内置安全机制无法充分解决部署最新 Apple Mac 设备的企业所面临的威胁。这些机制充其量只是提供了一道薄弱的第一道防线,但它们显然无法阻止一些已知的恶意软件、未知的新型恶意软件或有针对性的攻击。从 Mac 管理员的角度来看,苹果平台在可见性、威胁追踪或设备控制方面没有提供任何帮助。
不要依赖Rosetta
首先,确保你正在考虑的任何 macOS 安全软件都可以在本地运行,而不仅仅是在苹果的 Intel 平台以及它的“Apple Silicon”M1 芯片平台。这意味着解决方案应该不依赖苹果的 Rosetta 转译来与 Apple 芯片兼容。与转译代码相比,原生 arm64 代码至少有两个性能优势,尤其是与大型、复杂的程序相关,例如 EDR 产品。 Rosetta 使用两种转译:
“Ahead-of-Time”(AOT)转译,在软件第一次启动时发生,“Just-inTime”转译,直到运行时才发生。
当需要 JIT 编译时,内核将控制转移到一个特殊的 Rosetta 转换存根来处理工作。任何足够复杂的程序(例如 EDR 解决方案)至少需要通过 Rosetta 将其某些英特尔代码转换为 JIT,与运行本地 arm64 代码的安全解决方案相比,这种转换将导致性能下降。 Apple 自己的文档中指出了这一事实:“翻译过程需要时间,因此用户可能会认为翻译的应用程序有时会启动或运行得更慢”。
但性能并不是唯一需要担心的事情。如上所述,可以通过 Rosetta 在没有代码签名的情况下运行英特尔代码。这允许软件篡改的可能性:通过 Rosetta 转换仅作为 Intel 二进制运行的安全软件可能会删除其代码签名,更改其代码,并且通过 Rosetta 执行的程序没有有效开发人员的代码签名。
检查已安装软件是本地运行还是通过 Rosetta 运行的最简单方法是使用 GUI“System Information.app”或 CLI system_profiler 实用程序。
要启动 System Information.app,请在 Spotlight 中输入“sys”,选择适当的结果并点击“返回”。当应用程序打开时,点击侧栏中的“应用程序”。在“种类”列中列为“通用”的项目是本机运行的。
转译的项目将在 ARM M1 Mac 上被列为“Intel”。
或者,下面的命令将输出一个类似的列表,以便在脚本中进行处理:% system_profiler SPApplicationsDataType
什么样的恶意软件会以 macOS 为目标?
在过去的两年中,我们看到 macOS 威胁的数量和种类都在快速上升。Shlayer、ZShlayer 和 Silver Sparrow 等使用零日漏洞和新颖的脚本方法来绕过 XProtect 和 Gatekeeper 等苹果的内置技术。
幸运的是,虽然勒索软件也在 Mac 平台上被发现但仍然处于边缘地位,但恶意软件和间谍软件以后门和 RATS 的形式在增加,这些后门和 RATS 是从跨平台代码(如 Go 甚至 Rust)编译而来的。尽管我们还没有看到任何成功的 ITW 感染,但像 Smaug 和其他人这样的暗网 RaaS 服务正在为 macOS 提供勒索软件有效载荷。
本文翻译自:https://www.sentinelone.com/wp-content/uploads/2021/11/The-Complete-Guide-to-Understanding-Apple-Mac-Security-for-Enterprise.pdf如若转载,请注明原文地址