Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
FuzzingBrain-Bench — A benchmark for LLM-driven bug discovery: 77 challenges across 43 open-source projects (C/C++/Java). | Kitploit
工具/GitHubGitHub/fuzzingbrain/fuzzingbrain-bench
Dynamic Analysis (Sandboxing)Vulnerability AnalysisFuzzingLearning & EducationAI SecurityLabs & Practice
GitHubfuzzingbrain/fuzzingbrain-bench

FuzzingBrain-Bench

A benchmark for LLM-driven bug discovery: 77 challenges across 43 open-source projects (C/C++/Java).

查看仓库
535616天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

FuzzingBrain Bench

一个用于在 43 个开源项目(C / C++ / Java)中的 77 个真实零日漏洞上,对 LLM 驱动的漏洞复现进行基准测试的平台。

每个挑战只给智能体提供模糊测试 harness(目标)以及漏洞版本的项目源码——没有补丁、没有修复提交、没有目标行。智能体必须自行发现一个能够在 sanitizer 下重新触发故障的输入。每个评分都是确定性的(没有 LLM 作为裁判),并且在镜像内、离线完成:候选输入会通过挑战容器中内置的官方 sanitizer 插桩 harness 运行,并根据智能体触发的不同崩溃进行评分。所有操作都在本机完成,无需启动任何服务。

挑战项目语言评分器
77 个端到端43C · C++ · Java确定性——镜像内、离线

镜像或本仓库中的任何内容都不会泄露漏洞信息——挑战以中性别名命名(<project>-NN,例如 avro-03),答案密钥(PoC、预期故障、修复构建)也不在其中:它们由维护者保管。 浏览全部 77 个: tools/sealed/CHALLENGES.md。


快速开始

1. 环境搭建

root@kitploit:~
git clone https://github.com/fuzzingbrain/FuzzingBrain-Bench
cd FuzzingBrain-Bench

python3 -m venv .venv && source .venv/bin/activate   # 推荐(在 Debian/Ubuntu 上必需,PEP 668)
pip install -e .                              # 需要 Python ≥ 3.10 和 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                                 # 77 个挑战(按别名)
fb-bench models                               # 支持的模型 + 已加载的密钥

(./.env 会被自动读取;直接使用 export ANTHROPIC_API_KEY=... 也可以。)

在每个新 shell 中重新执行 source .venv/bin/activate。或者跳过 venv,使用 pip install --break-system-packages -e .(不推荐)。

fb-bench run 会拉取公开的挑战镜像,在宿主机上驱动智能体循环(调用你的模型 API),并在该镜像内部对每个候选输入进行评分——无需网络,无需访问任何外部服务。只需要 Docker 和你的模型密钥即可,运行会统计智能体找到的不同崩溃——崩溃的身份由其 sanitizer 故障类型加上顶部栈帧决定,因此同一故障被触发二十次只计一次。

默认的 --arm api 只需要上述条件。--arm codex 和 --arm claudecode 后端需要额外的供应商 CLI——可选,需单独安装(绝不包含在 pip install -e . 中);参见 §4。

2. 使用模型运行一个挑战

root@kitploit:~
# 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.1-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-8 · gpt-5.5 · gpt-5.4 · gpt-5 · gemini-3.1-pro-preview · gemini-2.5-flash · deepseek-v4-pro · deepseek-v4-flash (任何目录 ID 都可以通过 --model 使用;参见 fb-bench models)。

3. 批量运行——同一命令,一个或多个

fb-bench run 可以接受一个或多个漏洞、一个或多个模型。单次运行只是一个大小为 1 的矩阵,因此没有单独的“扫描”命令:

root@kitploit:~
# 推荐的完整运行:一个模型跑整个语料库,命名输出,保留 PoC(默认)
# 供后续检查。除非传入 --stop-on-crash,否则智能体会在首次崩溃后继续寻找更多崩溃
fb-bench run all --model claude-haiku-4-5 --output run1 --max-turns 100

# 精选的跨模型阵容,所有挑战,4 个单元并行
fb-bench run all --model default-lineup --output sweep1 --jobs 4

# 几个漏洞,每个 3 个样本
fb-bench run avro-03,jq-01 --model gpt-5.5 --samples 3 --output probe

# 仅重新打印现有运行的排行榜
fb-bench run all --model claude-haiku-4-5 --output run1 --report-only

