mcpField
M
macos-security-bypass

macos-security-bypass

github.com/yaklang安全2.6k3.5k 次安装6 周前更新
代码仓库

关于 macos-security-bypass

面向授权安全工作的 macOS 安全绕过参考技能,涵盖 TCC、Gatekeeper、SIP、沙盒、代码签名、权限和持久化,并列出版本相关示例与命令。

主要功能

  1. 01TCC 绕过方式与前提
  2. 02Gatekeeper 隔离属性绕过
  3. 03SIP 限制与历史绕过案例
  4. 04沙盒逃逸途径
  5. 05代码签名和权限分析
  6. 06绕过后的持久化方法

适用场景

  1. 01评估 TCC 权限及暴露面
  2. 02检查终端上的 Gatekeeper 行为
  3. 03审计应用权限与签名
  4. 04调查沙盒逃逸和持久化风险

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/yaklang/hack-skills --skill macos-security-bypass

安装后在 Claude Code 中输入/macos-security-bypass确认已加载。

附带文件TCC_BYPASS_MATRIX.md

详细介绍

SKILL:macOS 安全绕过——专家攻击手册

AI 加载说明:macOS 安全绕过专家技术。涵盖 TCC 绕过、Gatekeeper 规避、SIP 限制、沙盒逃逸和权限滥用。基础模型会遗漏特定版本的绕过细节以及各项保护的交互影响。

0. 相关路由

深入探查之前,可考虑加载:

高级参考资料

在需要以下内容时,也请加载 TCC_BYPASS_MATRIX.md:

  • 按 macOS 版本划分的 TCC 绕过映射
  • 针对特定保护类型的技术(摄像头、麦克风、FDA、自动化)
  • MDM/配置描述文件滥用模式

1. TCC(透明度、许可与控制)概述

TCC 是 macOS 的权限框架,用于控制对敏感资源(摄像头、麦克风、联系人、完全磁盘访问等)的访问。

1.1 TCC 数据库位置
数据库路径控制内容保护措施
用户级~/Library/Application Support/com.apple.TCC/TCC.db每位用户的许可决定自 Catalina 起受 SIP 保护
系统级/Library/Application Support/com.apple.TCC/TCC.db全系统的许可决定受 SIP 保护
MDM 管理通过配置描述文件推送 PPPC(隐私偏好策略控制)设备管理
-- Query TCC database (requires FDA or SIP off)
sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db \
  "SELECT service, client, allowed FROM access;"
1.2 TCC 绕过类别
类别机制典型前提条件
利用 FDA 应用借助已获得完全磁盘访问权限的应用对 FDA 应用的程序包或插件目录具有写入权限
直接修改数据库编辑 TCC.db 以授予许可禁用 SIP 或具有 FDA 权限
继承权限子进程继承父进程的 TCC 授权在获得 FDA 授权的应用上下文中执行代码
滥用自动化使用 Apple Events/osascript 控制获得 TCC 授权的应用自动化权限(门槛低于直接 TCC 权限)
挂载技巧挂载包含已修改 TCC.db 的精心构造磁盘映像本地访问权限,适用于 Ventura 之前的版本
TCC 中的 SQL 注入构造格式错误的程序包 ID,触发 TCC 子系统中的 SQL 注入CVE-2023-32364 及类似漏洞
1.3 已知的 TCC 绕过模式

Terminal/iTerm 的 FDA 权限继承:Terminal.app 已获 FDA 授权 → 运行的任何命令都会继承 FDA 权限 → 读取任意文件。

# If Terminal has FDA, this reads protected files directly
cat ~/Library/Mail/V*/MailData/Envelope\ Index
cat ~/Library/Messages/chat.db

Finder 自动化:通过自动化控制 Finder(权限门槛较低),访问受保护位置中的文件。

tell application "Finder"
  set f to POSIX file "/Users/target/Library/Mail/V9/MailData/Envelope Index"
  duplicate f to desktop
end tell

向系统偏好设置/系统设置注入:通过写入进程的 Application Scripts 文件夹,向已拥有 TCC 权限的进程注入代码。

滥用 MDM 描述文件:PPPC 描述文件可以预先批准 TCC 权限。恶意 MDM 注册或 MDM 服务遭到入侵 → 推送 PPPC 负载。


2. Gatekeeper 绕过

Gatekeeper 会阻止未签名或未经公证的应用运行。其核心强制机制依赖 com.apple.quarantine 扩展属性。

2.1 移除隔离属性
# Check quarantine attribute
xattr -l /path/to/app
# Output: com.apple.quarantine: 0083;...

