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服务, 中高交互蜜罐, 云资产清单, 代码覆盖, 异常检测, 恶意软件开发, 情报收集, 故障注入, 数据可视化, 权限检查, 模糊测试工具, 漏洞研究, 端点安全, 系统底层, 补丁管理, 运行时检测, 逆向工具, 逆向工程