强烈建议二开!ARTEX深度拆解:从PostgreSQL“黑板”到Planner-Worker调度优化
2026/7/30 9:51:16 网站建设 项目流程

前言

在AI渗透测试工具层出不穷的今天,大多数项目给人的感觉是“在聊天框里接了个能执行命令的Agent”——对话一长,模型忘了自己扫到哪了;页面一刷新,执行状态全丢了;想复盘的时候,只能翻聊天记录。

今天给大伙分享渗透测试智能体开源项目——ARTEX

项目地址:GitHub - Autumn-27/ARTEX: AI 自主渗透测试系统 · GitHub

在线Demo:http://artex-demo.vercel.app/

简述:ARTEX是一个把AI Agent、资产图谱、流量录制和任务编排放进同一套工作台的自主渗透测试系统,后端用Go,前端用Next.js,开箱就带Web UI。这篇文章会从技术原理、架构设计、使用体验到二开建议,带你完整认识这个项目。

快速部署方式:

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

脚本会引导你选择两种模式:

模式适合谁特点
全部Docker想快速跑起来自动拉起ARTEX和PostgreSQL
本地编译运行想改代码或二开可自定义数据库和构建方式

一、解决了什么问题?

先问一个问题:你用过的AI渗透工具,是不是都长这样?

  • 一个聊天窗口,你跟AI说“扫一下这个站点”

  • AI开始调用工具、输出结果

  • 对话越来越长,AI开始“失忆”

  • 你刷新页面,一切归零

  • 想复盘?只能从头翻聊天记录

ARTEX的核心设计理念是:不要把所有上下文都堆在聊天记录里。它把渗透流程拆成几层稳定的运行单元,再让Agent在这套约束里工作。

层级作用对应实现
数据层保存资产图、探索图、任务状态、流量记录PostgreSQL +data/traffic
执行层跑Planner、Worker、Chat Agentagent/
编排层派生子任务、管理目标、处理触发器server/orchestration.goserver/scheduler.go
安全控制层对高风险工具调用做拦截和审批guard/guard.gointercept/
接入层MCP、Web UI、录制代理、资产同步mcphttp/server/sync_scopesentry.go

二、核心架构:双图模型

2.1 资产图与探索图分离

ARTEX最核心的设计是两张图

  • 资产图:存域名、站点、接口、参数、指纹、服务这些结构化对象

  • 探索图:存目标、意图、事实、发现和执行链路

这两个东西分开,意义很大。

普通Agent工作流的问题是“把所有上下文都堆在聊天记录里”。轮数一长,模型只知道自己说过什么,却很难稳定回答三个问题:现在已经摸到了哪些入口?哪些方向已经证伪?哪些目标还没完成?

ARTEX的做法是把结构化信息写回图里。graph_overviewlist_assetslist_findings这些工具不是装饰,它们是Agent每轮重新建立态势感知的入口。任务暂停、页面刷新、甚至换一轮执行,都还能回到同一份状态。

2.2 存储实现:PostgreSQL就够了

有意思的是,ARTEX没有使用Neo4j等独立图数据库。所有"图"数据都在PostgreSQL中以关系表的方式存储:

  • exploration_nodes:探索节点(goal、intent、finding、hint)

  • exploration_edges:探索边(spawns、derived_from、yields、proves)

  • exploration_anchors:节点-资产关联表

前端用@antv/graphin渲染图,后端从PostgreSQL查询组装成nodes+edges JSON直接返回。部署只需要一个PostgreSQL,大大降低了上手门槛。

三、Planner + Worker:像“黑板架构”一样协作

3.1 什么是黑板架构?

如果你接触过AI多智能体系统,可能听说过黑板架构(Blackboard Architecture)——这是一种经典的多智能体协作模式:

所有智能体共享一个全局黑板(共享内存/数据库),各自独立读取黑板上的信息、做出决策、把结果写回黑板。没有中心化的“总指挥”,每个智能体各司其职,通过黑板间接协作。

ARTEX的设计哲学与黑板架构高度相似:

  • PostgreSQL就是那块“黑板”——所有状态都持久化在这里

  • Planner是“全局规划者”——盯着黑板上的全局态势拆解目标

  • Worker是“具体执行者”——执行动作、把发现写回黑板

  • Chat Agent是“对外接口”——解释当前进展、回答人的问题

3.2 Planner和Worker的分工

ARTEX没有把一个大模型当万能执行器,而是把任务拆成Planner和Worker两类角色:

角色主要职责典型行为
Planner看全局态势、拆目标、决定下一步意图读取graph_overview,创建或收束任务
Worker执行具体测试动作、写回事实和资产调工具、跑命令、登记insert_assetsreport_finding
Chat Agent处理人机对话、解释当前进展回答“现在做到哪了”这类问题

这种拆法的好处是:规划和执行不抢同一段上下文。执行Agent可以把注意力放在当前意图上,比如枚举接口、验证参数、读流量记录。规划Agent则盯住整场任务状态,负责避免重复探索,也负责在足够证据出现时推进目标完成。

总结:Planner是“项目经理”,负责看全局、派活;Worker是“一线工程师”,负责干活、汇报。各干各的,互不干扰。

四、不得不提的几个亮点

4.1 流量录制代理:把“可回放”当一等公民

ARTEX有一个很实用的设计:把录制代理直接放进运行时