# Remove quarantine (requires write access)
xattr -d com.apple.quarantine /path/to/app
# Recursive for app bundles
xattr -rd com.apple.quarantine /path/to/MyApp.app
2.2 绕过技术
技术工作原理macOS 版本
使用 xattr -d 移除执行前移除隔离属性所有版本(需要本地访问权限)
绕过应用转移位于特定位置的应用会跳过转移Catalina 之前
会移除隔离属性的归档工具某些解压应用不会传递隔离属性因工具而异
已签名软件包中的未签名代码经过公证的应用软件包中包含未签名的嵌套辅助程序Ventura 之前(CVE-2022-42821)
Safari 自动解压并打开下载的 ZIP 自动解压,且应用在隔离属性完全应用前打开仅限 Safari,已修复
滥用 ACL可通过下载前设置的 ACL 阻止应用 com.apple.quarantine需要预先设置
磁盘映像(DMG)技巧从网络共享装载的 DMG 可能不会带有隔离属性网络共享环境
BOM(物料清单)绕过精心构造的 pkg 中的 BOM 会跳过对已解压文件应用隔离属性CVE-2022-22616
2.3 Gatekeeper 检查流程
App launched
│
├── com.apple.quarantine attribute present?
│   ├── No → execute (no Gatekeeper check)
│   └── Yes ↓
│
├── Code signature valid?
│   ├── No → block
│   └── Yes ↓
│
├── Notarized (stapled ticket or online check)?
│   ├── No → block (Catalina+)
│   └── Yes → execute
│
└── User override? (right-click → Open → confirm)
    └── Bypasses Gatekeeper once for this app

3. SIP(系统完整性保护)

SIP 会限制 root 修改受保护的系统位置、加载未签名的内核扩展,以及调试系统进程。

3.1 SIP 保护的位置
/System/
/usr/ (except /usr/local/)
/bin/
/sbin/
/var/ (selected subdirs)
/Applications/ (pre-installed Apple apps)
3.2 SIP 状态与配置
csrutil status              # Check SIP status
csrutil disable             # Recovery Mode only
csrutil enable --without fs # Partial disable (risky)
3.3 可绕过 SIP 的权利
权利效果
com.apple.rootless.install写入 SIP 保护的路径
com.apple.rootless.install.heritable子进程继承 SIP 绕过权限
com.apple.security.cs.allow-unsigned-executable-memory在内存中运行 JIT/未签名代码
com.apple.private.security.clear-library-validation加载未签名的库
3.4 历史上的 SIP 绕过漏洞
CVEmacOS技术
CVE-2021-30892 (Shrootless)Monterey 12.0.1 之前system_installd + 已签名 pkg 中的安装后脚本
CVE-2022-22583Monterey 12.2 之前packagekit + 操纵挂载点
CVE-2022-46689 (MacDirtyCow)Ventura 13.1 之前利用写时复制中的竞态条件覆盖 SIP 文件
CVE-2023-32369 (Migraine)Ventura 13.4 之前通过 systemmigrationd 绕过 Migration Assistant 的 TCC/SIP
CVE-2024-44243Sequoia 15.2 之前利用 StorageKit 守护进程

4. 沙盒逃逸

macOS 沙盒(App Sandbox,通过 sandbox-exec 或权利实现)会限制应用对文件系统、网络和 IPC 的访问。

4.1 Office 沙盒逃逸模式
向量描述
滥用打开/保存对话框用户通过对话框授予文件访问权限 → 宏读取或写入沙盒外的内容
~/Library/LaunchAgents/ 持久化某些沙盒配置文件允许写入 LaunchAgent plist
操纵登录项添加指向沙盒外载荷的登录项
利用共享容器多个应用共享同一个 App Group 容器
4.2 基于 IPC 的逃逸
IPC 机制逃逸向量
XPC 服务连接到客户端验证不足的特权 XPC 服务
Mach 端口获取特权任务端口的发送权限
Apple Events自动化未受沙盒限制的应用以执行操作
分布式通知向未受沙盒限制的辅助程序发送信号,使其执行载荷
剪贴板将载荷写入剪贴板,由未受沙盒限制的应用读取
4.3 浏览器沙盒
  • Chromium:多进程模型,渲染器受沙盒限制,浏览器进程不受限制
  • Safari:WebContent 进程受沙盒限制,Safari 父进程拥有更多权限
  • 漏洞利用链:渲染器 RCE → 沙盒逃逸(通过影响浏览器进程的 IPC 漏洞)→ 系统访问

5. 代码签名与权利

5.1 检查签名与权利
codesign -dv --verbose=4 /path/to/app       # Signature details
codesign -d --entitlements :- /path/to/app   # Dump entitlements
security cms -D -i /path/to/mobileprovision  # Provisioning profile

