关于 analyzing-macos-binaries
用于检查 macOS 应用和 Mach-O 二进制文件的安全分析技能,面向逆向分析人员。内容涵盖代码结构、签名与权限,并聚焦 XPC、TCC 和动态库加载等 macOS 特有风险面。
主要功能
- 01Mach-O 与应用包初步分析
- 02Objective-C 和 Swift 分析
- 03签名与权限审查
- 04XPC 与特权辅助程序审计
- 05TCC 与动态库攻击面审查
- 06使用 Frida 和 lldb 动态分析
适用场景
- 01检查 macOS 应用或框架
- 02审查权限与 Gatekeeper 状态
- 03检查 XPC 服务的授权缺陷
- 04排查动态库加载路径劫持
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ trilwu/ secskills --skill analyzing-macos-binaries安装后在 Claude Code 中输入/analyzing-macos-binaries确认已加载。
详细介绍
分析 macOS 二进制文件
macOS 逆向工程涉及 Mach-O 格式和特定的安全模型:代码签名、权利、沙盒、TCC 隐私保护,以及进程间的 XPC。二进制文件会告诉你代码的作用;权利和加载路径则会告诉你它获准执行哪些操作,以及攻击者可能从哪里入手。两者都要看——macOS 上的大多数安全问题都藏在两者之间的落差中。
适用场景
- 分析 macOS 上的
.app程序包,或 Mach-O 可执行文件、dylib、framework - 查看权利、强化运行时标记、公证状态和 Gatekeeper 隔离状态
- 审计 XPC 服务或特权辅助程序是否存在授权漏洞
- 排查通过
@rpath和弱 dylib 实施的 dylib 劫持/代理 - 分析 TCC 隐私暴露和沙盒逃逸攻击面
不适用场景
- iOS 应用——IPA 解密、FairPlay(
cryptid=1)、App Store 二进制文件——请参阅analyzing-ios-binaries。Mach-O 格式相同,但工具链和 DRM 不同。 - 没有 macOS 特定因素的非 Mach-O 或跨平台初步分析——请参阅
analyzing-binaries。 - 将内存破坏崩溃转化为漏洞利用——请参阅
exploiting-memory-corruption。 - 在可读取之前已被加壳/加密的 Mach-O 文件——请参阅
unpacking-protected-binaries。
初步分析二进制文件和程序包
- 拆分通用二进制文件。 macOS 提供 fat 二进制文件(x86_64 + arm64);使用
lipo -thin(或用lipo -archs列出架构),让工具只处理一个切片。 - 读取 Mach-O 文件。 用
otool -l查看加载命令,用otool -L查看链接的 dylib 及其路径,用nm查看符号。留意后续分析中重要的加载命令:LC_RPATH、LC_LOAD_DYLIB/LC_LOAD_WEAK_DYLIB,以及代码签名。 - 检查程序包。
Contents/MacOS(二进制文件)、Info.plist(标识符、URL 方案)、_CodeSignature、内嵌的Frameworks/,以及其中的XPCServices/。程序包布局就是分析线索图。
还原 Objective-C 和 Swift
- Objective-C 保留了丰富的运行时元数据:
class-dump(或dsdump)可以直接从二进制文件还原类、方法和属性声明。这是了解应用结构最快的方法。 - Swift 更难分析——名称经过修饰,元数据也没那么丰富。对符号运行
swift-demangle以获得可读名称;与 Objective-C 相比,你可能更需要依赖反编译器(Hopper、Ghidra、IDA)。 - 在选择分析方法前,先确定主要使用的语言;如果
class-dump对 Swift 二进制文件几乎没有输出,这是正常情况,并不代表失败。
代码签名、权利和 Gatekeeper
macOS 特有的权限控制就在这里:
codesign -dvvv --entitlements :- <binary>会输出签名和权利——操作系统授予的能力。值得重点查看的权利包括com.apple.security.get-task-allow(允许调试)、禁用库验证的设置,以及私有 TCC 权利。- 强化运行时标记会限制代码注入和调试;注意这些标记是否启用,以及库验证是否已禁用(这会允许加载未签名的 dylib,与劫持问题直接相关)。
- 公证和 Gatekeeper。 下载的文件带有
com.apple.quarantine扩展属性;Gatekeeper 会在首次运行时检查公证状态。分析文件是否会执行以及用户收到何种警告时,应了解隔离和公证状态。
macOS 特有的漏洞面
- Dylib 劫持/代理。 如果二进制文件从解析到可写位置的
@rpath加载 dylib,或者缺少LC_LOAD_WEAK_DYLIB,攻击者就能放入恶意 dylib,并在应用的上下文中执行代码——继承其授权。枚举加载路径,并检查哪些路径可由攻击者写入且未受库验证保护。 - XPC 服务和特权辅助程序。 XPC 是应用与其辅助程序(通常是
SMJobBless根辅助程序)之间基于 Mach 的 IPC。典型漏洞是辅助程序通过 PID 授权客户端——这种方式存在竞态且可被伪造——而不是通过audit_token。追踪服务如何验证调用方,以及它会执行什么特权操作;验证薄弱会导致本地权限提升。 - TCC 隐私控制。 TCC 控制对摄像头、麦克风、文件和自动化功能的访问。检查应用拥有哪些授权,以及它是否可能被诱使充当低权限进程的混淆代理,或者可注入的 dylib 是否会继承其 TCC 授权。
- URL scheme 和
Info.plist处理程序会将应用注册为其他应用和 Web 内容的输入处理程序——这是一个不可信输入入口。
动态分析
Frida 可附加到 macOS 进程进行运行时 Hook;lldb 用于调试(受 get-task-allow/SIP 限制);在 SIP 允许的情况下,dtrace 可追踪系统调用和库调用。使用这些工具实时监视 XPC 消息和 dylib 加载,而不是仅凭二进制文件推断。
应拒绝的合理化说辞
- “它经过签名和公证,所以是安全的。” 签名证明来源,不代表安全,也无法说明是否存在 dylib 劫持路径,或 XPC 辅助程序是否信任调用方的 PID。请检查授权和加载路径。
- “class-dump 几乎没有返回结果,二进制文件已被剥离。” 这是 Swift 二进制文件的常见特征。请改用
swift-demangle和反编译器,而不是断定无内容可查。 - “辅助程序会检查客户端 PID,这就是身份验证。” PID 检查存在竞态且可被伪造。只有基于
audit_token的验证才可靠;发现 PID 检查本身就是漏洞。 - “库验证会阻止恶意 dylib。” 只有启用库验证时才会如此。在认定加载受保护之前,请检查是否存在禁用库验证的授权,以及强化运行时的状态。
- “这不过是 Mac 上的 iOS 进程。” DRM、工具链和安全模型都不同。对于 FairPlay IPA,请使用
analyzing-ios-binaries;对于 macOS 应用及其 XPC/TCC/dylib 攻击面,请使用此技能。
参考资料
analyzing-ios-binaries— iOS IPA、FairPlay 和移动工具链analyzing-binaries— 通用 Mach-O 初步分析和反编译技术exploiting-memory-corruption— 利用在此发现的原生漏洞unpacking-protected-binaries— Mach-O 经过打包/加密时使用
评论
支持 Markdown