mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Translated ['src/macos-hardening/macos-security-and-privilege-escalation
This commit is contained in:
		
							parent
							
								
									f03ab79d13
								
							
						
					
					
						commit
						5bdd32b1ad
					
				@ -4,9 +4,9 @@
 | 
			
		||||
 | 
			
		||||
## **基本信息**
 | 
			
		||||
 | 
			
		||||
**TCC (透明性、同意和控制)** 是一种安全协议,专注于规范应用程序权限。其主要作用是保护敏感功能,如 **位置服务、联系人、照片、麦克风、相机、辅助功能和完整磁盘访问**。通过在授予应用程序访问这些元素之前要求用户明确同意,TCC 增强了隐私和用户对其数据的控制。
 | 
			
		||||
**TCC (透明性、同意和控制)** 是一种安全协议,专注于规范应用程序权限。其主要作用是保护敏感功能,如 **位置服务、联系人、照片、麦克风、相机、辅助功能和完整磁盘访问**。通过在授予应用程序访问这些元素之前要求明确的用户同意,TCC 增强了隐私和用户对其数据的控制。
 | 
			
		||||
 | 
			
		||||
当应用程序请求访问受保护的功能时,用户会遇到 TCC。这通过一个提示可见,允许用户 **批准或拒绝访问**。此外,TCC 还支持用户的直接操作,例如 **将文件拖放到应用程序中**,以授予对特定文件的访问,确保应用程序仅访问明确允许的内容。
 | 
			
		||||
当应用程序请求访问受保护的功能时,用户会遇到 TCC。这通过一个提示可见,允许用户 **批准或拒绝访问**。此外,TCC 还支持直接用户操作,例如 **将文件拖放到应用程序中**,以授予对特定文件的访问,确保应用程序仅访问明确允许的内容。
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
@ -14,7 +14,7 @@
 | 
			
		||||
 | 
			
		||||
每个登录用户都有一个 **用户模式 tccd** 在运行,定义在 `/System/Library/LaunchAgents/com.apple.tccd.plist` 中,注册 mach 服务 `com.apple.tccd` 和 `com.apple.usernotifications.delegate.com.apple.tccd`。
 | 
			
		||||
 | 
			
		||||
在这里可以看到 tccd 作为系统和用户运行:
 | 
			
		||||
在这里你可以看到 tccd 作为系统和用户运行:
 | 
			
		||||
```bash
 | 
			
		||||
ps -ef | grep tcc
 | 
			
		||||
0   374     1   0 Thu07PM ??         2:01.66 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd system
 | 
			
		||||
@ -105,7 +105,7 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
 | 
			
		||||
> 检查两个数据库,您可以查看应用程序允许、禁止或没有的权限(它会请求权限)。
 | 
			
		||||
 | 
			
		||||
- **`service`** 是 TCC **权限** 的字符串表示
 | 
			
		||||
- **`client`** 是具有权限的 **bundle ID** 或 **二进制路径**
 | 
			
		||||
- **`client`** 是具有权限的 **bundle ID** 或 **二进制文件路径**
 | 
			
		||||
- **`client_type`** 指示它是 Bundle Identifier(0) 还是绝对路径(1)
 | 
			
		||||
 | 
			
		||||
<details>
 | 
			
		||||
@ -186,7 +186,7 @@ tccutil reset All
 | 
			
		||||
```
 | 
			
		||||
### TCC 签名检查
 | 
			
		||||
 | 
			
		||||
TCC **数据库** 存储应用程序的 **Bundle ID**,但它还 **存储** **信息** 关于 **签名** 以 **确保** 请求使用权限的应用是正确的。
 | 
			
		||||
TCC **数据库** 存储应用程序的 **Bundle ID**,但它还 **存储** **信息** 关于 **签名** 以 **确保** 请求使用权限的应用程序是正确的。
 | 
			
		||||
```bash
 | 
			
		||||
# From sqlite
 | 
			
		||||
sqlite> select service, client, hex(csreq) from access where auth_value=2;
 | 
			
		||||
@ -199,14 +199,14 @@ csreq -t -r /tmp/telegram_csreq.bin
 | 
			
		||||
(anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] /* exists */ or anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = "6N38VWS5BX") and identifier "ru.keepcoder.Telegram"
 | 
			
		||||
```
 | 
			
		||||
> [!WARNING]
 | 
			
		||||
> 因此,使用相同名称和包 ID 的其他应用程序将无法访问授予其他应用程序的权限。
 | 
			
		||||
> 因此,使用相同名称和捆绑 ID 的其他应用程序将无法访问授予其他应用程序的权限。
 | 
			
		||||
 | 
			
		||||
### 权限与 TCC 权限
 | 
			
		||||
 | 
			
		||||
应用程序 **不仅需要** **请求** 并且已经 **获得访问** 某些资源的权限,它们还需要 **拥有相关的权限**。\
 | 
			
		||||
例如 **Telegram** 拥有权限 `com.apple.security.device.camera` 来请求 **访问相机**。一个 **没有** 这个 **权限的应用程序将无法** 访问相机(用户甚至不会被询问权限)。
 | 
			
		||||
例如 **Telegram** 拥有权限 `com.apple.security.device.camera` 来请求 **访问相机**。一个 **没有** 这个 **权限的应用** 将无法访问相机(用户甚至不会被询问权限)。
 | 
			
		||||
 | 
			
		||||
然而,对于应用程序 **访问** 某些用户文件夹,如 `~/Desktop`、`~/Downloads` 和 `~/Documents`,它们 **不需要** 任何特定的 **权限**。系统将透明地处理访问并 **根据需要提示用户**。
 | 
			
		||||
然而,对于应用程序 **访问** 某些用户文件夹,例如 `~/Desktop`、`~/Downloads` 和 `~/Documents`,它们 **不需要** 任何特定的 **权限**。系统将透明地处理访问并 **根据需要提示用户**。
 | 
			
		||||
 | 
			
		||||
苹果的应用程序 **不会生成提示**。它们在其 **权限** 列表中包含 **预先授予的权利**,这意味着它们 **永远不会生成弹出窗口**,**也** 不会出现在任何 **TCC 数据库** 中。例如:
 | 
			
		||||
```bash
 | 
			
		||||
@ -222,14 +222,14 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
 | 
			
		||||
这将避免日历请求用户访问提醒、日历和地址簿。
 | 
			
		||||
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> 除了一些关于权限的官方文档外,还可以找到关于权限的非官方**有趣信息在** [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl)
 | 
			
		||||
> 除了一些关于权限的官方文档外,还可以找到关于权限的非官方**有趣信息**在[**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl)
 | 
			
		||||
 | 
			
		||||
一些 TCC 权限包括:kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCServicePhotos... 没有公开的列表定义所有权限,但您可以查看这个[**已知权限列表**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service)。
 | 
			
		||||
 | 
			
		||||
### 敏感未保护位置
 | 
			
		||||
 | 
			
		||||
- $HOME(本身)
 | 
			
		||||
- $HOME/.ssh, $HOME/.aws 等
 | 
			
		||||
- $HOME/.ssh, $HOME/.aws, 等等
 | 
			
		||||
- /tmp
 | 
			
		||||
 | 
			
		||||
### 用户意图 / com.apple.macl
 | 
			
		||||
@ -400,7 +400,7 @@ EOD
 | 
			
		||||
 | 
			
		||||
### 自动化 (SE) 到某些 TCC
 | 
			
		||||
 | 
			
		||||
**系统事件可以创建文件夹操作,而文件夹操作可以访问一些 TCC 文件夹**(桌面、文档和下载),因此可以使用如下脚本来滥用这种行为:
 | 
			
		||||
**系统事件可以创建文件夹操作,而文件夹操作可以访问一些 TCC 文件夹**(桌面、文档和下载),因此可以使用以下脚本来滥用这种行为:
 | 
			
		||||
```bash
 | 
			
		||||
# Create script to execute with the action
 | 
			
		||||
cat > "/tmp/script.js" <<EOD
 | 
			
		||||
@ -444,7 +444,7 @@ rm "$HOME/Desktop/file"
 | 
			
		||||
```
 | 
			
		||||
### 自动化 (SE) + 辅助功能 (**`kTCCServicePostEvent`|**`kTCCServiceAccessibility`**)** 到 FDA\*
 | 
			
		||||
 | 
			
		||||
在 **`System Events`** + 辅助功能 (**`kTCCServicePostEvent`**) 上的自动化允许向 **进程发送按键**。通过这种方式,您可以滥用 Finder 来更改用户的 TCC.db 或为任意应用程序提供 FDA(尽管可能会提示输入密码)。
 | 
			
		||||
在 **`System Events`** 上的自动化 + 辅助功能 (**`kTCCServicePostEvent`**) 允许向 **进程发送按键**。通过这种方式,您可以滥用 Finder 来更改用户的 TCC.db 或为任意应用程序提供 FDA(尽管可能会提示输入密码)。
 | 
			
		||||
 | 
			
		||||
Finder 覆盖用户 TCC.db 示例:
 | 
			
		||||
```applescript
 | 
			
		||||
@ -506,7 +506,7 @@ EOF
 | 
			
		||||
 | 
			
		||||
### 用户 TCC 数据库到 FDA
 | 
			
		||||
 | 
			
		||||
获得 **用户 TCC** 数据库的 **写权限** 你 **不能** 授予自己 **`FDA`** 权限,只有系统数据库中的用户可以授予。
 | 
			
		||||
获取 **用户 TCC** 数据库的 **写权限** 你 **不能** 授予自己 **`FDA`** 权限,只有系统数据库中的用户可以授予。
 | 
			
		||||
 | 
			
		||||
但你可以 **授予** 自己 **`Finder 的自动化权限`**,并滥用之前的技术提升到 FDA\*。
 | 
			
		||||
 | 
			
		||||
@ -518,14 +518,14 @@ EOF
 | 
			
		||||
 | 
			
		||||
### **SIP 绕过到 TCC 绕过**
 | 
			
		||||
 | 
			
		||||
系统 **TCC 数据库** 受到 **SIP** 保护,这就是为什么只有具有 **指示的权利** 的进程才能修改它。因此,如果攻击者找到一个 **SIP 绕过** 通过一个 **文件**(能够修改受 SIP 限制的文件),他将能够:
 | 
			
		||||
系统 **TCC 数据库** 受到 **SIP** 保护,这就是为什么只有具有 **指示的权限** 的进程才能修改它。因此,如果攻击者找到一个 **SIP 绕过** 通过一个 **文件**(能够修改受 SIP 限制的文件),他将能够:
 | 
			
		||||
 | 
			
		||||
- **移除** TCC 数据库的保护,并授予自己所有 TCC 权限。他可以滥用这些文件中的任何一个,例如:
 | 
			
		||||
- TCC 系统数据库
 | 
			
		||||
- REG.db
 | 
			
		||||
- MDMOverrides.plist
 | 
			
		||||
 | 
			
		||||
然而,还有另一种选择可以滥用这个 **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
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user