跳到主要内容
AI教程

ARTEX 入门:搭建 AI 自主渗透测试系统并理解双图探索架构

本文介绍 ARTEX 的核心能力、安装方式、数据库与 LLM 配置、任务观察、资产同步、漏洞复测和升级流程,并解释其基于 planner、worker 与双图模型的自主探索机制。

ARTEX 入门:搭建 AI 自主渗透测试系统并理解双图探索架构

先了解使用范围

ARTEX 仅供个人学习、代码研究与本地隔离环境中的技术验证使用。根据项目声明,不得使用它对任何线上系统、网站、联网系统或生产环境执行扫描、探测、利用和攻击,即使目标属于自己或已经获得授权。开始前请确认你理解并遵守项目的 AGPL-3.0 协议、所在地网络安全法规以及仓库中的使用限制与免责声明。

本文将以本地部署和安全的隔离环境为前提,介绍如何安装 ARTEX、配置 PostgreSQL 与 LLM、从界面观察任务,以及使用资产同步和漏洞复测等功能。

ARTEX 是一套 Go 后端加 Next.js 前端的 AI 多 agent 系统,项目提供了在线 Demo用于查看交互效果。正式运行时,前端可以通过 Go 的 go:embed 内嵌到单个二进制中。

ARTEX 能做什么

ARTEX 围绕自主探索、任务编排和过程留痕构建。系统包含仪表盘、任务列表、会话执行过程、探索链路、发现、资产、资产覆盖图、流量记录、人在环路对话、Agent 管理和 LLM 配置等界面。

仪表盘
  • 多 agent 探索:由 goals、planner、worker 和 mainagent 等角色协作推进任务。
  • 双图模型:资产图保存跨任务共享的资产事实,探索图记录单个任务的目标、意图、事实、提示和发现。
  • 过程级信息交换:worker 可以检索其他 worker 的执行过程,复用其中的观察。
  • 人在环路:通过对话和拦截审批参与工具调用与关键操作决策。
  • 实时活动流:后端通过 SSE 推送活动信息,任务执行过程可以在界面中持续观察。
  • 流量记录:记录型 MITM 代理为工具执行保留流量和证据。
  • 资产同步:可以从ScopeSentry同步域名、子域、IP、端口、站点和端点等资产。
  • 漏洞复测:可以针对已有漏洞单独创建复测 Agent 会话,并保存结论、证据和会话链接。
任务列表

安装 ARTEX

方式一:使用一键安装脚本

这是项目推荐的安装方式。脚本会检测或安装 Docker,并提供全部 Docker 或本地编译运行两种选择。

仪表盘

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

选择全部 Docker 时,需要填写 PostgreSQL 密码,也可以直接回车让脚本生成随机密码。随后脚本会写入 .env 并执行 docker compose up -d。

选择本地运行时,可以连接已有数据库,也可以让 Docker 启动一个数据库。脚本会生成 config.json,编译带前端的单二进制并启动服务。

安装完成后访问 http://localhost:8787。首次打开时进入 /setup 设置管理员密码。

方式二:手动使用 Docker Compose

git clone https://github.com/Autumn-27/ARTEX.git
cd ARTEX
cp .env.example .env
docker compose up -d

编辑 .env,至少填写 POSTGRES_PASSWORD;如果希望通过环境变量配置 Anthropic,也可以填写 ANTHROPIC_API_KEY。容器镜像包含常用工具,./skills 和 ./data 会通过绑定挂载保留。

启动后访问 http://localhost:8787。如果需要远程 MCP,可以在系统设置中选择 http 或 sse。旧版 SSE 通常使用 /sse 建立事件流,并通过返回的 /message?sessionId=... 接收 JSON-RPC 请求;认证请求头按 Authorization=Bearer <token> 配置。

方式三:使用预编译二进制

从Releases下载对应平台的压缩包,解压后通常包含 artex、start.sh 或 Windows 下的 start.bat、skills/ 和 config.example.json。

任务

cp config.example.json config.json
./start.sh

请使用 start.sh 或 start.bat 启动,不要直接运行 ./artex。启动脚本负责进程守护,并支持页面一键更新后的重新拉起。需要后台运行时可以使用:

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

方式四:从源码编译

如果需要从源码构建内嵌前端的单二进制,可以先生成 Next.js 静态文件,再复制到后端的内嵌目录。

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
./start.sh

完成基础配置

配置 PostgreSQL

ARTEX 依赖 PostgreSQL。使用本地运行方式时,可以在 config.json 中填写数据库连接信息,或者通过 ARTEX_PG_DSN 覆盖配置。

