最近 GitHub 上出现了一个有意思的项目 ARTEX——一套 AI 自主渗透测试系统,号称百度"agent+“攻防挑战赛冠军项目。Go 写的单体后端,内嵌 Next.js 前端,一个二进制就能跑。花了点时间把它的文档和架构啃完,分享一下这个项目到底是怎么让 AI 自己"打点"的。

⚠️ 声明:渗透测试工具只能用于已授权的目标(如自己的资产、CTF 靶场、客户书面授权的测试)。本文纯技术解析,不提供任何针对未授权目标的使用指导。

一句话介绍

ARTEX = LLM 多 Agent 驱动的自主渗透系统。你给它一个目标范围(比如一个域名),它的 planner(规划者)会自动分解目标、规划测试方向,多个 worker(执行者)并发用真实工具(nmap、curl 等)去测,把发现写回数据库,planner 再根据新发现规划下一轮——直到目标被"证明”(找到漏洞或确认覆盖完毕)。整个过程在 Web 界面上可视化,你可以随时介入对话、审批高风险操作。

核心设计:双图架构

这是 ARTEX 最有想法的部分。它把"目标是什么"和"测到了什么程度"拆成两张图:

资产图(Asset Graph,全局共享):跨任务共用的一份资产"真值库"。节点是域名 → 子域 → IP → 服务 → 端点的层级关系,由程序自动计算去重,Agent 只负责提交原始发现。相当于整个组织的资产台账,越测越全。

探索图(Exploration Graph,每任务独立):一次渗透任务的"思考过程"。节点分五种:goal(目标)→ intent(意图)→ fact(事实)→ finding(漏洞),靠 spawns / derived_from / yields / proves 这些边连成血缘链。回答的是"这个测试方向从哪来、产出了什么"。

两图靠"锚点"连接:每个意图、事实、漏洞都锚定到具体资产上。于是既能从"探索方向"看它打了哪些资产,也能从"某个资产"反查它被哪些意图测过——这就支撑了资产测试覆盖度统计和可视化的资产覆盖图。

Agent 分工:Planner + Worker + 人在环路

  • Planner(规划者):唯一的"意图生成者"。读探索图态势,判断目标完成度,只在有未覆盖的新方向时才派发意图。大多数时候它唤醒后派 0 个意图——没新方向就结束,避免 AI 瞎忙。
  • Worker(执行者,默认 3 并发):领一条意图,用真实工具执行,把新资产/事实/漏洞写回双图后即停。不自己规划,只执行。
  • MainAgent(人在环路):你可以在 Web 界面直接跟 Agent 对话,下达指令或叫停。

引擎是事件驱动闭环:图一变 → 唤醒 planner → 派意图 → worker 执行写回 → 图又变了 → 下一轮。直到目标被 prove。

支撑系统:不只是"让 AI 跑命令"

  • 流量录制代理:Worker 的 Bash/HTTP 操作全程经过 MITM 代理留痕,可回放审计
  • 审批门(Guard/Intercept):高风险工具调用先拦截,等你在界面上点批准才执行
  • 漏洞复测:对已发现的漏洞可一键发起独立复测会话,结论分"仍可复现 / 已修复 / 无法确认",确认修复自动更新状态
  • 资产同步:支持从 ScopeSentry 一键导入资产,免重复收集
  • MCP / Skills / Memory:可扩展的工具与记忆机制
  • 一键更新:Web 界面直接检查并安装新版本,失败自动回滚

部署:一个二进制 + PostgreSQL

依赖只有两个:PostgreSQL 数据库 + 一个 LLM API Key(Anthropic 或 OpenAI,也可在 UI 里配)。

最省事的是 Docker:

git clone https://github.com/daipo971/artex.git
cd artex
cp .env.example .env   # 填 POSTGRES_PASSWORD
docker compose up -d   # → http://localhost:8787

也可以下载 Releases 里的预编译包,或从源码编译(前端静态导出后 go:embed 进二进制,真正单文件部署)。首次打开 /setup 设管理员密码即可。

反向代理到公网时注意:SSE 是长连接,Nginx 必须关缓冲(proxy_buffering off),否则活动流一直转圈收不到事件——文档里专门强调了这点,踩过坑的都知道。

几点看法

  1. “双图"是对渗透测试过程比较好的建模。传统扫描器是"资产列表 + 漏洞列表”,ARTEX 把"为什么测这个方向"的推理链也存下来了,这对复盘和生成报告很有价值。
  2. Planner 只派"有信息增量"的意图这个设计很关键。自主 Agent 系统最大的毛病就是 token 烧起来没完,事件驱动 + 无新方向即停是务实的工程选择。
  3. 人在环路不是摆设。审批门 + 可介入对话,意味着它定位是"测试人员的副驾驶"而不是"全自动黑客",这在合规上是正确的姿态。
  4. 单二进制 + 内嵌前端的交付形态对安全团队很友好,内网丢一个文件就能跑,不用折腾前后端分离部署。

感兴趣的可以去看在线 Demo(仓库 README 里有链接),或者自己 Docker 跑一个。记住:只测自己有授权的目标。


项目地址:https://github.com/daipo971/artex