jetnoir/poppy

GitHub: jetnoir/poppy

Poppy 是一个用于 macOS 守护进程和 XPC 服务的动态分析、可观测性及故障注入工具包,结合 Frida 插桩与 DTrace 探针帮助安全研究者发现系统服务中的安全缺陷。

Stars: 2 | Forks: 0

# Poppy — 用于 macOS 安全研究的动态插桩流水线 Poppy 是一个用于 macOS 守护进程和 XPC 服务的动态分析、可观测性及故障注入工具包。它结合了 Frida 插桩、DTrace 探针和自定义注入器,以提供守护进程行为的统一视图。 ## 为什么 对现代 macOS (arm64e) 守护进程进行静态分析面临着重大挑战: - PAC(指针认证码)可能会混淆静态调用图。 - Swift 和 Objective-C 的动态派发对传统的静态分析工具通常是不可见的。 动态分析可以观察运行时实际发生的情况: - 调用了哪些 XPC 处理程序。 - 哪些授权检查限制了特定操作。 - 特定输入触达了哪些代码路径。 - 错误输入在何处导致偏差或崩溃。 ## 项目结构 ``` poppy/ ├── agents/ # Frida JS agents (run inside target process) │ ├── xpc_observer.js — NSXPCListener and handler dispatch tracer │ ├── trust_boundary.js — CFGetTypeID, CFDictionaryGetValue, SecTask* tracer │ └── objc_probe.js — Selective Objective-C message probing ├── scripts/ # DTrace scripts │ ├── xpc_trace.d — Mach message and XPC dispatch tracer │ ├── entitlement.d — Entitlement check monitor │ └── crash_witness.d — Process exit and crash capturer ├── inject/ # Fault injectors (client side) │ ├── xpc_malform.py — Raw XPC message malformer │ └── nsxpc_fuzz.py — NSXPC-level type confusion fuzzer ├── analysers/ # Trace post-processing tools │ ├── anomaly.py — Detects deviations from baseline runs │ ├── coverage_diff.py — Basic-block coverage diffing │ └── entitlement_map.py — Correlates services with checked entitlements ├── runs/ # Directory for run logs (gitignored) └── poppy.py # Main orchestrator ``` ## 用法 ### 1. 观察守护进程 在指定的持续时间内捕获 XPC 流量和授权检查。 ``` sudo python3 poppy.py run --daemon tipsd --duration 60 ``` ### 2. 故障注入 在观察守护进程响应的同时,发送格式错误的 XPC 消息。 ``` sudo python3 poppy.py inject --daemon tipsd --variants all ``` ### 3. 分析结果 汇总跟踪轨迹以查找有趣的事件或异常。 ``` python3 analysers/anomaly.py runs/poppy_tipsd_*.jsonl ``` ### 4. 授权映射 构建映射图,记录多个运行过程中哪些守护进程检查了哪些授权。 ``` python3 analysers/entitlement_map.py runs/poppy_*.jsonl --md > entitlements.md ``` ## 理念 - **先观察后扰动:** 在注入故障之前先了解正常行为。 - **校准是关键:** 记录基线轨迹,以便与实验运行进行比较。 - **统一格式:** 所有内容均记录为 JSONL,便于下游工具轻松处理。 - **利用经过验证的工具:** 基于 Frida 和 DTrace 构建,确保可靠性。 ## 依赖 - **Frida:** `pip install frida-tools` - **PySide6:** (用于 GUI) `pip install PySide6` - **PyObjC:** (可选,用于增强的 XPC 模糊测试) `pip install pyobjc-core pyobjc-framework-Cocoa` - **DTrace:** macOS 内置(需要 root 权限,通常还需要禁用 SIP)。 ## 许可证 本项目基于 MIT 许可证授权 - 有关详细信息,请参阅 [LICENSE](LICENSE) 文件。
标签:API接口, arm64e, Docker支持, DTrace, Frida, macOS安全, Objective-C, PAC绕过, Swift, XPC服务, 中高交互蜜罐, 云资产清单, 代码覆盖, 异常检测, 恶意软件开发, 情报收集, 故障注入, 数据可视化, 权限检查, 模糊测试工具, 漏洞研究, 端点安全, 系统底层, 补丁管理, 运行时检测, 逆向工具, 逆向工程