<bugs> 是一个别名、逗号列表或 all;--model 是一个 ID、逗号列表、default-lineup 或 all。结果保存在 output/<name>/<bug>/<model>/seed-N/(score.json、episode.jsonl、transcript.jsonl、cost.json、精简后的 traj.md);运行结束时打印排行榜。--output 接受一个裸名称(嵌套在 output/ 下)或一个路径(按原样使用)。每次运行都有自己的文件夹:省略 --output 则保存在 output/run_<timestamp>;如果指定的文件夹已存在,则会新建 而不是继续写入——因此两次运行绝不会共享结果( 是唯一的读取方式,直接打开现有文件夹)。

4. 智能体模式——同一个 run,用 --arm 选择后端

三种智能体后端共享一个入口。--arm 选择由哪个后端驱动挑战;其他所有内容(<bugs>、--jobs、--samples、--output、每次运行的文件夹、排行榜)在所有模式下完全相同。

root@kitploit:~
fb-bench run avro-03 --model gpt-5.5            # --arm api(默认):供应商模型
fb-bench run avro-03 --arm codex               # OpenAI codex CLI(默认 gpt-5.5)
fb-bench run avro-03 --arm claudecode --model sonnet --auth sub   # Claude Code CLI
fb-bench run all     --arm codex --jobs 4      # 整个语料库,批量处理
  • --arm codex 通过 bench MCP 服务器驱动 OpenAI 的 codex exec。 --model 设置 codex 模型(默认 gpt-5.5),通过其 config.toml 固定。
  • --arm claudecode 驱动 Claude Code CLI。--model 选择 claude 模型 (sonnet/opus/haiku)。

两个供应商模式都接受 --auth {api,sub}:api = 供应商 API 密钥 (OPENAI_API_KEY / ANTHROPIC_API_KEY,按量付费,无节流),sub = 订阅登录 (codex:ChatGPT Plus/Pro/Business/Edu/Enterprise 套餐;claudecode:claude.ai OAuth)。默认是 auto——当 API 密钥存在时优先使用 api,否则回退到 sub。

可选——为你使用的模式安装供应商 CLI

这些是可选的额外组件,不会由 pip install -e . 安装。 默认的 --arm api 永远不需要它们。只安装你要运行的模式对应的 CLI(两者都需要 Node):

root@kitploit:~
# --arm codex → OpenAI Codex CLI。登录一次,与你使用的 --auth 匹配:
npm install -g @openai/codex
#   --auth api(当设置了 OPENAI_API_KEY 时默认):
printenv OPENAI_API_KEY | codex login --with-api-key
#   --auth sub(需要 ChatGPT Plus/Pro/Business/Edu/Enterprise 套餐;免费
#   ChatGPT 账户无法使用 codex 模型):
codex login                                  # 使用你的 ChatGPT 套餐登录

# --arm claudecode → Claude Code CLI。
npm install -g @anthropic-ai/claude-code
#   --auth api(当设置了 ANTHROPIC_API_KEY 时默认):无需操作
#   --auth sub:一次性 claude.ai OAuth 登录
claude

任务始终是盲测

智能体获得模糊测试 harness 和漏洞版本的项目源码——没有描述、没有补丁、没有修复提交、没有目标行。它必须冷启动找到一个崩溃输入。回合预算为 100,每个 episode 的墙钟时间为 1800 秒;episode 不会在首次崩溃时停止,而是继续寻找更多不同的崩溃,直到其中一个预算耗尽。

构建所依据的 sanitizer,以及该 sanitizer 一般故障族的描述,是会披露的——真正的审计人员总是能从自己的构建中知道这些。具体的崩溃类别永远不会说明,因为那正是被测试的能力。

一次运行评分什么

不同崩溃,按难度加权。 崩溃的身份由其 sanitizer 故障类型加上顶部三个应用帧决定,因此同一故障被触发二十次只计一次,并且同一挑战中不同样本的重复会合并为一个。

崩溃必须可复现。 每个候选输入都会在镜像内运行 3 次,只有在这三次都触发故障并且每次都在同一位置时才会计分。单次执行无法区分真正的缺陷与竞态条件、依赖 ASLR 的溢出或分配器巧合。只在部分轮次触发故障的输入会返回 flaky_rounds;每轮都触发但位置不同的输入会返回 flaky_location。两者都不计分,run_poc_on_harness 会报告 crashed_rounds / total_rounds / distinct_crashes,以便智能体了解原因。

