拿下百度Agent攻防赛总冠军、TSecBench跑分89.78:拆解AI自主渗透系统ARTEX的架构解析

admin 2026-09-04 05:06:08 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文拆解AI自主渗透系统ARTEX的架构,该系统获百度Agent+攻防赛全国总冠军及TSecBench89.78分。核心设计采用双图状态机将攻击状态持久化于数据库,通过资产图与探索图约束模型幻觉,配合防抖唤醒、数据库CAS抢单、共享TodoStore及跨Worker信息交换等机制实现5小时稳定自动化渗透。文章强调工业级安全智能体核心竞争力在于工程控制面,70%为确定性系统工程与数据约束,仅30%依赖大模型交互。 综合评分: 87 文章分类: AI安全,渗透测试,红队,安全工具


拿下百度Agent攻防赛总冠军、TSecBench跑分89.78:拆解AI自主渗透系统ARTEX的架构解析

原创

网络安全透视镜 网络安全透视镜

网络安全透视镜

2026年9月3日 22:40 新加坡

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

从单二进制架构到自研双图状态机,看懂AI自主渗透的真正门槛

▲ ARTEX 双平台战绩:TSecBench 89.78(第六)· 百度 Agent+ 靶场 67.83(第七),综合评分全国总冠军

9月3日下午,成都,百度安全应急响应中心(BSRC)联合快手、滴滴、度小满等十余家头部企业安全应急响应中心主办的首届「Agent+」攻防能力挑战赛线下总决赛圆满落幕。

经过全国 150 多支顶尖白帽与安全战队的激烈角逐、线上靶场实跑闯关与专家组严苛的作品方案评审,最终在 8 强总决赛巅峰路演中斩获全国总冠军的,是白帽李浦华领衔的开源项目 —— ARTEX

一组极具含金量的实战硬指标:

• 百度“Agent+”靶场实跑:8 月 16 日线上靶场(每队限跑两轮),跑分 67.83 / 100,榜单第七名,有效耗时 5 小时 8 分 18 秒,消耗 Token 456,495,944(约 4.56 亿); • 腾讯 TSecBench 盲测靶场:最新榜单跑分 89.78 / 100,第六名,有效耗时 5 小时 3 分 40 秒,消耗 Token 270,797,493(约 2.71 亿); • 综合总分全国第一:靠着 50% 靶场实跑 + 50% 作品评审的双轨制加权,ARTEX 最终以综合评分第一拿下全国总冠军

熟悉这次大赛赛制的人都知道,这场比赛的含金量极高,绝不是靠靶场盲跑“刷运气”就能赢的:

百度“Agent+”攻防挑战赛核心评审标准(50% + 50% 双轨制):

① 作品评审(50%):评委会对 Agent 作品及技术方案综合打分,严审全流程自动化逻辑、漏洞发现率、误报率、代码审计量级、单高危漏洞发现时长、大模型运行成本及人机验证时间比例② 靶场实测(50%):线上盲测环境每队严格限跑两轮,以系统实测积分硬碰硬。

为什么在靶场实跑第七的情况下,ARTEX 能在 50% 权重的全流程自动化逻辑与量化指标评审中力压群雄、一路逆袭夺得总冠军?

我把刚刚随比赛打完放出的开源版本 v0.3.7 全部 11 万行代码(Go 后端 4.6 万行 + Next.js 前端 4.6 万行,共 206 个 Go 源码、38 张数据库表)从底层实现挖了个底朝天。

看完你就会明白:它之所以能拿冠军,是因为它的整个底层架构,完全是冲着“工业级自动化闭环”和“防翻车量化控制”去设计的。今天我们就来硬核拆解它的杀手锏与源码隐患。

· · ·

一、为什么市面上的渗透 Agent,跑过20轮就成“人工智障”?

写过渗透脚本或玩过 LangChain 这一套的同学肯定深有体会:

你给 AI 塞个 ReAct 循环,配几个 Nmap、Curl、SQLMap 的 Tool,刚开始十来分钟表现极佳:端口扫描、识别 CMS、找登录框,有板有眼。

但只要任务稍微复杂一点——比如打一个黑盒多层网络、或者跑 5 个小时以上的自动化靶场,灾难立刻降临:

1. 幻觉鬼打墙:第 15 步明明已经测过 /api/v1/user 不存在注入,第 30 步它换个大小写又去扫一遍,白白烧掉几千万 Token; 2. 上下文自爆:一次目录字典爆破吐出来几千行回显,单轮交互几十万字符,窗口瞬间被打爆;一旦触发摘要压缩,之前找到的关键凭据直接被当垃圾切掉; 3. 串行链脱节:前面刚探出数据库报错,它不顺着注入,转头去爆破静态资源,攻击链路永远无法纵深突破; 4. 越权失控:缺乏边界防护,大模型偶发性生成破坏性指令或打出授权边界外,靶场直接判负出局。

这正好印证了赛事评审对“全流程自动化逻辑与人机验证比例”的要求:如果一个 Agent 动不动就断链、每测几个端点就要人来扶一把,它在工业落地评审中根本不及格。

实战攻防的本质是「状态流转」和「拓扑收敛」,而大模型天生是「概率预测机」。 ARTEX 在架构上下的第一剂猛药,就是彻底剥夺 LLM 维护攻击状态的权力,把状态焊死在数据库里

二、技术架构拆解:双图状态机,把记性焊死在数据库里

▲ 图 1:资产图 / 探索图双图状态机——锚点连接跨任务真值与单任务推进链

翻看 db/schema.sql 997 行定义,ARTEX 根本不把状态放在长上下文里,而是切成了两张互不侵犯的图:

1. 资产图(Asset Graph):全局真值库,杜绝模型污染

资产图管的是「客观物理世界」。节点类型严控在:root_domain / subdomain / ip / service / app / endpoint

很多 Agent 喜欢让大模型自己去归纳“这个 IP 属于哪个子域”。ARTEX 的做法极其决绝:Agent 只允许调用 insert_assets 提交原始数据,父子级联、去重逻辑全部由 Go 后端代码和数据库约束闭合。

在 PostgreSQL 里,后端针对资产表建了 9 个条件唯一索引按资产类型分支强制去重。哪怕模型抽风报了 100 次同一个端口,数据库直接拒绝重复写入,资产底座始终是干净的。

2. 探索图(Exploration Graph):每任务独立,严密的 DAG 因果链

探索图管的是「战术推演过程」。节点只有 5 种:

| 节点类型 | 攻防现实对应 | 状态机流转 | | — | — | — | | goal | 攻防总目标 / 验收条件 | open → met / abandoned | | intent | 最小可执行动作意图 | open → running → done / exhausted | | fact | 确认事实 / 否定性结论 | confirmed / dismissed | | finding | 已确认的漏洞利用成果 | confirmed / dismissed | | hint | 人工输入的战术插手提示 | active → consumed |

更绝的是边关系。在源码中,边被严格限定为 4 种硬编码关系(schema.sql:220):

-- 数据库死规则:严禁自环,严禁胡编关系类型
CHECK (rel IN ('spawns','derived_from','yields','proves'))
CHECK (src_id <> dst_id)

这构成了严丝合缝的因果血缘: goal 派生(spawns)出意图 A; 意图 A 运行产出(yields)了事实 A(端口探测与报错回显); 事实 A 推导派生(derived_from)出意图 B(凭据爆破或越权); 意图 B 彻底证明(proves)了最终漏洞 Finding!

两图之间,只靠一张关联表 exploration_anchors(node_id, asset_id) 连接。

这就是为什么它能打出全流程自动化高分:上下文即使全丢,AI 重启后只需做一次 SQL 查询,就能按图索骥恢复整个战场的因果推演状态。

三、核心代码实现:打靶5小时不翻车的4个杀手锏

▲ 图 2:Planner–Worker 事件驱动调度——共享 TODO、数据库行级 CAS 抢单、防抖唤醒

深入到 server/engine.go 和 agent/,能挖出 4 个真正让它在总决赛中脱颖而出的硬核技术细节。

细节 1:Debounce 事件唤醒 + 数据库 CAS 抢占

ARTEX 在 server/engine.go:763 里做了一个极度老练的 800ms 防抖批处理

// 合并高并发下的图变更通知,避免连续唤醒 Planner 造成 Token 浪费
timer := time.NewTimer(e.debounce) // 800ms
drain: for {
&nbsp; &nbsp; select {
&nbsp; &nbsp; case <-t.notify:
&nbsp; &nbsp; case <-timer.C: break drain
&nbsp; &nbsp; }
}

