一个用于评估 AI Agent 安全能力的 Benchmark 平台,主线为可重复部署的 Web CTF 题目,并扩展支持接入外部靶场,如 Vulhub 与 VulnHub。
这个项目评测的不是单点 payload 命中率,而是 AI Agent 是否具备完整的安全作战能力:
- 发现攻击面
- 枚举接口与资产
- 理解认证、授权与业务逻辑
- 验证漏洞并构造利用链
- 获取 flag 与证据
- 在有限步骤、有限上下文中稳定完成任务
- 从第一性原理出发设计题目和平台
- 先保证可维护、可重复、可观测,再追求题量
- 平台与题目解耦,题目与运行时解耦
- Docker Web 题作为主线,VM 靶场作为扩展
- Web Console、CLI、Agent Runner 共享同一套控制面 API
该项目不是“20 个 Docker 靶场”的集合,而是一个可扩展的 AI Agent Security Benchmark Platform:
- 主线题源:原生 Docker Web Challenges
- 扩展题源:Vulhub、VulnHub、Custom Compose,以及后续 K8s / Remote Runtime
- 运行入口:Web Console + CLI + API
- 目标环境:Windows / macOS / Linux 上的本地或私有部署
V1 聚焦于最稳的一条主线:
- 20 道原生 Web CTF 题
- 统一
challenge.yml规范 - Docker Runtime
- Control Plane Backend
- Web 管理后台
- CLI
- Checker / Grader / Reset 工具链
V1 不追求:
- 任意外部靶场全自动导入
- 多租户 SaaS 化
- 大规模分布式调度
- 全量 VM 兼容
当前仓库已经落地了 V1 的主线骨架:
- 20 道原生 Docker Web 题,按 Tier 1 到 Tier 5 分层
- Node.js / TypeScript 控制面后端
- React Web Console
- API 驱动 CLI
- 全量 checker
- 批量启动、停止、重置能力
- 单题与批量 checker 触发能力
- Vulhub 半自动导入骨架
已验证结果:
20/20challenge checker 通过- 每题支持
docker compose up/down - Web Console 可展示目录、详情、状态、健康、日志
- Backend 提供单题和批量生命周期接口
首次启动且后端还没有任何用户时,系统会自动创建一个默认管理员:
- 用户名:
admin - 密码:
AdminPass123
也可以通过环境变量覆盖:
BENCH_DEFAULT_ADMIN_USERNAMEBENCH_DEFAULT_ADMIN_PASSWORD
首次登录后必须修改密码;如果准备将平台暴露到共享网络或公网,请务必显式设置管理员凭证,不要依赖默认回退值。
cd platform/backend
npm install
npm run devcd platform/frontend
npm install
npm run dev默认访问:
- Backend:
http://127.0.0.1:8000 - Frontend:
http://127.0.0.1:5173
应用启动时,如果后端还没有任何用户,会自动创建一个默认管理员。默认用户名和密码分别来自 BENCH_DEFAULT_ADMIN_USERNAME / BENCH_DEFAULT_ADMIN_PASSWORD,未设置时回退到 admin / AdminPass123。首次登录后必须先修改密码;Web 控制台随后通过浏览器 HttpOnly 会话维持登录,agent / CLI 需要的访问凭证则在登录后单独签发 Agent-Token。
如果你准备把平台暴露到共享网络或公网,请显式设置管理员凭证,不要依赖默认回退值。
cd platform/cli
npm install
npm run build
node dist/benchctl.js login --username admin --password AdminPass123
node dist/benchctl.js whoami
node dist/benchctl.js tokens
node dist/benchctl.js overview
node dist/benchctl.js list --tier 2
node dist/benchctl.js start --tier 1
node dist/benchctl.js stop
node dist/benchctl.js reset web-01-robots-leak
node dist/benchctl.js status web-11-ssrf-internal
node dist/benchctl.js targets web-11-ssrf-internal
node dist/benchctl.js logs web-11-ssrf-internal --tail 50
node dist/benchctl.js check --tier 1
node dist/benchctl.js import-compose /path/to/compose/project
node dist/benchctl.js import-vulhub /path/to/vulhub/project --id demo-vulhub
node dist/benchctl.js import-vulnhub /path/to/image.ova --id demo-vm
node dist/benchctl.js list-imports
node dist/benchctl.js show-import custom-compose my-import
node dist/benchctl.js preflight-import custom-compose my-import
node dist/benchctl.js update-import custom-compose my-import --benchmark-file /tmp/benchmark.json
node dist/benchctl.js validate-imports
node dist/benchctl.js register-import custom-compose my-import
node dist/benchctl.js unregister-import custom-compose my-importnode tools/platform/publish.mjs --version v0.2.0
node tools/platform/publish.mjs --version v0.2.0 --only backend,cli默认会在 artifacts/releases/<version>/ 下生成:
backend/cli/frontend/manifest.json
python3 tools/checker/run_all.py
python3 tools/checker/run_all.py --tier 3
python3 tools/checker/run_all.py web-11-ssrf-internal web-20-frankenstack
python3 tools/checker/run_all.py --json --output artifacts/checks/latest.jsonpython3 tools/grader/grade.py
python3 tools/grader/grade.py --tier 1 --output-dir artifacts/grades/tier-1
python3 tools/grader/grade.py --tier 1 --trace-file artifacts/traces/sample.json --output-dir artifacts/grades/tier-1
python3 tools/platform/manage.py grade --tier 1 --trace-file artifacts/traces/sample.json --output-dir artifacts/grades/tier-1也可以先把 runner 产出的 trace 提交给 backend,再导出为 grader 兼容 bundle:
node platform/cli/dist/benchctl.js record-trace artifacts/traces/sample.json
node platform/cli/dist/benchctl.js list-runs --challenge-id web-01-robots-leak --limit 20
node platform/cli/dist/benchctl.js export-traces --output artifacts/traces/exported.json
python3 tools/grader/grade.py --trace-file artifacts/traces/exported.json推荐主流程是:
- 用户登录后台
- 用户生成一个专用 token
- 把 token、OpenAPI 文档地址和 agent 使用说明交给 agent
- agent 直接调用控制面 API 自动解题
建议交给 agent 的文档:
控制面会提供这几类关键接口:
GET /openapi.jsonGET /api/challengesGET /api/challenges/{id}POST /api/start_challengePOST /api/hintPOST /api/submitPOST /api/stop_challenge
认证头:
Agent-Token: <issued_token>
如果你仍然需要一个本地编排层,仓库也提供了一个最小可用的 agent runner:
python3 tools/agent/runner.py \
--api-base-url http://127.0.0.1:8000 \
--username admin \
--password AdminPass123 \
--solver-cmd "python3 tools/agent/example_solver.py" \
--tier 1 \
--limit 2这个 runner 会顺序执行:
- 拉题目
- 启动题目
- 调用外部 solver
- 提交 flag
- 停止题目
- 回传 trace
详细说明见:
node platform/cli/dist/benchctl.js import-compose /path/to/compose/project
python3 adapters/vulhub/importer.py /path/to/vulhub/project imports/vulhub/my-import
node platform/cli/dist/benchctl.js import-vulhub /path/to/vulhub/project --id my-import
node platform/cli/dist/benchctl.js import-vulnhub /path/to/image.ova --id my-vm通过控制面和 CLI 创建的导入草稿会写入 SQLite,不会假装已经完成 checker、flag、healthcheck 标准化。外部 adapter 脚本如需产出中间文件,仍可按各自约定执行。
可以继续查看和校验这些草稿:
node platform/cli/dist/benchctl.js list-imports
node platform/cli/dist/benchctl.js show-import custom-compose my-import
node platform/cli/dist/benchctl.js preflight-import custom-compose my-import
node platform/cli/dist/benchctl.js update-import custom-compose my-import --benchmark-file /tmp/benchmark.json
node platform/cli/dist/benchctl.js validate-imports
node platform/cli/dist/benchctl.js register-import custom-compose my-importaiagentsec-benchmarks/
README.md
README.en.md
docs/
architecture.md
challenge-spec.md
control-plane.md
roadmap.md
platform/
backend/
frontend/
cli/
runtimes/
docker/
vm/
adapters/
native/
custom-compose/
vulhub/
vulnhub/
tools/
checker/
grader/
reset/
validate/
challenges/
web/
tier-01/
tier-02/
tier-03/
tier-04/
tier-05/
20 道 Web 题按“人类渗透测试路径”递进,而不是按漏洞名堆砌:
- Tier 1:入口明显,单步利用
- Tier 2:需要基础枚举和二步利用
- Tier 3:需要理解认证、前后端行为、业务逻辑
- Tier 4:需要状态控制、多服务交互或横向移动
- Tier 5:需要漏洞链、复杂推理、内网 pivot
适合作为 Docker 类扩展题源,通过 vulhub-adapter 接入。
适合作为 VM 类扩展题源,通过 vm-runtime + vulnhub-adapter 接入,但不应作为 V1 主线。
原因:
- 主要是 OVA / OVF / VMDK 虚拟机镜像
- 缺少统一的 reset、checker、flag 接口
- 入口通常依赖 DHCP 和动态 IP
- 跨 hypervisor 与跨平台兼容不稳定
推荐实现顺序:
- 批量 checker 和批量运行结果持久化
- agent 轨迹采集与更细粒度评分
- VM 非 HTTP 服务探测和日志采集
- leaderboard 和对比报告