{
  "database": {
    "host": "127.0.0.1",
    "port": 5432,
    "user": "artex",
    "password": "yourpass",
    "dbname": "artex",
    "sslmode": "disable"
  }
}

执行过程

服务每次启动时会幂等执行数据库结构初始化和迁移,包括必要的字段与索引变更。升级前仍建议备份数据库和 ./data 目录。

配置 LLM

探索功能需要 LLM。可以使用 Anthropic 或 OpenAI 的 API Key,也可以在界面的「LLM 配置」页填写。

export ANTHROPIC_API_KEY=sk-...

也可以设置 OPENAI_API_KEY。项目还支持通过 ARTEX_LLM_PROVIDER、ARTEX_LLM_MODEL、ARTEX_LLM_BASE_URL 和 ARTEX_LLM_PROXY 调整提供商、模型、地址和代理。

调整并发和端口

每个任务的 work agent 数量可以在「系统设置」中调整,默认值为 3。启动参数支持设置 Web/API 地址和流量录制代理端口:

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

启动脚本会把参数原样传递给 artex。

开始使用 Web 界面

探索链路

1. 登录并查看仪表盘

首次访问时设置管理员密码,然后进入仪表盘查看总览、Token 消耗和活动流。仪表盘适合快速判断当前系统是否正常运行,以及任务是否产生了新的活动。

2. 查看任务与执行过程

在任务列表中选择目标任务,可以查看其会话、工具调用、活动记录和探索链路。执行过程页面会展示 agent 的工作步骤,探索链路则用于理解目标、意图、事实和发现之间的关系。

任务执行过程探索链路

使用这些页面时,应优先在本地隔离环境中验证流程,并通过活动记录和流量记录检查 agent 实际执行了哪些步骤。

3. 查看发现与资产

发现页面集中展示任务产生的漏洞或其他发现,资产页面展示系统收集和归并的资产信息。

发现列表资产列表

资产覆盖图可以按力导向布局显示范围内资产,并高亮已测试节点,支持节点折叠和展开。它适合从整体上观察哪些资产已经被探索、哪些资产仍未覆盖。

资产覆盖图

同步 ScopeSentry 资产

如果已经在 ScopeSentry 中收集过资产,可以在 ARTEX 的「资产同步」页面接入数据源,避免重复收集。

发现

  1. 填写 ScopeSentry 地址和 API Key,完成数据源接入。
  2. 按项目或任务选择需要同步的目标。
  3. 选择资产类型,例如域名、子域、IP、端口、站点或端点。
  4. 执行导入,让 ARTEX 按公司资产范围归并数据。
  5. 在资产图中检查导入结果,并将其提供给 agent 进行后续探索。

资产图是跨任务共享的全局资产真值库。程序负责计算父子关系和去重 key,agent 提交的是原始资产信息。

理解 ARTEX 的双图架构

资产图:描述有什么资产

资产图中的节点包括 root_domain、subdomain、ip、service、app 和 endpoint 等。域名、子域、服务和端点之间通过父子关系组织,并归属于相应公司。

探索图:描述如何推进任务

探索图按任务独立保存,节点包括 goal、intent、fact、finding 和 hint。系统通过 spawns、derived_from、yields 和 proves 等关系记录推进链路。

两张图通过锚点关联。意图、事实和漏洞可以锚定到具体资产,因此既可以从探索方向查看涉及的资产,也可以从某个资产反查它在当前任务中被哪些方向测试过。

planner 与 worker 如何协作

引擎采用事件驱动闭环:图发生变化后唤醒 planner,planner 读取当前态势并派发意图;worker 领取一条意图,使用工具执行并将新的资产、事实或发现写回数据库;写回操作再次触发 planner。

资产

planner 只在发现未覆盖的新方向时派发意图。worker 完成自己领取的意图后停止,避免不同 worker 无边界地重复执行。

对于多步骤、存在前后依赖的探索链,planner 会维护按任务保留的共享 todolist。只有当前置步骤完成、对应事实已经存在时,下一步才会被派发。这种机制用于避免把整条链一次性并行展开。

检索其他 worker 的执行过程

后续 worker 可以使用 search_all_worker_traces(q) 在本任务其他 work 的执行过程中按关键字检索,也可以使用 list_worker_traces 查看已执行的 work,再通过 get_worker_trace(intent_id, step_ids=[...]) 获取指定步骤的完整内容。系统会自动排除当前 worker 自己的意图。