任务中配置 3 个并发工作 Worker。Worker 抢活不靠任何高大上的分布式中间件,纯靠数据库单行原子 Update(engine.go:1181 claimNext):

UPDATE exploration_nodes
SET state='running', owner=$1, updated_at=NOW()
WHERE id=$2 AND state='open'
-- 判断 RowsAffected() == 1,抢到即跑,并发零冲突!

配合部分索引 idx_expnodes_frontier(仅索引 open 状态),多 Worker 并行领任务开销几乎为零。

细节 2:跨唤醒的共享 TodoStore,拆解串行深链

这是保证单高危漏洞发现时长的关键机制。

在盲测靶场里,深度漏洞都有极其严密的利用时序。Planner 在设计上虽然“每次唤醒都是全新会话”,但它在进程内存里挂载了一份跨唤醒常驻的 TodoStoreagent/planner.go:44)。

每轮唤醒时,系统把当前待办动态注入输入:只有当前置步骤已完成、且依赖的 Fact 已经被证实录入后,系统才派发下一步的 Intent!

这就实现了:既拥有轻量单轮交互的低成本,又能像人类黑客一样有条不紊地推进 5~6 层的深层利用链。

细节 3:过程级信息交换(跨 Worker 痕迹检索)

多 Agent 最怕信息孤岛。Worker 1 探测某个接口时回显了一个堆栈报错,虽然不是漏洞,但暴露了内网中间件版本。

ARTEX 在 Worker 工具集里加入了 search_all_worker_traces,底层直接基于 activity 过程执行表进行模糊检索:

一个 Worker 踩过的坑、收集到的微小碎片,能立刻被其他并行的 Worker 检索复用。信息不是死板的只读报告,而是全动态流转的过程痕迹。

细节 4:强制权限收缩,严禁模型自己宣布“测完了”

在自动化的量化指标里,“误报率”和“有效覆盖率”是关键打分点。

0.3.5 版本的提交记录里曾抓出过一个真实 Bug:靶场要求资产覆盖度达到 100%,Planner 跑了 40% 就偷懒调用完成函数试图交卷。

作者在 agent/toolcatalog.go:59 做了一个彻底的操作:把 goal_met 工具从所有 Agent 工具集里永久解绑!

五、总结:它给攻防自动化指了一条什么路?

AI 攻防智能体的核心竞争力,绝不在于提示词有多花哨,而在于工程控制面的厚度。

真正的工业级安全智能体:70% 是经典的分布式系统工程、确定性状态机与数据约束,只有 30% 才是大模型交互。

你要用强约束的资产真值库去兜住底线; 你要用有向无环图去收敛模型的发散与幻觉; 你要用内嵌单二进制(Next.js 打包进 Go 产物,零依赖)让它能瞬间拉起; 你要用全量的流量留痕和可视化拓扑让人看清它的每一步。

ARTEX 还在飞速演进中。在 TSecBench 盲测靶场上飙到 89.78 分只是一个起点。

它走通了一条最艰难但也最正确的路:造一个确定性的钢铁骨架,把充满不确定性的大模型死死卡在它该在的位置上。

这,才是自主攻防智能体真正迈向实战的未来。

AI中转站:https://coding101.site

关于赛事与项目: 赛事:2026 百度安全“Agent+”攻防能力挑战赛(全国总决赛 · 成都) 项目:GitHub – Autumn-27/ARTEX(Go 1.26.3 / PostgreSQL / Next.js 16) 声明:本文技术分析均基于开源公开代码,仅供授权安全研究与技术探讨。

如果你对 AI 攻防自动化、Agent 状态架构感兴趣 欢迎在评论区分享你的实战踩坑经历

原创不易,点个「赞」和「在看」鼓励一下!


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:网络安全透视镜 网络安全透视镜 网络安全透视镜《拿下百度Agent攻防赛总冠军、TSecBench跑分89.78:拆解AI自主渗透系统ARTEX的架构解析》

一个BOLA漏洞 网络安全文章

一个BOLA漏洞

文章总结: 本文详细披露了在网络安全AI聊天平台中发现的对象级授权(BOLA)漏洞,任何认证用户可查看或篡改其他用户的私聊记录,影响严重。作者通过双账户测试验证
评论:0   参与:  0