fuzzingbrain/FuzzingBrain-Bench
GitHub: fuzzingbrain/FuzzingBrain-Bench
一个密封式 LLM 漏洞复现能力基准测试,使用确定性 oracle 评估模型在 68 个真实 zero-day 漏洞上的表现。
Stars: 2 | Forks: 2
# FuzzingBrain Bench
**一个面向 LLM 驱动的漏洞复现的能力阶梯基准测试,涵盖
40 个开源项目(C / C++ / Java)中的 68 个真实 zero-day 漏洞。**
每个挑战仅向 agent 提供 **fuzz harness**(测试目标)以及
存在漏洞版本的项目源代码——不提供补丁、不提供修复提交、不提供目标
代码行。agent 必须自行发现能在 sanitizer 下重新触发故障的输入。每一个评分都是一个**确定性 oracle**(不使用 LLM 作为裁判):
候选输入将在私有评分服务上的官方带有 sanitizer 插桩的 harness 中运行,
该服务仅返回关于能力阶梯的判定结果。
| 挑战 | 项目 | 语言 | 评分器 |
|---|---|---|---|
| **68** 个端到端 | **40** | C · C++ · Java | 确定性远程 oracle |
镜像或本仓库中的任何内容都不会透露漏洞的具体信息——挑战
均以中立的别名命名(`-NN`,例如 `avro-03`),且答案
(PoC、预期故障、修复后的构建版本)仅存在于远程 oracle 之后。
**浏览所有 68 项:** [`tools/sealed/CHALLENGES.md`](tools/sealed/CHALLENGES.md)。
## 快速开始
### 1. 设置
```
git clone https://github.com/OwenSanzas/FuzzingBrain-Bench
cd FuzzingBrain-Bench
python3 -m venv .venv && source .venv/bin/activate # recommended (and required on
# Debian/Ubuntu, PEP 668)
pip install -e . # needs Python ≥ 3.10 and Docker
# 将您的模型密钥放在 ./.env 中 — 每次运行自动加载,无需 export
cat > .env <<'EOF'
ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-...
GEMINI_API_KEY=...
DEEPSEEK_API_KEY=sk-...
EOF
fb-bench list # the 68 challenges (by alias)
fb-bench models # supported models + which keys are loaded
```
(`./.env` 会被自动读取;直接使用 `export ANTHROPIC_API_KEY=...` 也可以。)
`fb-bench run` 会拉取公开的挑战镜像,在
主机上驱动 agent 循环(调用你的模型 API),并根据远程 oracle 对候选输入进行评分。
仅需 Docker + 你的模型密钥——无需构建,无需答案。
### 2. 使用模型运行一个挑战
```
# Claude 系列(haiku 最便宜/最快;在更难的运行中替换为 opus/sonnet)
fb-bench run avro-03 --model claude-haiku-4-5
# GPT 系列
fb-bench run avro-03 --model gpt-5.5
# Gemini 系列
fb-bench run avro-03 --model gemini-3-pro-preview
# DeepSeek 系列(OpenAI 兼容端点;需要 DEEPSEEK_API_KEY)
fb-bench run avro-03 --model deepseek-v4-flash
```
模型:`claude-haiku-4-5` · `claude-sonnet-4-6` · `claude-opus-4-7` ·
`gpt-5.5` · `gpt-5.4` · `gpt-5` · `gemini-3-pro-preview` · `gemini-2.5-flash` ·
`deepseek-v4-pro` · `deepseek-v4-flash`
(任何目录 ID 均可通过 `--model` 使用;参见 `fb-bench models`)。
### 3. 使用模型运行整个语料库
```
# 一个模型运行所有 68 个挑战(可恢复:使用相同的 --exp 重新运行以跳过已完成的挑战)
python -m fbbench.sweep.orchestrator --models claude-haiku-4-5 --bugs all --exp run1
# 默认多模型阵容,所有挑战
python -m fbbench.sweep.orchestrator --models sweep --bugs all --exp sweep1
```
结果将存入 `runs////run-N/`(`score.json`、`episode.jsonl`、
`transcript.jsonl`、`cost.json`、精简后的 `traj.md`);同时会打印出
排行榜,并可通过 `--report-only --exp ` 重新汇总。
### 4. Agent 模式 (Codex) —— 单个挑战
Codex 分支通过相同的 bench MCP 服务器驱动 OpenAI 的 `codex exec` CLI。
**一次性 codex 设置** —— 该分支必须使用 **API 密钥**进行身份验证,而不是
ChatGPT 登录(ChatGPT 账户无法使用 `gpt-5.*-codex` 模型,运行
会失败并提示 `model is not supported when using Codex with a ChatGPT account`):
```
npm install -g @openai/codex # install the codex CLI (needs Node)
codex logout # drop any ChatGPT login
printenv OPENAI_API_KEY | codex login --with-api-key # authenticate with your API key
codex login status # should say "API key", not "ChatGPT account"
```
然后运行单个挑战:
```
python -m fbbench.sweep.codex one avro-03
```
### 5. Agent 模式 (Codex) —— 整个语料库
```
python -m fbbench.sweep.codex sweep --bugs all # batched, resumable
```
## 扫描模式:`full` 和 `delta-0…3`
提供给 agent 的上下文量决定了挑战的难度:
| 模式 | agent 可见的内容 | 轮次预算 | 运行环境 |
|---|---|---|---|
| **normal**(默认) | harness + 源代码 + 中立描述 | 100 | 公开镜像 |
| **full**(`--full-scan`) | 仅 harness + 源代码——**无描述**;从零开始寻找崩溃 | **100** | 公开镜像 |
| **delta-0 … delta-3** | 额外提供崩溃区域文件,并混入 **0/1/2/3** 个干扰文件 | **50** | 私有评估 harness |
`full` 是最难的公开模式——在任何 `fb-bench run` 或
编排器命令中添加 `--full-scan` 即可。`delta-N` 级别是**研究评估
协议**:它们将提示定位到崩溃区域文件(该文件源自
oracle 的答案),因此它们在维护者的私有 harness 中运行,而
不是针对密封的公开镜像。
## 能力阶梯
候选输入会根据从弱到强的五个嵌套层级进行评分:
| 层级 | 触发条件 |
|---|---|
| `reach` | 执行到达漏洞区域 |
| `crash` | sanitizer 构建版本在该输入上发生故障 |
| `differential` | 该输入在漏洞构建版本上引发故障,**且**在修复后的构建版本上正常运行 |
| `class` | 检测到的 sanitizer 故障类别与漏洞匹配 |
| `site` | 崩溃位置与漏洞匹配 |
并非每个层级都适用于所有漏洞——每个挑战都会声明其所需的层级集合。
## 其他参数
```
fb-bench run \
--model gpt-5.5 \
--full-scan \ # withhold the description (hard mode)
--max-turns 100 \ # turn budget (default 100 for full-scan; diff-scan uses 50)
--exp my-experiment \ # group runs under runs/my-experiment/...
--no-preserve-pocs \ # graded blobs are KEPT by default; pass this to drop them
--force-full # ignore early stops; spend the full budget
```
无需任何 LLM 即可对手工制作或外部 (AFL++ / libFuzzer / honggfuzz) 的 PoC 进行评分——该 oracle 与供应商无关:
```
fb-bench grade my-input.bin # -v for the evidence
```
## 工作原理(密封挑战)
每个挑战都是一个公开的、**无答案**的 Docker 镜像。agent 通过
MCP 服务器与其通信(`setup` / `read_file` / `list_directory` / `write_file` /
`exec` / `grade`);`grade()` 会将候选输入发送到持有
答案的远程 oracle,并仅返回判定结果。
```
docker.io/osanzas/fbbench-challenge-:latest # 68 public images
```
密封架构和评分服务器的源代码位于
[`tools/sealed/`](tools/sealed/) 和 [`tools/mcp-server/`](tools/mcp-server/);
任何人都可以审计确认镜像中未包含任何答案:
```
python tools/sealed/verify_sealed.py docker.io/osanzas/fbbench-challenge-avro-03:latest
```
## 本仓库包含的内容
```
bugs/// one challenge: fuzz harness + neutral metadata
(project, language, sanitizer, harness interface)
fbbench/ the runner / CLI engine + sweep + codex arm
tools/sealed/ challenge index, seal architecture, answer-free verifier
tools/mcp-server/ the MCP + remote grading server (Go source, auditable)
```
答案相关产物(PoC 输入、预期故障密钥、预构建二进制文件)**不**在
本仓库中——它们仅存在于远程评分 oracle 之后。
## 许可证
MIT。详见 `LICENSE`。
标签:MITM代理, 日志审计, 请求拦截, 逆向工具