1. 基本信息
| 项目 | 内容 |
|---|---|
| 名称 | aflpp-trailofbits-skills |
| 作者/维护者 | Trail of Bits(官方安全研究团队) |
| 来源链接 | https://github.com/trailofbits/skills/tree/main/plugins/testing-handbook-skills/skills/aflpp |
| 许可证 | CC-BY-SA-4.0(GitHub API,仓库级) |
| GitHub Stars | 6,420(仓库整体,GitHub API;合集仓库星数不代表本子技能个体热度,见第 6 章) |
| Forks | 555(GitHub API) |
| 最新版本 | 无正式 release 标签;本子技能所在路径最近一次提交 2026-06-05(GitHub API) |
| 安装方式 | /plugin install trailofbits/skills/plugins/testing-handbook-skills |
2. 功能介绍与亮点
AFL++ 是原版 AFL 的继任者,也是当前工业界使用最广泛的覆盖率引导模糊测试引擎之一。这份技能把 AFL++ 从安装到多核大规模运行的完整实践整理成一份可直接照抄的手册:
- 四种安装路径对照表:apt 包管理器、Docker Hub 镜像、从源码构建 Docker、纯源码编译,分别标注适用场景与支持的编译器版本,并给出一段可直接复制的宿主机/容器双模式包装脚本
- 系统级性能调优:
afl-system-config/afl-persistent-config提升执行速度的具体命令,同时明确标注这两个脚本需要 root 权限、会关闭系统安全特性,提示“不要在生产或开发环境执行,改用专用虚拟机” - 编译模式决策树:LTO/LLVM/GCC 三种插桩模式的取舍建议,以及与 ASan/UBSan 组合编译时的注意事项
- 环境变量实战清单:从“每次都该开”(如
AFL_TMPDIR)到“仅限特定场景”(AFL_FAST_CAL、CI 专用的AFL_EXIT_ON_TIME)分类整理,并逐条说明取舍理由,而非罗列官方文档里几十个变量 - 多核 campaign 全流程:主/从实例的启动命令、
afl-whatsup实时监控、批量停止方法 - CMPLOG/RedQueen 约束求解:介绍如何为目标插桩启用当前模糊测试领域最强的路径约束求解机制之一
- 标准输入/文件/命令行参数三种目标接入方式、性能调优对照表与 6 类常见故障排查表
3. 适用场景
所属分类:工程效率与代码质量(产出物是搭建并运行模糊测试环境这一具体工程实践,对应规则 B 问 4)。
适用于需要对生产级 C/C++ 代码库做多核并行、长时间模糊测试的工程师;已用 libFuzzer 起步但覆盖率遇到瓶颈、需要更丰富变异策略与并行吞吐的团队;需要对无法直接插桩的二进制目标做标准输入/命令行参数模糊测试的安全研究人员。
4. 跨 Agent 兼容性
- Claude Code:✅ 原生支持——以
.claude-plugin/plugin.json声明的插件形式安装,官方 README 以此为主要安装路径 - Codex:✅ 原生支持——官方 README 明确声明“Codex supports Claude plugin marketplaces directly”,并给出
codex plugin marketplace add trailofbits/skills专属安装命令;本技能目录下还带agents/openai.yaml,供 Codex 市场展示图标与品牌色 - OpenClaw:❓ 未验证——已抓取材料未点名提及
- Hermes Agent:❓ 未验证——已抓取材料未点名提及
5. 推荐理由
AFL++ 的官方文档体量庞大、分散在 wiki 与多篇博客中,新手常常卡在“装好了但不知道该开哪些环境变量、多核该怎么摆”。这份技能把安装、插桩编译、语料库管理、多核运行、CMPLOG 高级用法压缩成一份可按步骤照抄的手册,还给出了一张“哪些环境变量值得设、哪些该跳过”的实战对照表——这是官方文档里没有整理过的经验总结。提交记录显示 AFL++ 项目维护者 vanhauser-thc 提出的修复意见已被采纳合并进这份技能,内容准确性有上游一手背书。
6. 评分
| 维度 | 分数 | 说明 |
|---|---|---|
| 受欢迎程度 | 8 | 官方 Trail of Bits 出品;AFL++ 是模糊测试领域采用最广的工具之一;本子技能自 2026-01 上线以来单独收到 3 次专属修订提交(含 AFL++ 项目维护者 vanhauser-thc 的修复意见),区别于批量提交,反映持续的针对性打磨 |
| 可用性 | 8 | 提供 apt/Docker/源码三类安装路径与包装脚本,文档含决策树、环境变量取舍表、故障排查表;依赖 LLVM/Python/Rust 且对发行版与编译器版本有要求,比单文件编译的 libFuzzer 略复杂 |
| 安全性 | 9 | 见下方安全检查清单 |
安全检查清单:
| 检查项 | 结果 |
|---|---|
| ① Shell 命令执行范围 | 编译器、Docker 与 AFL++ 命令行工具的标准调用;afl-persistent-config 会关闭内核安全缓解特性且需 root 权限,技能文档明确标注该风险并建议在专用虚拟机中执行,未隐瞒 |
| ② 运行时联网外发 | 纯本地方法论与命令参考,除 Docker Hub 镜像拉取等说明性操作外无自动网络外发行为 |
| ③ API Key/凭据 | 不涉及任何凭据或密钥 |
| ④ 可疑指令 | 未发现 prompt injection 或混淆代码迹象 |
| ⑤ 作者信誉 | Trail of Bits 为知名安全研究公司,官方仓库出品,无造假迹象 |
| ⑥ License | CC-BY-SA-4.0,明确 |
| ⑦ 最近维护 | 所在仓库最近一次提交为 2026-08-03,活跃维护中 |
7. 跟同类 Skills 相比的优势
| 项目 | 定位 | 与本技能的差异 |
|---|---|---|
| libfuzzer(同插件) | LLVM 内置的进程内模糊测试引擎,单线程、配置极简,适合快速搭建第一个 fuzzer | 无需 Docker 或系统级调优即可跑起来,但缺少原生多核支持;本技能定位为“libFuzzer 遇到瓶颈后的进阶多核方案” |
| libafl(同插件) | 模块化 Rust 模糊测试库,用于构建自定义 fuzzer、支持非标准目标 | 面向需要定制变异器或研究级场景的高级用户,学习曲线更陡;本技能提供的是开箱即用的成熟工具而非构建框架 |
| cargo-fuzz(同插件) | Rust 项目事实标准的模糊测试工具,底层同样基于 libFuzzer | 专精 Rust 生态,通过 Cargo 一条命令即可运行;本技能面向 C/C++ 项目,且提供多核与二进制目标模糊测试等 cargo-fuzz 不覆盖的能力 |
| fuzzing-obstacles(同插件) | 针对 fuzzer 被 checksum、全局状态等障碍卡住这一具体问题的条件编译绕过手法 | 是已有模糊测试流程后遇到具体阻塞时用的进阶补丁技巧,不是完整的工具安装与运行手册 |
8. 用户评价
该技能目前在第三方平台尚无具名用户评价。
9. 其他补充
技能文档明确给出与同插件其他技能的引用关系:harness 编写引用 fuzz-harness-writing、sanitizer 配置引用 address-sanitizer、语料库策略引用 fuzzing-corpus,形成“写 harness → 选 AFL++ 或 libFuzzer → 配置 sanitizer → 管理语料库”的组合使用路径。
10. 安装使用方式
/plugin install trailofbits/skills/plugins/testing-handbook-skills
安装后无需重启,直接输入 /aflpp 即可触发;技能会引导确认目标代码可用 Clang/GCC 编译、协助选择安装路径(apt/Docker/源码)、生成宿主机与容器双模式的包装脚本,并给出对应的编译、语料库准备与多核运行命令。
11. 注意事项
afl-persistent-config等系统级调优命令会关闭内核安全缓解特性,官方与本技能均建议只在专用虚拟机中执行,不要用于生产或日常开发环境;- 完整功能依赖 LLVM、Python、Rust 等多项依赖,且对 Ubuntu/Debian 版本与编译器版本有明确要求,跨发行版使用前需核对兼容表;
- 仅覆盖 C/C++ 目标(通过 Clang/GCC 插桩),不含 Python(Atheris)、Ruby(Ruzzy)等其他语言的模糊测试指南;
- 属于合集仓库
trailofbits/skills下testing-handbook-skills插件的 15 个子技能之一,安装插件会连带装入其余 14 个子技能。