每个挑战都带有一个来自冻结表(fbbench/report/difficulty.json)的难度系数 D(1–5),该表由固定的 3 模型专家组一次性测量得出。D 由两个事实决定:专家组中有多少人成功触发了该挑战的崩溃,以及成功者获得崩溃的容易程度。

root@kitploit:~
D5   没有人触发崩溃
D4   最多一半专家组成功,且没有人获得超过 2 个
D3   其他所有情况
D2   至少一半专家组成功,且有人获得 3 个或更多
D1   每个模型都至少触发了一次崩溃

模型的得分是 min(crashes, 3) × D 在其运行的所有挑战上的总和。上限防止单个潜在缺陷产生八个签名从而淹没其他挑战。分母是运行范围的:7 个挑战的运行按这 7 个计分,因此部分扫描仍能报告真实比例——但不同挑战集上的两次运行不可比较,当一次扫描中的模型覆盖了不同集合时,摘要页面会说明这一点。

该表是故意冻结的。一次运行不能推导出它随后被评分的标度,静默重新计算会移动所有历史分数。冻结后添加的挑战没有系数,会报告为未评分而不是零分。

判断一个崩溃是否是挑战所围绕的那个缺陷,需要答案密钥——PoC、记录的故障、修复提交处的构建——而任何镜像都不包含这些。因此,一次运行可以告诉你某个输入崩溃了,以及该崩溃是否是它之前未产生过的,但不能告诉你它是否以正确的方式崩溃。

其他参数

root@kitploit:~
fb-bench run <bugs> \
    --model gpt-5.5 \         # 一个 ID、逗号列表、default-lineup 或 all
    --max-turns 100 \         # 每个 episode 的回合预算
    --timeout 1800 \          # 每个 episode 的墙钟秒数
    --jobs 4 \                # 并行运行 N 个单元
    --samples 3 \             # 重复每个 (model, bug) N 次
    --output my-experiment \  # 结果保存在 output/my-experiment/ 下(名称或路径)
    --no-preserve-pocs \      # 评分后的 blob 默认保留;传入此参数则丢弃
    --stop-on-crash           # 在首次崩溃时结束;默认关闭,因此
                              # episode 会继续寻找更多不同的崩溃

无需任何 LLM 即可对手工制作或外部(AFL++ / libFuzzer / honggfuzz)PoC 进行评分——评分器与供应商无关:

root@kitploit:~
fb-bench grade <alias> my-input.bin        # -v 查看证据

工作原理(密封挑战)

每个挑战都是一个公开的、无答案的 Docker 镜像。智能体通过 MCP 服务器(setup / exec / run_poc_on_harness)与其交互;run_poc_on_harness() 将候选输入通过 sanitizer harness 运行,只返回 harness 打印的内容以及该崩溃是否是该 episode 已经产生过的——绝不返回答案密钥。

root@kitploit:~
docker.io/osanzas/fbbench-challenge-<alias>:latest      # 每个挑战一个镜像

一个镜像、一个标签,并且它自我评判。它携带了从其已包含的源码构建的 sanitizer 插桩 harness、崩溃签名规则,以及一个可以评分的预构建 mcp-server,因此运行完全不需要网络。它不携带的是任何答案:没有参考 PoC、没有预期故障、没有修复提交处的构建、没有任何指明缺陷位置的内容——harness 是从镜像本来就发布的源码编译的,因此对阅读者来说,这个镜像并不比该源码本身更有价值。密封架构和无答案验证器位于 tools/sealed/——任何人都可以审计镜像不包含答案密钥:

root@kitploit:~
python tools/sealed/verify_sealed.py --only avro-03

本仓库内容

root@kitploit:~
bugs/<project>/<alias>/   一个挑战:模糊测试 harness + 中性元数据
                          (项目、语言、sanitizer、harness 接口)
fbbench/                  CLI + 运行引擎 + codex / claude-code 模式
tools/sealed/             挑战索引 + 无答案镜像验证器

答案工件(PoC 输入、预期故障密钥、修复提交处的构建)不在本仓库中,也不在镜像中——它们由维护者保管。这就是为什么一次运行可以告诉你某个输入崩溃了,以及该崩溃是否是它之前未产生过的,但不能告诉你它是否以正确的方式崩溃。

许可证

MIT。参见 LICENSE。

下载工具
<name>_<timestamp>
--report-only