From 362fda5e4cf9032c4a4e41f92e87a1a03f7aa7d3 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 26 Dec 2023 02:17:19 +0000 Subject: [PATCH] Translated ['macos-hardening/macos-security-and-privilege-escalation/mac --- .../macos-tcc/README.md | 140 ++++++++++++------ 1 file changed, 95 insertions(+), 45 deletions(-) diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md b/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md index c90969edc..d6d236d1a 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md @@ -5,7 +5,7 @@ ☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * 如果您在**网络安全公司**工作,想在**HackTricks**上看到您的**公司广告**,或者想要获取**PEASS最新版本或下载HackTricks的PDF**?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)! -* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)系列。 +* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 获取[**官方PEASS & HackTricks周边商品**](https://peass.creator-spring.com) * **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**telegram群组**](https://t.me/peass)或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。** * **通过向**[**hacktricks仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。** @@ -24,7 +24,7 @@ **TCC**由位于`/System/Library/PrivateFrameworks/TCC.framework/Support/tccd`的**守护进程**处理,并在`/System/Library/LaunchDaemons/com.apple.tccd.system.plist`中配置(注册mach服务`com.apple.tccd.system`)。 -有一个**用户模式tccd**,为每个登录的用户运行,定义在`/System/Library/LaunchAgents/com.apple.tccd.plist`中,注册mach服务`com.apple.tccd`和`com.apple.usernotifications.delegate.com.apple.tccd`。 +有一个**用户模式的tccd**,为每个登录的用户运行,定义在`/System/Library/LaunchAgents/com.apple.tccd.plist`中,注册mach服务`com.apple.tccd`和`com.apple.usernotifications.delegate.com.apple.tccd`。 这里您可以看到作为系统和用户运行的tccd: ```bash @@ -36,30 +36,30 @@ ps -ef | grep tcc ### TCC 数据库 -允许/拒绝操作随后存储在一些TCC数据库中: +允许/拒绝操作随后存储在一些 TCC 数据库中: * 系统范围的数据库位于 **`/Library/Application Support/com.apple.TCC/TCC.db`**。 -* 该数据库受到**SIP保护**,因此只有SIP绕过才能写入它。 -* 用户TCC数据库 **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** 用于每个用户的偏好设置。 -* 该数据库受保护,因此只有具有高TCC权限的进程(如完全磁盘访问)才能写入它(但它不受SIP保护)。 +* 该数据库受到 **SIP 保护**,因此只有 SIP 绕过才能写入它。 +* 用户 TCC 数据库 **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** 用于每个用户的偏好设置。 +* 该数据库受保护,因此只有具有高级 TCC 权限的进程(如完全磁盘访问)才能写入它(但它不受 SIP 保护)。 {% hint style="warning" %} -上述数据库也**受TCC保护以限制读取访问**。因此,除非是来自具有TCC特权的进程,否则您**无法读取**您的常规用户TCC数据库。 +上述数据库也**受 TCC 保护以限制读取访问**。因此,除非是来自具有 TCC 权限的进程,否则您**无法读取**您的常规用户 TCC 数据库。 -然而,请记住,具有这些高权限的进程(如**FDA**或**`kTCCServiceEndpointSecurityClient`**)将能够写入用户的TCC数据库。 +然而,请记住,具有这些高权限的进程(如 **FDA** 或 **`kTCCServiceEndpointSecurityClient`**)将能够写入用户的 TCC 数据库。 {% endhint %} -* 还有第**三个**TCC数据库位于 **`/var/db/locationd/clients.plist`**,用于指示允许**访问位置服务**的客户端。 -* 受SIP保护的文件 **`/Users/carlospolop/Downloads/REG.db`**(也受TCC保护以限制读取访问),包含所有**有效TCC数据库**的**位置**。 -* 受SIP保护的文件 **`/Users/carlospolop/Downloads/MDMOverrides.plist`**(也受TCC保护以限制读取访问),包含更多TCC授予的权限。 -* 受SIP保护的文件 **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`**(但任何人都可读)是需要TCC例外的应用程序的允许列表。 +* 还有第**三个** TCC 数据库位于 **`/var/db/locationd/clients.plist`**,用于指示允许**访问位置服务**的客户端。 +* 受 SIP 保护的文件 **`/Users/carlospolop/Downloads/REG.db`**(也受 TCC 保护以限制读取访问),包含所有**有效 TCC 数据库**的**位置**。 +* 受 SIP 保护的文件 **`/Users/carlospolop/Downloads/MDMOverrides.plist`**(也受 TCC 保护以限制读取访问),包含更多 TCC 授予的权限。 +* 受 SIP 保护的文件 **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`**(但任何人都可读)是需要 TCC 异常的应用程序的允许列表。 {% hint style="success" %} -**iOS**中的TCC数据库位于 **`/private/var/mobile/Library/TCC/TCC.db`** +**iOS** 中的 TCC 数据库位于 **`/private/var/mobile/Library/TCC/TCC.db`** {% endhint %} {% hint style="info" %} -**通知中心UI**可以在系统TCC数据库中进行**更改**: +**通知中心 UI** 可以在系统 TCC 数据库中进行**更改**: {% code overflow="wrap" %} ```bash @@ -123,18 +123,18 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0; {% endtabs %} {% hint style="success" %} -检查这两个数据库,您可以检查应用程序已允许、已禁止或没有的权限(它将请求权限)。 +检查这两个数据库,你可以检查应用程序已允许、已禁止或没有的权限(它会请求权限)。 {% endhint %} -* **`service`** 是 TCC **权限** 字符串表示 -* **`client`** 是具有权限的 **bundle ID** 或 **路径到二进制** +* **`service`** 是 TCC **权限**的字符串表示形式 +* **`client`** 是具有权限的 **bundle ID** 或 **路径到二进制文件** * **`client_type`** 表示它是 Bundle Identifier(0) 还是绝对路径(1)
如果是绝对路径该如何执行 -只需执行 **`launchctl load your_bin.plist`**,使用类似的 plist: +只需执行 **`launctl load you_bin.plist`**,使用类似的 plist: ```xml @@ -171,7 +171,7 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0; ``` -
+
* **`auth_value`** 可以有不同的值:denied(0), unknown(1), allowed(2), 或 limited(3)。 * **`auth_reason`** 可以取以下值:Error(1), User Consent(2), User Set(3), System Set(4), Service Policy(5), MDM Policy(6), Override Policy(7), Missing usage string(8), Prompt Timeout(9), Preflight Unknown(10), Entitled(11), App Type Policy(12) @@ -196,7 +196,7 @@ echo "X'$REQ_HEX'" 您还可以在 `系统偏好设置 --> 安全性与隐私 --> 隐私 --> 文件与文件夹` 中检查**已授予应用程序的权限**。 {% hint style="success" %} -用户_可以_使用 **`tccutil`** **删除或查询规则**。 +用户 _可以_ 使用 **`tccutil`** **删除或查询规则**。 {% endhint %} #### 重置 TCC 权限 @@ -232,11 +232,11 @@ csreq -t -r /tmp/telegram_csreq.bin ### 权限和 TCC 权限 应用程序**不仅需要** **请求**并已被**授予访问**某些资源的权限,它们还需要**具有相关的权限**。\ -例如,**Telegram** 拥有权限 `com.apple.security.device.camera` 来请求**访问摄像头**。一个**没有**这个**权限的应用程序将无法**访问摄像头(用户甚至不会被询问权限)。 +例如,**Telegram** 有权限 `com.apple.security.device.camera` 来请求**访问摄像头**。一个**没有**这个**权限的应用程序将无法**访问摄像头(用户甚至不会被询问权限)。 -然而,对于应用程序来说,要**访问**某些**用户文件夹**,如 `~/Desktop`、`~/Downloads` 和 `~/Documents`,它们**不需要**具有任何特定的**权限**。系统将透明地处理访问并在需要时**提示用户**。 +然而,对于应用程序来说,要**访问**某些用户文件夹,如 `~/Desktop`、`~/Downloads` 和 `~/Documents`,它们**不需要**具有任何特定的**权限**。系统将透明地处理访问并在需要时**提示用户**。 -苹果的应用程序**不会生成提示**。它们在其**权限**列表中包含**预先授予的权利**,这意味着它们将**永远不会生成弹出窗口**,**也不**会出现在任何**TCC 数据库**中。例如: +苹果的应用程序**不会生成提示**。它们在其**权限**列表中包含**预先授予的权利**,这意味着它们将**永远不会生成弹出窗口**,**也不**会出现在任何**TCC 数据库中**。例如: ```bash codesign -dv --entitlements :- /System/Applications/Calendar.app [...] @@ -247,7 +247,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app kTCCServiceAddressBook ``` -这将避免日历请求用户访问提醒事项、日历和地址簿。 +这将避免日历请求用户访问提醒、日历和地址簿。 {% hint style="success" %} 除了一些关于权限的官方文档外,还可以在[**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl)找到关于权限的**非官方有趣信息**。 @@ -255,7 +255,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app 一些TCC权限包括:kTCCServiceAppleEvents、kTCCServiceCalendar、kTCCServicePhotos... 没有公开的列表定义了所有这些权限,但你可以查看这个[**已知权限列表**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service)。 -### 敏感未受保护的地方 +### 敏感的未受保护地方 * $HOME(本身) * $HOME/.ssh、$HOME/.aws 等 @@ -263,7 +263,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app ### 用户意图 / com.apple.macl -如前所述,可以通过将文件拖放到应用程序上来**授予应用程序对文件的访问权限**。这种访问不会在任何TCC数据库中指定,而是作为文件的**扩展** **属性**。此属性将**存储**允许应用程序的UUID: +如前所述,可以通过将文件拖放到应用程序上来**授予应用程序对文件的访问权限**。这种访问不会在任何TCC数据库中指定,而是作为文件的**扩展属性**。此属性将**存储允许应用程序的UUID**: ```bash xattr Desktop/private.txt com.apple.macl @@ -279,12 +279,12 @@ otool -l /System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal| gr uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3 ``` {% hint style="info" %} -值得注意的是,**`com.apple.macl`** 属性是由 **Sandbox** 管理的,而不是 tccd。 +值得注意的是,**`com.apple.macl`** 属性是由 **Sandbox** 管理,而不是 tccd。 -另外请注意,如果您将允许计算机中某个应用的 UUID 的文件移动到另一台计算机,因为同一个应用将有不同的 UIDs,它不会授予那个应用访问权限。 +另外请注意,如果您将允许计算机中某个应用的 UUID 的文件移动到另一台计算机,因为相同的应用将有不同的 UIDs,它不会授予那个应用访问权限。 {% endhint %} -扩展属性 `com.apple.macl` **无法像其他扩展属性那样被清除**,因为它受到 **SIP** 的保护。然而,正如[**这篇文章中解释的**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/),通过对文件进行**压缩**,**删除**然后**解压**,可以禁用它。 +扩展属性 `com.apple.macl` **无法像其他扩展属性那样被清除**,因为它受到 **SIP** 的保护。然而,正如[**这篇文章中解释的**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/),通过**压缩**文件、**删除**它然后**解压**,可以禁用它。 ## TCC 权限提升与绕过 @@ -336,12 +336,12 @@ strftime('%s', 'now') -- last_reminded with default current timestamp ```
-### 自动化至FDA\* +### 自动化到FDA\* TCC中自动化权限的名称是:**`kTCCServiceAppleEvents`**\ -这个特定的TCC权限还指示了可以在TCC数据库中管理的**应用程序**(所以权限并不允许管理所有内容)。 +这个特定的TCC权限还指出了可以在TCC数据库中管理的**应用程序**(所以权限并不允许管理所有内容)。 -**Finder**是一个**始终拥有FDA**的应用程序(即使它没有出现在UI中),所以如果你拥有对它的**自动化**权限,你可以滥用它的权限来**让它执行一些操作**。\ +**Finder**是一个**总是拥有FDA**的应用程序(即使它没有出现在UI中),所以如果你拥有对它的**自动化**权限,你可以滥用它的权限来**让它执行一些操作**。\ 在这种情况下,你的应用程序将需要对**`com.apple.Finder`**的**`kTCCServiceAppleEvents`**权限。 {% tabs %} @@ -382,12 +382,12 @@ EOD {% endtab %} {% endtabs %} -您可以滥用此功能来**编写您自己的用户TCC数据库**。 +您可以利用这一点**编写您自己的用户TCC数据库**。 {% hint style="warning" %} -拥有此权限,您将能够**请求finder访问受TCC限制的文件夹**并向您提供文件,但据我所知,您**无法使Finder执行任意代码**以完全滥用其FDA访问权限。 +拥有这个权限,您将能够**请求finder访问受TCC限制的文件夹**并将文件给您,但据我所知,您**无法使Finder执行任意代码**以完全利用它的FDA访问权限。 -因此,您将无法滥用完整的FDA能力。 +因此,您将无法完全利用FDA的能力。 {% endhint %} 这是获取对Finder自动化权限的TCC提示: @@ -395,12 +395,12 @@ EOD
{% hint style="danger" %} -请注意,因为**Automator**应用程序具有TCC权限**`kTCCServiceAppleEvents`**,它可以**控制任何应用程序**,如Finder。所以,如果您有控制Automator的权限,您也可以使用下面的代码来控制**Finder**: +请注意,因为**Automator**应用程序具有TCC权限**`kTCCServiceAppleEvents`**,它可以**控制任何应用程序**,如Finder。所以,如果您有控制Automator的权限,您也可以使用下面的代码控制**Finder**: {% endhint %}
-在Automator内获取一个shell +在Automator中获取一个shell ```applescript osascript< -同样的情况发生在**Script Editor app**,它可以控制Finder,但使用AppleScript你不能强制它执行脚本。 +同样的情况发生在 **Script Editor 应用程序**,它可以控制 Finder,但使用 AppleScript 你不能强制它执行脚本。 +### 自动化 + 辅助功能(**`kTCCServicePostEvent`**)到 FDA\* + +在 **`System Events`** 上的自动化 + 辅助功能(**`kTCCServicePostEvent`**)允许向进程发送 **按键指令**。通过这种方式,你可以滥用 Finder 来更改用户的 TCC.db 或者给任意应用程序授权 FDA(尽管这样做可能会提示输入密码)。 + +Finder 覆盖用户 TCC.db 的示例: +```applescript +-- store the TCC.db file to copy in /tmp +osascript <