搭建 AI Agent 驱动的二进制分析与 Fuzz Docker 镜像
1235 字
6 分钟
搭建 AI Agent 驱动的二进制分析与 Fuzz Docker 镜像
背景
最近学了 afl++,想搭建一个多智能体的自动化 fuzz 加上 gdb 调试的框架,结果发现没有合适的 docker 工具,就想着整合一个 docker 镜像,所以做一下记录。
工具列表
暂时计划的工具列表如下:
| 工具 | 版本 | 用途 |
|---|---|---|
| AFL++ | apt 安装 | fuzzing 主力,配 afl-clang-fast 插桩编译器 |
| Ghidra Headless | 反编译 | 静态分析/逆向;支持 Java/Python 脚本 (analyzeHeadless),方便批量导出 Pseudo-C |
| gdb + pwndbg | git 主线 | 动态调试,pwndbg 挂进 gdb 提供堆/栈可视化 |
| pwntools | 4.14.0 | 写 exploit 的 Python 库(含 checksec) |
| ROPgadget / ropper | pip 安装 | ROP 链 gadget 搜索 |
编译工具链:
- gcc / clang / lld / llvm(build-essential 全套),支持
-fsanitize=address和-fsanitize=fuzzer
基础系统工具:
- file、binutils(objdump/readelf 等)、strace/ltrace(系统调用跟踪)、tmux(长时 fuzz 后台)、ripgrep、jq、curl/wget、git、python3-pip、nodejs/npm
Agent 工具:
- claude-code 2.1.98,宿主机通过
docker exec调它干活
本地知识库(/home/analyst/knowledges/,约定 grep 本地、不联网):
- hacktricks(综合利用技术)、how2heap(堆利用代码全集)
总大小约 2.5GB。
其他需要注意的小点:需要做一下免密 sudo 的设置,ubuntu 需要换一下国内的下载源。
Dockerfile
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractiveENV LANG=C.UTF-8ENV LC_ALL=C.UTF-8
# ------------------------------------------------------------------------------# 1. 替换清华镜像源并安装基础编译、Java 与系统工具链# ------------------------------------------------------------------------------RUN sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list && \ sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
RUN apt-get update && apt-get install -y \ build-essential gcc g++ clang lld llvm \ afl++ \ gdb \ file binutils strace ltrace tmux ripgrep jq curl wget git unzip \ python3 python3-pip python3-dev \ nodejs npm \ openjdk-17-jdk openjdk-17-jre \ cmake pkg-config libssl-dev libffi-dev libgmp-dev sudo \ && rm -rf /var/lib/apt/lists/*
# 配置 pip 与 npm 国内镜像(仅加快 PyPI/NPM 包下载)RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple && \ npm config set registry https://registry.npmmirror.com
# ------------------------------------------------------------------------------# 2. 安装 Python 工具库与 Claude-Code Agent# ------------------------------------------------------------------------------RUN pip3 install --progress-bar on \ pwntools==4.14.0 \ ROPgadget \ ropper
RUN npm install -g --loglevel info @anthropic-ai/claude-code@2.1.98
# ------------------------------------------------------------------------------# 3. 从本地压缩包安装 Ghidra Headless# ------------------------------------------------------------------------------COPY ghidra.zip /tmp/ghidra.zipRUN unzip -q /tmp/ghidra.zip -d /opt && \ mv /opt/ghidra_11.1.2_PUBLIC /opt/ghidra && \ rm /tmp/ghidra.zip
ENV GHIDRA_INSTALL_DIR=/opt/ghidraENV PATH="${GHIDRA_INSTALL_DIR}/support:${PATH}"
# ------------------------------------------------------------------------------# 4. 从本地 zip 包安装 Pwndbg(无任何 Git 代理,直连 GitHub)# ------------------------------------------------------------------------------COPY pwndbg.zip /tmp/pwndbg.zipRUN mkdir -p /opt/pwndbg && \ unzip -q /tmp/pwndbg.zip -d /opt/pwndbg && \ rm /tmp/pwndbg.zip && \ if [ -d "/opt/pwndbg/pwndbg" ]; then mv /opt/pwndbg/pwndbg/* /opt/pwndbg/ 2>/dev/null || true; fi && \ if [ -d "/opt/pwndbg/pwndbg-dev" ]; then mv /opt/pwndbg/pwndbg-dev/* /opt/pwndbg/ 2>/dev/null || true; fi && \ cd /opt/pwndbg && \ ./setup.sh
# ------------------------------------------------------------------------------# 5. 创建无密码 analyst 用户并解压离线知识库# ------------------------------------------------------------------------------RUN useradd -m -s /bin/bash analyst && \ echo "analyst ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/analyst && \ chmod 0440 /etc/sudoers.d/analyst
USER analystWORKDIR /home/analyst
COPY --chown=analyst:analyst hacktricks.zip /tmp/hacktricks.zipCOPY --chown=analyst:analyst how2heap.zip /tmp/how2heap.zip
RUN mkdir -p /home/analyst/knowledges && \ unzip -q /tmp/hacktricks.zip -d /home/analyst/knowledges/ && \ if [ -d "/home/analyst/knowledges/hacktricks-master" ]; then mv /home/analyst/knowledges/hacktricks-master /home/analyst/knowledges/hacktricks; fi && \ unzip -q /tmp/how2heap.zip -d /home/analyst/knowledges/ && \ if [ -d "/home/analyst/knowledges/how2heap-master" ]; then mv /home/analyst/knowledges/how2heap-master /home/analyst/knowledges/how2heap; fi && \ rm /tmp/*.zip
WORKDIR /workspace
CMD ["/bin/bash"]镜像仓库里还有几个配套文件:demo/vuln_demo.c、demo/fuzz_target.c 两个练手靶标的源码和 verify.sh 自检脚本,篇幅所限不贴出。
AGENTS.md(容器内环境简报)
# 环境介绍* 你在 Ubuntu 24.04 二进制安全分析容器中,当前用户 analyst(非 root),需要 root 权限时用 sudo(已免密)* 当前目录 /home/analyst/workspace 是工作空间:exploit 脚本、扫描输出、日志都放这里,宿主机会直接读取该目录
# 工具清单* 静态分析:r2(radare2,已装 r2ghidra 插件) * r2 -q -A -c "pdf @ main" ./bin # 快速反汇编 * r2 -q -A -c "pdg @ sym.main" ./bin # Ghidra 质量反编译(超 50 行写入文件) * r2 -q -A -c "ii; iz" ./bin # 导入表 / 字符串* 动态调试:gdb + pwndbg(非交互用 batch 模式:gdb -batch -ex 'b main' -ex run -ex 'info registers' -ex quit ./bin)* fuzz:AFL++(afl-clang-fast 插桩编译目标)、clang -fsanitize=fuzzer,address(libFuzzer)* exploit:pwntools(含 checksec)、ROPgadget、ropper* 编译:gcc / clang(ASan:-fsanitize=address)
# 本地知识库(先 grep 再动手,不要联网)* /home/analyst/knowledges/hacktricks # 综合利用技术,二进制在 binary-exploitation 目录* /home/analyst/knowledges/how2heap # 堆利用技术代码全集,代码即文档* /home/analyst/knowledges/CTF-pwn-tips # pwn 常用技巧速查
# 练手靶标* /home/analyst/targets/vuln_demo # 栈溢出 demo(无保护,源码同目录 vuln_demo.c)* /home/analyst/targets/fuzz_target # AFL++ 插桩的崩溃 demo(源码 fuzz_target.c)
# 长时任务约定(重要)* fuzzing 是小时级任务,禁止前台等待。必须放 tmux 后台: tmux new-session -d -s fuzz-1 'AFL_SKIP_CPUFREQ=1 afl-fuzz -i seeds -o out -- ./target'* 启动后立即返回结论:"fuzzer 在 tmux 会话 fuzz-1,进度文件 out/default/fuzzer_stats"* 后续只读取 fuzzer_stats 和 out/default/crashes/ 判断进度与产出,不要 attach 干等
# 输出落盘* 反编译结果、长输出写入文件再引用,不要整段贴进结论* 结论只讲确认的事实与证据位置(文件路径、寄存器、崩溃地址)
# AFL++ 常用环境变量(容器内直接带,不要问为什么)AFL_SKIP_CPUFREQ=1 AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES=1build.sh(一键构建 + 自检)
#!/usr/bin/env bash# 一键构建 + 自检# 用法: bash build.shset -euo pipefailcd "$(dirname "$0")"
IMAGE="${IMAGE:-fuzz-lab}"
echo ">>> 构建镜像 $IMAGE(首次约 10~15 分钟,国内源)"docker build -t "$IMAGE" .
echoecho ">>> 构建完成,运行自检"docker run --rm "$IMAGE" verify.sh
echoecho ">>> 全部通过。下一步: 复制 .env.example 为 .env 填入 API 配置,然后 bash run_agent.sh"后续如果添加了工具会继续更新一下,至于多智能体的设计,还在考虑中。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
搭建 AI Agent 驱动的二进制分析与 Fuzz Docker 镜像
https://fmout.site/posts/agent-fuzz-docker-image/AI Agent 审计引擎选型实测:Qwen3Guard 与 AgentDoG 小模型
【论文阅读】VIPER-MCP: Detecting and Exploiting Vulnerabilities in Model Context Protocol Servers
相关文章智能推荐
1
【论文阅读】Sleuth: A Switchable Dual-Mode Fuzzer to Investigate Bug Impacts Following a Single PoC
论文阅读ISSTA 2024 论文,Sleuth 以单个 PoC 为起点自动挖掘同一漏洞的多种 Bug Impact:Crash Summary 指纹、MRG 记忆关联图插桩,配合监控器驱动的"深度/广度"双模式动态切换——86% 的 CVE 中发现新 Impact,总计 856 个。
2
【论文阅读】Make Agent Defeat Agent: Automatic Detection of Taint-Style Vulnerabilities in LLM-based Agents
论文阅读复旦与 UC Davis 合作提出的 AgentFuzz——首个面向 LLM Agent 污点型漏洞的定向灰盒模糊测试框架,用 LLM 生成功能特定种子、以语义+距离+惩罚三维反馈调度、靠 concolic 执行解约束变异,在 20 个热门开源 Agent 中发现 34 个 0-day(精度 100%),获 23 个 CVE。
3
【论文阅读】Locus: Agentic Predicate Synthesis for Directed Fuzzing
论文阅读ICSE 2026 论文,Locus 结合 LLM Agent 与符号执行,在程序任意中间位置合成捕获执行进度的谓词,为定向模糊测试提供语义里程碑:定向 Fuzzer 平均加速 70.3×,最高 214.2×,并挖出 9 个未修复的零日漏洞。
4
pwn.college Fuzz Dojo 实战(二):Introduction to Fuzzing 挑战 5-7
安全测试Fuzz Dojo 实战第二部分(挑战 5-7):沿调用树向上替换高层 API 提升 bzip2 覆盖率、为 bzip2_decompress_target 构造种子语料库、为 avahi 编写新的 Fuzz Driver,并通过 copy_queries 参数打开一整块未被覆盖的代码。
5
pwn.college Fuzz Dojo 实战(一):Introduction to Fuzzing 挑战 1-4
安全测试pwn.college Fuzz Dojo Introduction to Fuzzing 部分实战记录(第一部分,挑战 1-4):在 OSS-Fuzz + libFuzzer 环境中定位 minizip 的 Fuzz Harness、清空函数体验证覆盖率归零、修复 harness 逻辑 Bug 与硬编码参数。
随机文章随机推荐









京公网安备11011402057358号