安全与风控
macOS 端点授权测试中绕过 TCC…
在获得授权的红队或渗透测试中,针对 macOS 端点绕过 TCC、Gatekeeper、SIP、沙箱、代码签名或基于 entitlement 的保护时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
macOS 端点授权测试中绕过 TCC、通用
解决思路
- 先按需加载相关技能:需要 dylib 注入、XPC 利用或 Electron 滥用时加载 macos-process-injection;需要 SUID、cron、可写路径等 Unix 层提权时加载 linux-privilege-escalation;需要共享的 Unix 安全绕过概念时加载 linux-security-bypass;需要按 macOS 版本映射 TCC 绕过、按保护类型(Camera、Microphone、FDA、Automation)选择技术或滥用 MDM/配置描述文件时加载 TCC_BYPASS_MATRIX.md。
- 理解 TCC 数据库位置:用户级在 ~/Library/Application Support/com.apple.TCC/TCC.db(自 Catalina 起受 SIP 保护),系统级在 /Library/Application Support/com.apple.TCC/TCC.db(受 SIP 保护),MDM 管理通过配置描述文件推送 PPPC。
- 在拥有 FDA 或关闭 SIP 时查询 TCC 数据库:sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db "SELECT service, client, allowed FROM access;"。
- 按类别选择 TCC 绕过:利用已获 FDA 的应用(需对其 bundle 或插件目录有写权限)、直接修改 TCC.db(需关闭 SIP 或拥有 FDA)、继承权限(在已获 FDA 的应用上下文中执行代码)、自动化滥用(用 Apple Events/osascript 控制已授权应用,门槛低于直接 TCC)、挂载技巧(挂载含修改后 TCC.db 的构造磁盘镜像,需本地访问且 Ventura 之前)、TCC 中的 SQL 注入(构造畸形 bundle ID,如 CVE-2023-32364)。
- 利用 Terminal/iTerm 的 FDA 继承:若 Terminal.app 已获 FDA,其运行的任何命令都继承 FDA,可直接读取受保护文件,如 cat ~/Library/Mail/V*/MailData/Envelope\ Index 和 cat ~/Library/Messages/chat.db。
- 利用 Finder 自动化:通过 AppleScript 自动化 Finder(权限门槛较低)访问受保护位置的文件,例如 tell application "Finder" 将 /Users/target/Library/Mail/V9/MailData/Envelope Index 复制到桌面。
- 向已拥有 TCC 权限的进程注入:通过写入其 Application Scripts 文件夹,注入 System Preferences / System Settings 等进程。
- 滥用 MDM 描述文件:PPPC 描述文件可预先批准 TCC 权限,通过恶意 MDM 注册或攻陷 MDM 服务器推送 PPPC 载荷。
- 绕过 Gatekeeper:先检查 xattr -l /path/to/app 查看 com.apple.quarantine 属性,再用 xattr -d com.apple.quarantine /path/to/app 移除,应用包用 xattr -rd com.apple.quarantine /path/to/MyApp.app 递归移除。
- 按版本选择 Gatekeeper 绕过技术:xattr -d 移除隔离属性(所有版本,需本地访问)、应用 translocation 绕过(Catalina 之前)、不传播隔离属性的解压工具(因工具而异)、已签名包中嵌入未签名 helper(Ventura 之前,CVE-2022-42821)、Safari 自动解压并打开(Safari 特有,已修补)、下载前用 ACL 阻止 com.apple.quarantine(需预先布置)、从网络共享挂载的 DMG 可能不带隔离属性、构造 pkg 中的 BOM 跳过隔离(CVE-2022-22616)。
- 理解 Gatekeeper 检查流程:无 com.apple.quarantine 属性则直接执行;有则检查代码签名,无效则阻止;有效则检查是否公证(Catalina+ 未公证则阻止);用户可通过右键→打开→确认一次性绕过。
- 了解 SIP 保护位置:/System/、/usr/(除 /usr/local/)、/bin/、/sbin/、/var/(部分子目录)、/Applications/(预装 Apple 应用)。
- 检查与配置 SIP:csrutil status 查看状态,csrutil disable 仅在恢复模式可用,csrutil enable --without fs 部分禁用(有风险)。
- 利用可绕过 SIP 的 entitlement: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 加载未签名库。
- 参考历史 SIP 绕过:CVE-2021-30892(Shrootless,Monterey 12.0.1 前,system_installd + 已签名 pkg 的安装后脚本)、CVE-2022-22583(Monterey 12.2 前,packagekit + 挂载点操纵)、CVE-2022-46689(MacDirtyCow,Ventura 13.1 前,写时复制竞态覆盖 SIP 文件)、CVE-2023-32369(Migraine,Ventura 13.4 前,通过 systemmigrationd 的迁移助手 TCC/SIP 绕过)、CVE-2024-44243(Sequoia 15.2 前,StorageKit 守护进程利用)。
- 沙箱逃逸(Office 场景):滥用打开/保存对话框(用户授权后宏可越权读写)、写入 ~/Library/LaunchAgents/ 持久化、操纵登录项指向沙箱外载荷、利用共享 App Group 容器。
- 沙箱逃逸(IPC 场景):连接客户端校验不足的特权 XPC 服务、获取特权任务端口的发送权、用 Apple Events 自动化非沙箱应用、用分布式通知触发非沙箱 helper 执行载荷、通过剪贴板让非沙箱应用消费载荷。
- 浏览器沙箱逃逸:Chromium 渲染进程被沙箱、浏览器进程未沙箱;Safari WebContent 进程被沙箱、父进程权限更高;利用链为渲染进程 RCE → 通过 IPC 漏洞逃逸到浏览器进程 → 系统访问。
- 检查签名与 entitlement:codesign -dv --verbose=4 /path/to/app 查看签名详情,codesign -d --entitlements :- /path/to/app 导出 entitlement,security cms -D -i /path/to/mobileprovision 查看描述文件,codesign --verify --deep --strict /path/to/app 验证签名,spctl --assess --type execute /path/to/app 做 Gatekeeper 评估。
- 滥用 entitlement 提权:com.apple.security.cs.disable-library-validation 可向有权限进程加载攻击者 dylib,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 快照绕过修改。
- 绕过 Hardened Runtime:寻找削弱 Hardened Runtime 的已授权应用(disable-library-validation)、利用有 JIT 权限的应用(浏览器、虚拟机)执行未签名代码、使用遗留在生产环境中的 get-task-allow 调试构建。
- 绕过 Library Validation:用 codesign -d --entitlements :- /Applications/*.app/Contents/MacOS/* 2>/dev/null | grep -l "disable-library-validation" 查找禁用库验证的应用。
- 选择持久化方式:LaunchAgent 放 ~/Library/LaunchAgents/(用户级、登录时运行、重启存活)、LaunchDaemon 放 /Library/LaunchDaemons/(root 级、开机运行、重启存活)、登录项放 ~/Library/Application Support/com.apple.backgroundtaskmanagementagent/(重启存活、在系统设置可见)、cron 用 crontab -e(重启存活、常被防御者忽视)、dylib 劫持(可写 dylib 搜索路径、目标应用启动时触发)、文件夹操作放 ~/Library/Scripts/Folder Action Scripts/(文件夹事件触发)。
- 按决策树执行:需要执行不可信二进制时先查隔离属性并移除,仍被 Gatekeeper 阻止则用右键打开或嵌入已签名包/压缩包技巧;需要访问 TCC 资源时优先利用 FDA 应用上下文,其次 Apple Events 自动化,再考虑关闭 SIP 直接改 TCC.db,否则查版本特定绕过或攻陷 MDM 推送 PPPC;需要绕过 SIP 时查版本对应 CVE、寻找带 SIP 绕过 entitlement 的 Apple 二进制、或恢复模式下 csrutil disable;需要沙箱逃逸时按 Office 宏、弱校验 XPC、浏览器利用链分别处理;需要注入已签名进程时依次检查 disable-library-validation、allow-dyld-environment-variables、get-task-allow,都没有则参考 macos-process-injection;需要持久化时按访问级别选择方法。
- 使用快速参考命令:tccutil reset All 重置所有 TCC(需管理员),sqlite3 TCC.db "SELECT * FROM access;" 读取 TCC 数据库,spctl --status 查看 Gatekeeper 是否启用,spctl --assess -v /path/to/app 检查应用评估,csrutil status 查看 SIP,用 find /System/Applications /Applications -name "*.app" -exec sh -c 'codesign -d --entitlements :- "$1" 2>/dev/null | grep -q "disable-library-validation" && echo "$1"' _ {} \; 查找有 disable-library-validation 的应用,kextstat | grep -v com.apple 列出非 Apple 内核扩展,sandbox-exec -p "(version 1)(allow default)" /bin/ls 测试沙箱规则。
适用边界 · 注意事项
- 仅在获得授权的红队或渗透测试场景中使用,禁止未授权攻击。
- 部分技术依赖特定 macOS 版本或已修补的 CVE,在较新系统上可能无效。
- 部分绕过需要本地访问、关闭 SIP、FDA 权限或恢复模式,条件不满足时不可用。