BLOG
技术拆解 020|ARTEX:渗透测试搬进 agent 工作流,备份仓库一天 721 星
10 月 8 日,GitHub 上出现仓库 mhtsec/ARTEX,about 一行自我介绍:AI 自主渗透测试系统,百度「agent+」攻防挑战赛冠军项目(据项目自述)。一天之后,721 星。它不是又一个扫描器脚本,而是一套完整的多 agent 系统:Go 后端 327 个源文件,agent 包一万多行,Next.js 前端内嵌成单二进制,PostgreSQL 里存着两张图。更有意思的是仓库身份:README 第一屏就声明这是「最后一个版本纯源码备份」,原仓库已经不可访问。这篇按六件事拆:是什么、为什么现在、核心机制、数字与边界、怎么跑、价值判断。
一、它是什么
先说仓库身份,这里有个容易写错的点。mhtsec/ARTEX 是备份仓:README 自述「该仓库为 ARTEX 最后一个版本纯源码备份」,并注明 docker 部署源已失效、需要自行本地构建。仓库里的安装脚本,clone 地址写的仍是 Autumn-27/ARTEX。这个原仓库在 GitHub 上已经返回 404,删除还是转私,原因未知。也就是说,项目的开发史、issue、release 都留在原仓库,现在这份仓只是一段定格的源码;721 星量的是安全社区一天之内对「冠军项目源码备份」的关注,不是项目长期积累的声望。
再说系统本身。ARTEX 是把渗透测试做成 agent 工作流的完整工程:后端 Go,327 个 .go 文件,其中 agent 包 10391 行;前端 Next.js 静态导出后用 go:embed 内嵌进单个二进制;数据库 PostgreSQL。核心依赖只有一排:作者自己的 agent 框架库 norma(提供 agentcore、tool、permission、transcript 等模块),加若干基础库。协议 AGPL-3.0,但 README 尾部另附一层比协议更严的使用限制,这个放到后文说。
系统的骨架是多 agent 分工:planner 负责规划,worker 负责执行,mainagent 承接人在环路的对话。这套分工的载体是两张图:资产图与探索图,机制放第三段。
二、为什么现在值得看
三个理由。
第一,LLM 做渗透是当下安全比赛的热点方向,「agent+」这类攻防挑战赛把它推成了正式科目。ARTEX 以冠军项目自居(据项目自述)出现在这个时间点,本身就是风向样本:比赛在逼着参赛队把 agent 工程做到能上场的完成度,冠军方案长什么样,值得看。
第二,agent 工程的通用件已经成熟。事件驱动调度、跨会话共享存储、工具审批门、证据留痕,这些组件在编程助手、自动化运维等场景里打磨了一年多,ARTEX 把它们组装进一个垂直领域。看它怎么组装、在安全场景里改了什么,比看十篇概念文有价值。
第三,正好收官。AI 安全这个话题,此前已经聊过攻的一端(往模型里投毒)与守的一端(权重被整份带走),这一期补上中间那段:攻防工作流本身被 agent 重写。三篇连起来,攻、守、工作流,这个方向的全貌就齐了。
三、核心技术机制
四件套:事件驱动的 Planner、双图加黑板、拦截审批、证据链。逐个说。
事件驱动 Planner。 agent/planner.go 的注释写明定位:「Planner is the event-driven LLM planner」。它不轮询,而是资产图或探索图一有变化就被唤醒(带防抖,避免图抖动触发连环调度),醒来读当前态势、判断目标是否达成,然后派 0 到 N 个探索意图进待领队列(frontier)。两个设计值得记:一是它是全系统「唯一的意图生成器」,worker 只领意图、不造意图,规划权不分散;二是大多数唤醒派 0 个意图:没有新方向就沉默,不硬找活干。另外还有 killWork、steerWork 两个回调,可以中途终止或改向正在运行的工作;冷节点有压缩机制,控制长任务的上下文长度。
共享 todolist。 Planner 每次唤醒都是全新会话,本身无状态。但真实的利用过程往往是有前后依赖的多步序列,前一步的产出是后一步的输入,一次性并行派出去只会乱套。解法是一份按任务保留、跨唤醒共享的待办清单:planner 把一条串行利用链记录一次,之后每轮只对「前置步骤已完成」的下一步派意图,随着事实陆续写回,逐步解锁后面的步骤。事件驱动加无状态会话的环境里,多步序列因此能稳定推进、不重复、不错序。这是系统能自主走完长流程的关键一步。
双图与黑板。 「目标是什么」和「测到什么程度」被拆成两张图。资产图全局共享,节点从根域名、子域到 IP、服务、端点,父子关系与去重键全部由程序计算,agent 只提交原始信息,不负责判定重复。探索图每任务独立,节点是目标、意图、事实、漏洞、提示,靠派生、产出、证明这类边连成血缘,哪个方向从哪些事实派生、产出了什么,图上可查。两图用锚点相连,既能顺着探索方向看碰过哪些资产,也能反查某个资产被哪些意图测过。任务之间靠黑板传递状态:后续任务看到的是前序任务活跃数据的只读视图,继承来的漏洞证据只读、不可改。状态可以继承,污染进不去。
拦截审批。 系统对工具调用设了一道审批门。内置规则先挡明确的破坏性操作:HTTP DELETE 方法之外,还补了一条「删除类接口路径」规则,覆盖路径中出现 /delete、/del、/remove、/unlink、/erase、/destroy 的请求,并要求动词后必须跟分隔符,/delivery、/details 这类不会被误拦。补这条规则的动机写在更新日志里:多数应用的删除接口用 GET 或 POST 就能触发,只认 DELETE 方法挡不住。规则之外的部分交给「模型兜底审批」,让 LLM 判断放行与否;这块的 token 消耗单独计量,界面上有用量卡片和近 30 天的每日柱图。审批本身要花模型的钱,花多少摊开给你看。
证据链。 这是最见工程功力的一件。漏洞与流量的绑定是多对多,每条绑定标四种用途之一:baseline(正常对照)、proof(漏洞证明)、verification(补充验证)、supporting(辅助证据)。绑定时把对应流量按 SHA-256 哈希落成存证文件,多个漏洞可共享同一份存证。文档里写明一条设计哲学:系统不按域名、时间或浏览记录猜测绑定:防误归因,宁可让你显式选,不替你猜。报告由独立的报告 Agent 二段式生成:发现入库后自动触发,核对并绑定流量,按最新证据版本写报告;写入带 evidence_version 乐观锁,证据在生成期间变了就拒绝旧版本覆盖,版本冲突返回 409,往继承来的证据上写返回 403。
补一句代码质量侧写:0.3.15 版(10 月 7 日)的更新日志里有一轮完整的安全审计记录,十几条修复里包括一个被判「严重」的配置合并漏洞(凭据掩码可被特定提交方式绕过),每条都先复现、再修、再补回归测试;agent 包几乎每个核心文件都有对应的测试文件。备份仓,不代表草率仓。
四、数字与边界
数字摆全:721 星(10 月 9 日时点,一天);327 个 .go 文件;agent 包 10391 行;Go 后端加 Next.js 前端加 PostgreSQL;依赖框架 norma v0.4.3;AGPL-3.0;最后版本 0.3.15 落款 10 月 7 日,仓库公开在 10 月 8 日。
边界说四条。
其一,冠军是自述。「百度 agent+ 攻防挑战赛冠军」只出现在仓库的 about 描述里,赛事本身没有检索到独立报道或公开榜单可以核对。这个头衔当项目方的自我介绍听,不当成绩单用。
其二,星数的含义要打折。一天 721 星,量的是安全社区的搬运式关注,不是长期使用者的积累;原仓库已 404,开发史无从对照,这份源码在备份之前经历了什么,外界看不见。
其三,单作者加定格存档的维护性。0.3.15 的贡献者名单只有作者一人;README 明说这是最后版本的备份。这份源码大概率不会再有后续提交,读它、用它,都要按「定格存档」的预期来。
其四,免责条款比常规渗透工具更严。多数渗透工具的免责声明是「仅限授权测试」,ARTEX 直接写明:严禁对任何网站、线上服务或联网系统发起扫描、探测、利用或攻击。括号里特意补了一句「无论是否获得授权、是否为自有资产」。连授权线上测试都禁,只留个人学习、代码研究与本地隔离环境验证三个口子。
五、怎么跑、谁能玩
先说边界内的跑法,依赖三样:一个 PostgreSQL、一把 LLM key(ANTHROPIC 或 OPENAI,也可在界面里配)、一个本地隔离环境。部署两条路:install 脚本引导选全部 Docker 或本地编译,后者用 go 编译出内嵌前端的单二进制;起来之后服务在本地 8787 端口,首次进入设置管理员密码。注意备份仓的特殊性:README 自述 docker 部署源已失效,镜像拉不到就得走本地构建,作者甚至建议「让 AI 替你本地构建」。生态上它能与同作者的资产测绘工具 ScopeSentry 同步资产,按项目或任务维度导入。
分三类人说。做攻防工程的人:双图、审批门、证据链是可直接借鉴的架构样本,尤其后两件,换一个领域照样成立。做 agent 开发的人:事件驱动加无状态会话加共享 todolist,是「多步流程如何在无状态环境里稳定推进」的现成答案,planner.go 值得整文件读。做安全研究的人:四用途绑定加乐观锁的证据链,是「agent 产出如何变成可审计证据」的参考实现。
只想围观的人,门槛最低的入口是 README 自述的在线演示站,点开看任务、资产、探索过程、审批记录的界面长什么样,再决定要不要读源码。
六、价值判断与适合谁
样本价值:高。它把「AI 做渗透」从比赛捷报和演示视频,变成一份可以逐行读的源码。判断一个 agent 系统的真实完成度,我看三处:规划权是否集中、执行是否留痕、产出是否可审。ARTEX 三处都给出了工程答案:唯一意图生成器、全程留痕的记录代理、带哈希与版本锁的证据链。
行业价值:这是一次工作流的重写,不是工具的替换。渗透测试里大量的枚举、试错、记录、整理是标准的重活;ARTEX 展示的分工是 agent 干重活、人守关键决策,审批门拦下破坏性操作,证据链让人逐条复核 agent 的结论。对红队,这意味着产能放大,重复劳动被吃掉,人专注在真正需要判断力的环节;对蓝队,这意味着对抗升级,低成本自动化会把侦察与尝试的频次整体抬升,防守侧同样需要 agent 化的检测与响应。攻防两边,被同一份源码推向同一个方向。
边界再钉一次:效果没有第三方数据,冠军是自述,仓库是定格的备份。值不值得花时间,取决于你想拿走什么。拿走架构(审批门、证据链、共享待办),处处能用;想拿走一个开箱即用的渗透工具,既违背它的条款,也高估了它的定位。
一句话判断:ARTEX 的分量不在冠军头衔,而在它把「agent 自主做安全测试」从口号写成了带审批、带证据、可复盘的工程流程。这个方向的自动化从来不缺演示,缺的是这种可审计的克制。
参考来源
- 仓库本体:github.com/mhtsec/ARTEX(本地 clone 后逐项比对 README、CHANGELOG、docs/漏洞流量证据.md、agent 包源码、go.mod、git log;未执行任何构建)
- GitHub API(721★、about 描述、创建时间 2026-10-08)
- 原仓 Autumn-27/ARTEX,API 返回 404(删除或转私,原因未核实)
- 星数 721★ 为 2026-10-09 时点数据,仍在变化