macOS TCC Bypasses
按功能分类
写入绕过
这不是绕过,这只是TCC的工作原理:它不会阻止写入。如果终端无法访问用户的桌面以读取内容,它仍然可以写入其中:
扩展属性 com.apple.macl
被添加到新的 文件 中,以便让 创建者的应用 能够读取它。
TCC 点击劫持
可以将一个窗口覆盖在 TCC 提示框上,使用户在不知情的情况下接受它。您可以在 TCC-ClickJacking** 中找到一个 PoC**。
通过任意名称请求 TCC
攻击者可以在 Info.plist
中创建任何名称的应用程序(例如 Finder、Google Chrome...),并让其请求访问某些受 TCC 保护的位置。用户会认为请求此访问权限的是合法应用程序。
此外,可以将合法应用程序从 Dock 中移除,并将伪造的应用程序放在其中,因此当用户点击伪造的应用程序(可以使用相同的图标)时,它可能调用合法应用程序,请求 TCC 权限并执行恶意软件,使用户相信是合法应用程序请求了访问权限。
更多信息和 PoC 请参阅:
SSH 绕过
默认情况下,通过 SSH 访问 具有 "完全磁盘访问权限"。为了禁用此权限,您需要将其列出但禁用(从列表中删除它不会删除这些权限):
在这里,您可以找到一些恶意软件如何绕过此保护的示例:
请注意,现在,为了能够启用 SSH,您需要完全磁盘访问权限
处理扩展名 - CVE-2022-26767
属性 com.apple.macl
被赋予文件以赋予某个应用程序读取权限。当拖放文件到应用程序上或用户双击文件以使用默认应用程序打开文件时,将设置此属性。
因此,用户可以注册一个恶意应用程序来处理所有扩展名,并调用启动服务来打开任何文件(因此恶意文件将被授予读取权限)。
iCloud
授权 com.apple.private.icloud-account-access
可以与 com.apple.iCloudHelper
XPC 服务通信,后者将提供 iCloud 令牌。
iMovie 和 Garageband 具有此授权以及其他授权。
有关从该授权中获取 iCloud 令牌的漏洞的更多信息,请查看演讲:#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula
kTCCServiceAppleEvents / 自动化
具有 kTCCServiceAppleEvents
权限的应用程序将能够控制其他应用程序。这意味着它可能能够滥用授予其他应用程序的权限。
有关 Apple 脚本的更多信息,请查看:
例如,如果一个应用程序具有对 iTerm
的自动化权限,例如在此示例中**Terminal
** 对 iTerm 有访问权限:
对 iTerm 的控制
没有 FDA 的 Terminal 可以调用具有 FDA 的 iTerm,并使用它执行操作:
macOS TCC Bypasses
Introduction
This repository contains various macOS TCC (Transparency, Consent, and Control) bypass techniques. TCC is a macOS security feature that protects user privacy by requesting user approval before allowing applications to access certain sensitive data.
Contents
bypass-photos-library.md: This file explains a technique to bypass TCC restrictions and access the Photos library without user consent.
bypass-microphone.md: Here, you can find a method to bypass TCC controls and access the microphone without user authorization.
bypass-camera.md: Learn how to bypass TCC limitations and access the camera without user permission.
bypass-location-services.md: This document details a method to bypass TCC settings and access location services without user acknowledgment.
bypass-screen-recording.md: Find out how to bypass TCC security measures and perform screen recording without user awareness.
Disclaimer
These techniques are for educational purposes only. Misuse of these bypass methods may violate laws and regulations.
通过Finder
或者,如果一个应用程序可以通过Finder访问,它可以执行类似这样的脚本:
通过应用程序行为
CVE-2020–9934 - TCC
用户空间的 tccd 守护程序 使用 HOME
env 变量来访问 TCC 用户数据库:$HOME/Library/Application Support/com.apple.TCC/TCC.db
根据这篇 Stack Exchange 帖子,由于 TCC 守护程序通过 launchd
在当前用户域内运行,可以控制传递给它的所有环境变量。
因此,攻击者可以在 launchctl
中设置 $HOME
环境 变量指向一个受控 目录,重新启动 TCC 守护程序,然后直接修改 TCC 数据库,从而获得所有可用的 TCC 权限,而无需提示最终用户。
PoC:
CVE-2021-30761 - Notes
Notes可以访问TCC受保护的位置,但是当创建一个笔记时,它会创建在一个非受保护的位置。因此,您可以要求Notes将受保护的文件复制到一个笔记中(因此在非受保护的位置),然后访问该文件:
CVE-2021-30782 - Translocation
二进制文件/usr/libexec/lsd
与库libsecurity_translocate
具有授权com.apple.private.nullfs_allow
,允许其创建nullfs挂载,并具有授权com.apple.private.tcc.allow
与**kTCCServiceSystemPolicyAllFiles
**以访问每个文件。
可以向“Library”添加隔离属性,调用**com.apple.security.translocation
** XPC服务,然后它会将Library映射到**$TMPDIR/AppTranslocation/d/d/Library
,其中Library中的所有文档都可以访问**。
CVE-2023-38571 - 音乐和电视
**Music
有一个有趣的功能:当它运行时,它会将拖放到~/Music/Music/Media.localized/Automatically Add to Music.localized
的文件导入到用户的“媒体库”中。此外,它调用类似于:rename(a, b);
**其中a
和b
为:
a = "~/Music/Music/Media.localized/Automatically Add to Music.localized/myfile.mp3"
b = "~/Music/Music/Media.localized/Automatically Add to Music.localized/Not Added.localized/2023-09-25 11.06.28/myfile.mp3
这个**rename(a, b);
行为容易受到竞争条件的影响,因为可以将一个伪造的TCC.db文件放入Automatically Add to Music.localized
文件夹中,然后当创建新文件夹(b)时,复制文件,删除它,并将其指向~/Library/Application Support/com.apple.TCC
**。
SQLITE_SQLLOG_DIR - CVE-2023-32422
如果**SQLITE_SQLLOG_DIR="path/folder"
基本上意味着任何打开的数据库都会被复制到该路径**。在这个CVE中,滥用了这个控制,以便在将要由带有FDA TCC数据库的进程打开的SQLite数据库中写入,然后通过在文件名中创建符号链接滥用**SQLITE_SQLLOG_DIR
,因此当打开该数据库时,用户的TCC.db被覆盖**。
SQLITE_AUTO_TRACE
如果设置了环境变量**SQLITE_AUTO_TRACE
,库libsqlite3.dylib
将开始记录**所有SQL查询。许多应用程序使用了这个库,因此可以记录它们所有的SQLite查询。
几个苹果应用程序使用了这个库来访问TCC受保护的信息。
MTL_DUMP_PIPELINES_TO_JSON_FILE - CVE-2023-32407
这个环境变量被Metal
框架使用,这是各种程序的依赖,尤其是Music
,它有FDA。
设置以下内容:MTL_DUMP_PIPELINES_TO_JSON_FILE="路径/名称"
。如果路径
是一个有效的目录,该漏洞将被触发,我们可以使用fs_usage
查看程序的运行情况:
一个文件将被
open()
,名为路径/.dat.nosyncXXXX.XXXXXX
(X为随机值)一个或多个
write()
将内容写入文件(我们无法控制)路径/.dat.nosyncXXXX.XXXXXX
将被rename()
为路径/名称
这是一个临时文件写入,接着是一个不安全的rename(old, new)
。
这是不安全的,因为它必须分别解析旧路径和新路径,这可能需要一些时间,并且容易受到竞争条件的影响。更多信息可以查看xnu
函数renameat_internal()
。
所以,基本上,如果一个特权进程正在从你控制的文件夹重命名,你可以获得一个RCE,并让它访问不同的文件,或者像在这个CVE中那样,打开特权应用程序创建的文件并存储一个FD。
如果重命名访问你控制的文件夹,同时你已经修改了源文件或者有一个FD指向它,你可以将目标文件(或文件夹)更改为指向符号链接,这样你可以随时写入。
这是CVE中的攻击示例:例如,为了覆盖用户的TCC.db
,我们可以:
创建
/Users/hacker/ourlink
指向/Users/hacker/Library/Application Support/com.apple.TCC/
创建目录
/Users/hacker/tmp/
设置
MTL_DUMP_PIPELINES_TO_JSON_FILE=/Users/hacker/tmp/TCC.db
运行
Music
时使用这个环境变量触发漏洞捕获
/Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX
的open()(X为随机值)
在这里我们也为写入打开这个文件,并保留文件描述符
在一个循环中原子地将
/Users/hacker/tmp
切换为/Users/hacker/ourlink
我们这样做是为了最大化我们成功的机会,因为竞争窗口非常狭窄,但是失败的风险可以忽略不计
等一会儿
测试我们是否幸运
如果没有,从头再来
更多信息请查看https://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.html
现在,如果你尝试使用环境变量MTL_DUMP_PIPELINES_TO_JSON_FILE
,应用程序将无法启动
Apple 远程桌面
作为root用户,你可以启用这项服务,ARD代理将具有完全磁盘访问权限,用户可以利用这一点让其复制一个新的TCC用户数据库。
通过 NFSHomeDirectory
TCC在用户的HOME文件夹中使用一个数据库来控制用户特定资源的访问,路径为**$HOME/Library/Application Support/com.apple.TCC/TCC.db**。 因此,如果用户设法使用指向不同文件夹的$HOME环境变量重新启动TCC,用户可以在**/Library/Application Support/com.apple.TCC/TCC.db**中创建一个新的TCC数据库,并欺骗TCC授予任何应用程序任何TCC权限。
请注意,苹果使用存储在用户配置文件中的设置来确定**NFSHomeDirectory
属性的值为$HOME
,因此,如果你入侵了一个具有修改此值权限的应用程序(kTCCServiceSystemPolicySysAdminFiles
**),你可以利用这个选项进行TCC绕过。
CVE-2021-30970 - Powerdir
第一个POC使用dsexport和dsimport来修改用户的HOME文件夹。
为目标应用程序获取一个_csreq_ blob。
放置一个带有所需访问权限和_csreq_ blob的假_TCC.db_文件。
使用dsexport导出用户的目录服务条目。
修改目录服务条目以更改用户的主目录。
使用dsimport导入修改后的目录服务条目。
停止用户的_tccd_并重新启动该进程。
第二个POC使用了**/usr/libexec/configd
,其中具有值为kTCCServiceSystemPolicySysAdminFiles
的com.apple.private.tcc.allow
权限。
通过使用-t
选项运行configd
,攻击者可以指定一个自定义Bundle来加载**。因此,该漏洞利用用configd
代码注入替换了更改用户主目录的**dsexport
和dsimport
**方法。
更多信息请查看原始报告。
通过进程注入
有不同的技术可以注入代码到一个进程中并滥用其TCC权限:
此外,最常见的绕过TCC的进程注入技术是通过插件(加载库)。 插件通常以库或plist的形式存在,将由主应用程序加载并在其上下文中执行。因此,如果主应用程序有权限访问TCC受限文件(通过授予的权限或权限),自定义代码也将具有这些权限。
CVE-2020-27937 - Directory Utility
应用程序/System/Library/CoreServices/Applications/Directory Utility.app
具有权限**kTCCServiceSystemPolicySysAdminFiles
,加载带有.daplug
扩展名的插件,并且没有启用**强化运行时。
为了利用这个CVE,NFSHomeDirectory
被更改(滥用之前的权限)以便能够接管用户的TCC数据库以绕过TCC。
更多信息请查看原始报告。
CVE-2020-29621 - Coreaudiod
二进制文件 /usr/sbin/coreaudiod
具有权限 com.apple.security.cs.disable-library-validation
和 com.apple.private.tcc.manager
。第一个权限允许代码注入,第二个权限允许其访问管理 TCC。
该二进制文件允许从文件夹 /Library/Audio/Plug-Ins/HAL
加载第三方插件。因此,可以使用以下 PoC 加载插件并滥用 TCC 权限:
有关更多信息,请查看原始报告。
设备抽象层(DAL)插件
通过 Core Media I/O 打开摄像头流的系统应用程序(具有 kTCCServiceCamera
的应用程序)在进程中加载位于 /Library/CoreMediaIO/Plug-Ins/DAL
中的这些插件(不受 SIP 限制)。
只需在那里存储一个具有常见 构造函数 的库即可用于 注入代码。
几个 Apple 应用程序对此存在漏洞。
Firefox
Firefox 应用程序具有 com.apple.security.cs.disable-library-validation
和 com.apple.security.cs.allow-dyld-environment-variables
权限:
CVE-2020-10006
二进制文件 /system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl
具有权限 com.apple.private.tcc.allow
和 com.apple.security.get-task-allow
,这允许注入代码到进程中并使用 TCC 权限。
CVE-2023-26818 - 电报
电报具有权限 com.apple.security.cs.allow-dyld-environment-variables
和 com.apple.security.cs.disable-library-validation
,因此可以滥用它来获取其权限,例如使用摄像头录制。您可以在写作中找到有效载荷。
请注意如何使用环境变量加载库,创建了一个自定义 plist 来注入此库,并使用 launchctl
来启动它:
通过打开调用
即使在沙盒环境中,也可以调用**open
**
终端脚本
通常会为终端授予完全磁盘访问权限(FDA),至少在技术人员使用的计算机上是这样。可以使用它来调用**.terminal
**脚本。
.terminal
脚本是类似于以下带有要在**CommandString
**键中执行的命令的属性列表文件:
一个应用程序可以在诸如 /tmp 这样的位置编写一个终端脚本,并使用如下命令启动它:
通过挂载
CVE-2020-9771 - mount_apfs TCC绕过和提权
任何用户(甚至是非特权用户)都可以创建和挂载一个时间机器快照,并访问该快照的所有文件。
唯一需要的特权是所使用的应用程序(如Terminal
)需要具有完全磁盘访问权限(FDA)(kTCCServiceSystemPolicyAllfiles
),这需要由管理员授予。
更详细的解释可以在原始报告中找到。
CVE-2021-1784 & CVE-2021-30808 - 挂载到 TCC 文件上
即使 TCC DB 文件受到保护,也有可能挂载到目录一个新的 TCC.db 文件:
查看原始报告中的完整利用。
asr
工具**/usr/sbin/asr
**允许复制整个磁盘并在另一个位置挂载,绕过了TCC保护。
位置服务
在**/var/db/locationd/clients.plist
中有第三个TCC数据库,用于指示允许访问位置服务的客户端。
文件夹/var/db/locationd/
没有受到DMG挂载的保护**,因此可以挂载我们自己的plist。
通过启动应用程序
通过grep
在许多情况下,文件会在非受保护的位置存储敏感信息,如电子邮件、电话号码、消息...(这被视为苹果的一个漏洞)。
合成点击
这种方法不再有效,但在过去曾经有效:
另一种方法是使用CoreGraphics事件:
参考
最后更新于