# Verify signature validity
codesign --verify --deep --strict /path/to/app
spctl --assess --type execute /path/to/app   # Gatekeeper assessment
5.2 利用 Entitlement 实现权限提升
Entitlement滥用场景
com.apple.security.cs.disable-library-validation将攻击者的 dylib 加载到具有相应 Entitlement 的进程中
com.apple.security.cs.allow-dyld-environment-variables注入 DYLD_INSERT_LIBRARIES
com.apple.security.get-task-allow附加调试器、注入代码
com.apple.security.cs.debugger调试任意进程
com.apple.private.apfs.revert-to-snapshot回滚 APFS 快照,绕过修改
5.3 绕过 Hardened Runtime

Hardened Runtime 会阻止:DYLD 环境变量、调试、未签名内存执行。绕过方法:

  • 查找会削弱 Hardened Runtime 的具有相应 Entitlement 的应用(disable-library-validation)
  • 利用具有 JIT Entitlement 的应用(浏览器、虚拟机)执行未签名代码
  • 利用遗留在生产环境中的、具有 get-task-allow Entitlement 的调试版本
5.4 绕过库验证

库验证可确保只加载由 Apple 或同一团队签名的 dylib。

# Find apps with library validation disabled
codesign -d --entitlements :- /Applications/*.app/Contents/MacOS/* 2>/dev/null | \
  grep -l "disable-library-validation"

6. 绕过后持久化

方法位置重启后仍然有效说明
LaunchAgent~/Library/LaunchAgents/是用户级别,登录时运行
LaunchDaemon/Library/LaunchDaemons/是root 级别,启动时运行
登录项~/Library/Application Support/com.apple.backgroundtaskmanagementagent/是可在系统设置中查看
Croncrontab -e是防御人员常常忽略
Dylib 劫持可写的 dylib 搜索路径是目标应用启动时触发
文件夹操作~/Library/Scripts/Folder Action Scripts/是文件夹事件触发

7. macOS 安全绕过决策树

Target is macOS endpoint
│
├── Need to execute untrusted binary?
│   ├── Quarantine attribute present?
│   │   ├── Yes → xattr -d com.apple.quarantine (§2.1)
│   │   └── No → execute directly
│   └── Gatekeeper still blocks?
│       ├── Signed but not notarized → right-click → Open override
│       └── Unsigned → embed in signed bundle or use archive tricks (§2.2)
│
├── Need access to TCC-protected resources?
│   ├── FDA-granted app available?
│   │   ├── Yes → exploit FDA app context (§1.3)
│   │   └── No ↓
│   ├── Automation permission obtainable?
│   │   ├── Yes → Apple Events to TCC-granted app (§1.3)
│   │   └── No ↓
│   ├── SIP disabled?
│   │   ├── Yes → direct TCC.db modification (§1.2)
│   │   └── No → check version-specific TCC bypass (→ TCC_BYPASS_MATRIX.md)
│   └── MDM present?
│       └── Compromised MDM → push PPPC profile (§1.3)
│
├── Need to bypass SIP?
│   ├── Check macOS version → historical SIP CVE? (§3.4)
│   ├── Find entitled Apple binary → piggyback SIP-bypass entitlement (§3.3)
│   └── Recovery Mode access? → csrutil disable (§3.2)
│
├── Need sandbox escape?
│   ├── Office macro context → dialog/LaunchAgent tricks (§4.1)
│   ├── XPC service with weak validation → IPC escape (§4.2)
│   └── Browser context → renderer → sandbox escape chain (§4.3)
│
├── Need to inject into signed process?
│   ├── disable-library-validation entitlement? → dylib injection
│   ├── allow-dyld-environment-variables? → DYLD_INSERT_LIBRARIES
│   ├── get-task-allow? → debugger attach
│   └── None → check macos-process-injection SKILL.md
│
└── Need persistence?
    └── Choose method by access level (§6)

8. 快速参考:工具命令

# Enumerate TCC permissions
tccutil reset All                              # Reset all TCC (admin)
sqlite3 TCC.db "SELECT * FROM access;"         # Read TCC DB

# Gatekeeper status
spctl --status                                 # Gatekeeper enabled?
spctl --assess -v /path/to/app                 # Check app assessment

# SIP status
csrutil status

# Find interesting entitlements across system
find /System/Applications /Applications -name "*.app" -exec sh -c \
  'codesign -d --entitlements :- "$1" 2>/dev/null | grep -q "disable-library-validation" && echo "$1"' _ {} \;

# List loaded kexts (kernel extensions)
kextstat | grep -v com.apple

# Sandbox profile inspection
sandbox-exec -p "(version 1)(allow default)" /bin/ls  # Test sandbox rules

评论

支持 Markdown