这类过程级信息交换可以帮助 agent 复用尚未正式写入 fact 的观察,同时保持每个 worker 只执行自己所领取意图的边界。

流量记录与审批

ARTEX 提供流量录制代理和工具审批门。流量页面用于查看工具执行产生的记录,拦截审批页面用于处理需要人工确认的操作。

流量记录

在安全验证时,建议同时查看任务会话、工具调用、活动流和流量记录,以便确认系统行为符合预期。人在环路对话也可以用于补充上下文和参与审批。

执行漏洞复测

任务详情的「复测」页签可以分页选择本任务漏洞、查看历史结论和证据,并单独发起复测。漏洞列表、漏洞详情、任务分组视图和资产视图都提供复测入口。

资产覆盖图

  1. 在漏洞列表或漏洞详情中点击「复测」。
  2. 按需填写修复版本、测试条件或限制。
  3. 启动独立的复测 Agent 会话。
  4. 在会话中查看复测过程,结束后查看结论与证据。

复测结论包括「仍可复现」「已修复」和「无法确认」。如果复测成功完成且结论为「已修复」,系统会自动更新漏洞处置状态;执行中、失败、停止或其他结论不会自动改变原状态。原始证据和报告会保留。

系统会预置可编辑的「漏洞复测」retester Agent。它可以在 Agent 管理中配置提示词、LLM、运行预算和工具;如果没有绑定专用 LLM,则使用全局激活配置。同一漏洞正在复测时会复用已有会话,停止、失败或服务重启后可以重新发起。

请注意,项目说明中指出,复测历史暂未纳入漏洞报告导出或任务归档包,也未自动关联流量包。演示模式只生成明确标注的模拟记录,不请求真实目标。

反向代理部署要点

前端、API 和 SSE 默认由同一个后端端口提供,因此通常只需要对公网开放 HTTPS 端口,并将 ARTEX 的 8787 保留在内网。实时活动流使用同源地址,一般不需要设置 NEXT_PUBLIC_SSE_BASE。

Nginx 等反向代理必须关闭 SSE 缓冲,并设置较长的读取超时,否则浏览器可能连接成功但无法持续收到活动事件。

location / {
    proxy_pass http://127.0.0.1:8787;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_buffering off;
    proxy_cache off;
    proxy_read_timeout 3600s;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
}

只有在 SSE 必须使用不同来源,例如独立子域时,才需要在构建阶段设置 NEXT_PUBLIC_SSE_BASE。该变量会在 next build 时固化到静态包,容器运行时再设置不会生效。

升级与回滚

流量

ARTEX 的升级会替换程序,但会保留 PostgreSQL 数据卷、./data 和 ./skills。推荐在系统配置页的「版本与更新」卡片中执行一键更新。更新流程会下载当前平台发布包、校验 SHA256SUMS、运行新二进制的冒烟测试,再由启动脚本完成替换。

如果校验或冒烟测试失败,暂存程序会被丢弃;新版连续三次启动失败时会自动回滚。上一版本会保留为 artex.old。不过数据库结构不会随程序回滚,因此升级前仍应备份数据库和 ./data。

更新会重启服务并中断正在运行的任务,应在空闲时执行。Docker 部署还需要注意:页面更新只替换程序,不会替换镜像中的工具链。要升级镜像,应执行:

docker compose pull artex
docker compose up -d artex

也可以使用仓库中的更新脚本:

cd ARTEX
./update.sh

本地开发与测试

开发环境可以使用 dev.sh 同时启动后端、流量代理和 Next.js 开发服务器:

./dev.sh

默认后端端口为 8787,流量代理端口为 8788,前端开发服务器为 5173。也可以分别运行:

go run ./cmd/artex
cd web && npm run dev
go test ./...

如果只需要预览前端而不启动后端,可以使用:

cd web && NEXT_PUBLIC_MOCK=1 npm run dev

总结

ARTEX 将 Go 单体后端、Next.js 界面、PostgreSQL、LLM agent、流量记录、审批机制和资产管理整合到一个系统中。入门时可以先通过 Docker 或安装脚本完成部署,再配置 PostgreSQL 和 LLM,随后从任务、会话、探索链路、资产覆盖图和流量记录逐步了解系统行为。

理解资产图与探索图的分工,是掌握 ARTEX 的关键:资产图回答“有哪些资产”,探索图回答“任务如何推进”。在任何测试前,请严格限定在本地隔离环境和项目允许的学习用途内,并遵守项目声明、开源协议及适用法律。