综合 ARTEX:双图架构的 LLM 自主渗透测试系统,Go 单二进制自托管

2026-10-04 21:30:54

ARTEX:双图架构的 LLM 自主渗透测试系统,Go 单二进制自托管

项目地址: Demo: 资产同步:ScopeSentry

百度「agent+」攻防挑战赛冠军项目,AGPL-3.0,Go 后端 + Next.js 前端,前端通过 go:embed 内嵌进单二进制。

它做什么

给 agent 一个资产范围,它在范围内自主探索。仪表盘呈现总览、Token 消耗和活动流;任务页能看到执行过程中的会话与工具调用、探索链路图;配套发现列表、资产列表,以及力导向布局的资产覆盖图。支持流量录制,也支持「人在环路」对话干预。

两个设计值得单独说:

审批先行。 agent 动作可以走「拦截审批」,全局审批记录、任务内拦截、对话里的审批卡片都能展开查看完整详情,关键操作先审后行。这是把不可逆操作的闸门交回人手里的做法,代价是自动化链路会被打断,配置时要想清楚哪些工具值得拦。

数据自主权。 任务、发现、资产、流量全部落在自己的 PostgreSQL 里,不经过第三方平台。LLM 密钥(Anthropic 或 OpenAI)在界面里配置。

与 ScopeSentry 打通:填地址和 API Key 即可同步域名、子域、IP、端口、站点、端点等资产,按范围归并后进入资产图供 agent 探索。

双图架构

核心是两张图,加上把两图连起来的锚点。README 的描述:

  • 资产图(Asset Graph,全局共享):跨任务的同一份资产真值库,节点类型 root_domain/subdomain/ip/service/app/endpoint。父子关系与去重 key 由程序计算,agent 只提交原始信息。
  • 探索图(Exploration Graph,每任务独立):节点类型 goal/intent/fact/finding/hint,靠 spawns/derived_from/yields/proves 等边连成血缘链。
  • 锚点:exploration_anchors(node_id, asset_id) 把意图、事实、漏洞锚定到具体资产。

planner 与 worker 的分工很清晰:planner 读探索图态势、判定目标,只在存在未覆盖的新方向时把意图派进 frontier;worker 领一条意图,用真实工具执行,把新资产、事实、漏洞写回两图后即停。引擎是事件驱动的——图一变就唤醒 planner。worker 之间可以跨 work 检索执行过程(search_all_worker_traces / get_worker_trace)。planner 持有一份按任务保留、跨唤醒共享的 todolist,多轮按依赖逐步派意图,用来推进多步利用链。

agent 能力由 norma SDK 提供(agentcore / tool / permission / harness / memory / transcript)。

部署

五种方式,按场景选。

一键脚本(会检测并安装 Docker,然后让你选全 Docker 还是本地编译):

git clone https://github.com/Autumn-27/ARTEX.git && cd ARTEX && ./install.sh

选全 Docker 时填 Postgres 密码,脚本自动写 .env 并 docker compose up -d。

Docker Compose 手动:

cp .env.example .env   # 填 POSTGRES_PASSWORD,可选 ANTHROPIC_API_KEY
docker compose up -d

镜像 autumn27/artex 已含 ripgrep / curl / vim / npm / nmap,./skills 与 ./data 绑定挂载持久化。

Releases 预编译二进制: 解压得到 artex + start.sh(Windows 为 start.bat)+ skills/ + config.example.json。复制成 config.json 填 database 连接,用 ./start.sh 启动——它是守护脚本,页面一键更新靠它换装。后台常驻:

nohup ./start.sh >artex.log 2>&1 &

源码编译单二进制:

cd web && npm ci && npm run build:static && cd ..
cp -r web/out server/webui/dist
CGO_ENABLED=0 go build -tags embedui -o artex ./cmd/artex

跨平台打包: build.sh --release,默认覆盖 linux amd64/arm64、macOS amd64/arm64、Windows amd64。UPX 默认关闭,开启后可能与部分内核或虚拟化环境不兼容。

默认端口 8787,首次进入 /setup 设管理员密码。

升级与回滚

原则是只换程序不动数据。Postgres 数据卷 pgdata、./data(jwt.key/SQLite)、./skills 都保留。schema 迁移不需要手动跑——artex 每次启动幂等重跑 schema.sql(ADD COLUMN / CREATE INDEX IF NOT EXISTS),即「重启即迁移」。升级前仍建议备份 ./data 与数据库。

页面一键更新:系统配置 → 版本与更新卡片,下载当前平台发布包 → 比对 SHA256SUMS → -h 冒烟测试 → 暂存 artex.new → 程序退出后由 start.sh 重新拉起换装。失败不会留下坏程序;新版连续 3 次启动失败自动回滚到 artex.old。注意更新会中断正在运行的任务。

Docker 部署下只换程序不换镜像,工具链不会升级;要连镜像一起升级:

docker compose pull artex && docker compose up -d artex

开发构建(版本号 dev)不提供更新。另有 update.sh,可选 git pull,然后选 Docker 或本地编译更新。

配置与反代

数据库连接走 config.json,或环境变量 ARTEX_PG_DSN 覆盖。LLM 用 ANTHROPIC_API_KEY / OPENAI_API_KEY,也可在 UI 里配;可选 ARTEX_LLM_PROVIDER / MODEL / BASE_URL / PROXY。每个任务的 work agent 数在系统设置里配,默认 3。

常用参数:

./start.sh -addr :8787 -proxy :8788

-addr 是前端 + API,-proxy 是流量录制代理。

反代部署(HTTPS / 只开 443):前端与 API/SSE 同一个后端端口,实时活动流默认同源,不需要 NEXT_PUBLIC_SSE_BASE;公网只开 443,8787 留内网。SSE 长连接必须关缓冲,否则浏览器连上了却收不到事件,表现是活动流一直转圈。Nginx 关键项:

proxy_buffering off;
proxy_cache off;
proxy_read_timeout 3600s;
proxy_http_version 1.1;
proxy_set_header Connection "";

复测

任务详情里有「复测」页,可分页选漏洞、查看历次结论和证据、手动发起复测。结论三档:仍可复现、已修复、无法确认,每次的结论、证据、会话链接都会保存。新版后端首次启动会预置 retester Agent;复测成功且结论为「已修复」时,自动把漏洞处置状态改为「已修复」。

本地开发与技术栈

./dev.sh          # 后端 :8787 + 流量代理 :8788 + 前端 next dev :5173
go test ./...
cd web && NEXT_PUBLIC_MOCK=1 npm run dev   # Mock 预览

技术栈:Go net/http + JWT + SSE,engine 每个任务一个 plannerLoop 加 N 个 worker goroutine,pgx 落 Postgres。远程 MCP 可选 http(Streamable HTTP)或 sse(旧版)。

许可证与免责(重要)

项目采用 AGPL-3.0,衍生作品须同样以 AGPL-3.0 发布,通过网络提供服务也须公开完整源码。

作者额外声明:仅限个人学习、代码研究与本地隔离环境技术验证,严禁对任何线上系统/网站发起实际扫描、探测、利用或攻击(无论是否授权),使用者自负法律责任。

复制全文 生成海报 ARTEX 自托管 LLM Agent 渗透测试 Go

推荐文章

程序员茄子在线接单