视频加载失败

搭建 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 + pwndbggit 主线动态调试,pwndbg 挂进 gdb 提供堆/栈可视化
pwntools4.14.0写 exploit 的 Python 库(含 checksec)
ROPgadget / ropperpip 安装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=noninteractive
ENV LANG=C.UTF-8
ENV 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.zip
RUN 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/ghidra
ENV PATH="${GHIDRA_INSTALL_DIR}/support:${PATH}"
# ------------------------------------------------------------------------------
# 4. 从本地 zip 包安装 Pwndbg(无任何 Git 代理,直连 GitHub)
# ------------------------------------------------------------------------------
COPY pwndbg.zip /tmp/pwndbg.zip
RUN 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 analyst
WORKDIR /home/analyst
COPY --chown=analyst:analyst hacktricks.zip /tmp/hacktricks.zip
COPY --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=1

build.sh(一键构建 + 自检)#

#!/usr/bin/env bash
# 一键构建 + 自检
# 用法: bash build.sh
set -euo pipefail
cd "$(dirname "$0")"
IMAGE="${IMAGE:-fuzz-lab}"
echo ">>> 构建镜像 $IMAGE(首次约 10~15 分钟,国内源)"
docker build -t "$IMAGE" .
echo
echo ">>> 构建完成,运行自检"
docker run --rm "$IMAGE" verify.sh
echo
echo ">>> 全部通过。下一步: 复制 .env.example 为 .env 填入 API 配置,然后 bash run_agent.sh"

后续如果添加了工具会继续更新一下,至于多智能体的设计,还在考虑中。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

搭建 AI Agent 驱动的二进制分析与 Fuzz Docker 镜像
https://fmout.site/posts/agent-fuzz-docker-image/
作者
远山
发布于
2026-09-09
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
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 与硬编码参数。
随机文章随机推荐
Profile Image of the Author
远山
Hello, I'm 远山.
公告
欢迎来到我的博客!
分类
标签
站点统计
文章
21
分类
6
标签
21
总字数
86,792
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.16.7
文章许可
CC BY-NC-SA 4.0
文章目录