流量捕获开启后,系统会把代理地址和CA证书注入到WebFetch、Bash子命令以及浏览器MCP里。结果就是:

  • Agent发起的HTTP请求能自动被录下来

  • Playwright这类浏览器动作也能走同一条代理

  • 后续回看时,可以优先查traffic_search/traffic_get,不用重复打目标

很多“AI渗透”项目只强调自动化执行,但不太处理留痕问题。ARTEX反过来把“可回放、可复查、可检索”当成一等公民。对团队协作来说,这比单次跑出一个PoC更值钱。

4.2 MCP和平台工具直接进系统

ARTEX不只是调用外部工具,还把工具管理本身做进了平台。它内置了创建和更新Skill、自定义Tool、MCP服务的能力。这个平台不仅让Agent使用工具,还想让Agent参与“扩工具”这件事

能力方向常见平台ARTEX
任务执行扫描器或脚本为主Agent + Tool协作
资产管理多为结果列表资产图 + 探索图
流量复盘常依赖外部代理内建录制代理和检索工具
工具扩展人工接脚本Skill / Custom Tool / MCP一起管理
自动编排通常较弱有子任务、触发器、调度器

4.3 ScopeSentry同步:解决“目标从哪来”

很多自主测试平台,最开始就卡在资产喂给谁、怎么喂。ARTEX补了ScopeSentry同步:它可以按项目或任务维度把域名、子域、IP、端口、站点、端点这类资产导进来,再归并到平台内部的资产图。这意味着它不只适合“我手工输一个URL让Agent跑起来”的场景,更适合接到已有ASM或资产测绘链路后面

五、使用场景

场景1:内网或私有化测试环境

给一组内部站点做持续探索,把接口、参数和指纹自动沉淀到资产图里。PostgreSQL持久化了状态,任务不会因为聊天窗口关闭直接丢掉。

场景2:接在ASM平台后面做二次探索

先由ScopeSentry这类平台测绘资产,再把结果同步进ARTEX,让Agent继续按站点和端点深挖。对大型目标来说,比纯手工喂URL更稳。

场景3:多Agent协作排查

一个Agent做信息收集、另一个做漏洞验证、Planner负责全局协调——全部通过“黑板”(PostgreSQL)进行状态同步。

六、使用心得

✅ 值得肯定

  1. 靶场验证能力不错:在Vulhub、DVWA等靶场环境测试时,Worker能按Planner的意图有序执行,不会出现“扫到一半跑去干别的”的情况。

  2. 攻击图和探索图清晰简洁:前端用@antv/graphin渲染的图非常直观,节点和边的颜色、类型区分明确,一眼就能看出当前探索到了哪一步、哪些方向已经走通、哪些还在进行中。

  3. 主Agent和Worker调度清晰:Planner读取graph_overview做全局决策,Worker专注执行具体动作并写回结果。分工明确,上下文不打架。

  4. 流量录制是真香:跑完一轮测试后直接去查流量记录,请求响应一目了然,复盘效率翻倍。

  5. 部署简单:只需要一个PostgreSQL+Docker,不需要折腾Neo4j、Redis、消息队列这些额外组件。

七、二开建议

ARTEX是一个值得深度二开的项目。以下是几个我认为有价值的优化方向:

1. Planner并发瓶颈

当前架构是单Planner + 多Worker,所有意图生成都走同一个Planner loop。当多个Worker同时完成各自意图时,Planner只能串行处理。

建议:将通知机制改为事件驱动(用Channel直接触发而非Timer debounce),并考虑按探索子方向分片,让多个Planner并行规划不同分支。

2. 图查询性能优化

探索图用PostgreSQL关系表存储,边的遍历依赖多次SQL JOIN。当探索链路很深时(几十个节点串联),递归查询会变重。

建议

  • 对需要递归遍历的场景,用PostgreSQL递归CTE一次查询替代多次JOIN

  • 为频繁的图遍历路径加物化缓存

3. Worker超时回收机制

Worker对于大工具输出采用了写入磁盘文件的方式防止内存膨胀,但超时后的收尾机制可能出现“已拿到关键结果却被超时切断”的情况。

建议:在Bash工具层面做“最后N行”的增量截断,超时时把已有的有价值输出先写回探索图,再终止LLM调用,而不是一刀切。

4. 资产图关联索引

assets表依赖task_ids[]数组做任务归属,exploration_anchors做节点-资产关联,但资产之间的关联(如子域名→IP→服务)只能在应用层靠多次查询拼出来。

建议:加一张轻量的asset_edges表表达资产间拓扑(domain→resolves_to→ip、ip→hosts→service),让资产图真正可高效遍历。

5. 拦截规则优先级缓存

拦截规则每次变更需要手动Invalidate()重载。若规则数量增多,每次Match()逐条遍历会有性能损耗。

建议:按工具名分组建立二级索引(toolName → []compiledRule),匹配时只遍历目标工具对应的规则子集。

八、总结

ARTEX不是一个“在聊天框里接个LLM”的玩具项目。它把资产图谱、探索图、流量录制、任务编排和AI Agent真正融为了一体。

  • 双图模型解决了状态持久化和上下文管理的问题

  • Planner+Worker分工解决了规划和执行抢上下文的问题

  • 流量录制代理解决了执行留痕和可复盘的问题

  • ScopeSentry同步解决了目标资产从哪来的问题

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询