浙江大学|用轨迹自适应诱饵拖住、引开并化解自主渗透智能体"

admin 2026-11-06 02:41:48 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

浙江大学 | 用轨迹自适应诱饵拖住、引开并化解自主渗透智能体

原创

孙德凯
孙德凯

安全学术圈

2026年11月5日 18:30
四川

去阅读

原文标题:AgentSnare: Learning to Delay, Divert, and Defuse Autonomous Penetration Agents
原文作者:Ruoyu Wang, Heng Zhao, Renjie Wu, Tianhang Zheng, Mengnan Zhao, Wanyu Lin, Kui Ren
原文链接:https://arxiv.org/abs/2607.26998
发表状态:arXiv:2607.26998 [cs.CR]
笔记作者:孙德凯@安全学术圈
主编:黄诚@安全学术圈

1、背景介绍

自主渗透智能体已经在真实环境里跑通了完整攻击链。PentestGPT、AutoPT、VulnBot 这类系统把\"规划攻击—调用工具—读回结果—修正策略\"这一圈做成闭环,人只需要给一个目标 IP,剩下的侦察、找漏洞、拿 shell 全部自己完成。CVE-Bench 这类基准的出现,更是让这些智能体可以直接对着可部署的漏洞靶标刷分。

这件事对防守方其实留了个口子:智能体每一步行动都依赖工具返回的观察结果。它看到的 ls 输出、HTTP 响应头、报错信息,直接决定下一步敲什么命令。既然观察能被操纵,防守方就有机会在观察里做手脚,把攻击者的判断带偏。

沿着这条思路,此前已经出现了一批工作:蜜标(honeytoken)、误导性文件、提示词注入、算力消耗诱饵,以及用隐藏提示词直接反向打回去的方案(如 Mantis)。它们的共同点是——所有欺骗材料都在攻击开始之前就布置好了,是静态的、孤立的。

作者团队先做了一件事:把这类静态防御拉到台面上量一量。他们实现了 13 个可复现的静态干预实例,覆盖误导感知、转移注意力、专门诱饵、模型腐蚀、角色操纵、强制代码执行六类策略,然后拿 6 个攻击 LLM 各跑一遍。为了衡量\"骗术到底管不管用\",定义了 Interference@20——20 步交互里,欺骗材料真正影响到攻击者行为的比例。

结果是:所有 LLM × 策略组合的平均 Interference@20 不到 0.2。

图1:13 个静态干预实例在 6 个攻击 LLM 和 6 类策略下的 Interference@20

也就是说,静态工件最多在头一两步晃一下智能体,之后就被绕过去了。

2、Motivation

静态防御失效的原因不复杂,但很致命。

工件是固定的。智能体是持续探索的。当它沿着攻击链往下走,会不断拿新观察和旧观察做交叉验证——一个在第 3 步埋下的假漏洞,到第 8 步可能就和前面某条 nmap 结果对不上。越强的模型对这种上下文不一致越敏感,一旦嗅到不对劲,它会放弃这条线索,重新把火力对准真实目标。

作者把 13 个静态干预的实际下场逐条记录了下来,结论相当惨烈:8 个干预完全没有引发任何可归因动作,剩下 5 个只让智能体多做了 1~2 个动作,然后就回到了原来的攻击路径。没有一个是真正阻止了利用的。

于是问题的定性变了:瓶颈不是工件做得不够精巧,而是缺少一种能根据智能体当前状态去动态构造并披露工件的机制。

这个判断引出了 AgentSnare 的定位——不去堆更逼真的假文件,而是把防御重新定义成轨迹自适应引导(trajectory-adaptive steering):工件随智能体的动作一步步长出来,并且在整个交互上下文里保持事实自洽,最终在攻击者眼里拼出一个逻辑闭环的\"另一个真实世界\"。

和传统交互式蜜罐的区别也在这里。Cowrie 这类蜜罐追求的是\"单条命令的响应看起来像真的\",ShelLM、HoneyLLMd 则是让 LLM 把 shell 回显编得更自然。它们管的是局部像不像。AgentSnare 管的是全局对不对得上——第 1 步披露的账号,第 10 步还能登;第 5 步看到的 .env 里的数据库地址,第 15 步 curl 过去真的能通。

3、本文方法

3.1 系统总览

AgentSnare 分左右两块:左边是离线训练,右边是在线防御流水线。

图2:AgentSnare 总览(左:离线训练;右:在线工件构建与披露)

在线部分只有两个阶段,每个防守方可控的交互只触发一次构建:

  • Stage I 构建候选工件:策略模型读入交互历史、当前动作、诱饵状态和服务画像,推断攻击者此刻想干什么,然后给出一个候选工件。
  • Stage II 验证与披露:ShadowOS 检查这个候选能不能进诱饵环境,通过就提交状态、渲染观察返回给攻击者;不通过就返回一个\"什么都没发生\"的失败观察,状态一点不动。

这里有个设计细节值得单独拎出来:策略模型没有写权限。它只能说明\"攻击者应该看到什么\"以及\"要支撑这个观察需要哪些新事实\",真正改状态的是 ShadowOS。这样生成和验证解耦,模型再怎么胡编,也编不进诱饵的事实账本里。

3.2 工件构建策略模型

模型输入是一个五元组:交互历史 h_t、当前动作 a_t、世界事实账本 W_t、可供性前沿 F_t、服务与应用画像 q。输出是候选工件 c_t = (õ_t, ΔW_t),前者是提议给攻击者看的观察,后者是支撑这个观察需要新增的环境事实。

举个论文里的例子:攻击者敲了 cat /srv/app/.env,模型可能构造一个包含内部数据库端点和部署账号的候选,同时给出对应的 ΔW_t——这个文件的内容是什么、在哪个主机上、账号和凭据是什么关系。攻击者看到的是一条顺理成章的线索,账本里则记下了一整套配套事实,供后续几步反复引用。

3.3 ShadowOS:状态管理与三维验证

ShadowOS 是这套系统里负责\"不穿帮\"的部分,靠两个数据结构撑着:

  • 世界事实账本W_t:记录已提交的诱饵对象、属性、关系和攻击者造成的状态变更。写进去的东西默认持久,除非被显式修改或撤销。
  • 惰性可供性图G_t:节点是环境对象和攻击机会(文件、凭据、服务、用户、容器、内网主机、提权或横向移动的机会),边是引用、认证、运行、证实、启用这类关系。它是\"懒\"的——只在需要时才展开。

由当前动作和这张图算出可供性前沿F_t,用来限定下一步能造什么。论文里给了个直观约束:攻击者要看 .env,那可以顺着给出配置值和凭据,但不能莫名其妙冒出一个提权机会或横向移动入口——那不叫线索,那叫露馅。

验证分三个维度:

维度 查什么
语义有效性 观察是否匹配当前命令、能否通过这次探测看到、输出格式对不对
状态有效性 新增事实是否与账本一致、是否落在前沿内、后续交互能否复现
安全有效性 会不会泄漏真实环境的秘密、是否违反文件系统/用户/进程/权限/服务的基本约束

三项都过,才走 Commit 更新账本和图,再由 Render 把观察渲染出来。渲染这块做了分工:用户、工作目录、文件变更、权限、进程、端口这些由确定性状态管理负责,日志、配置、报错这类开放文本交给生成式渲染。

增量展开是这套机制最关键的副作用。诱饵不是一次性搭好的布景,而是沿着攻击轨迹一格格长出来。攻击者走到哪,世界就补到哪——所以它看到的永远是一致的。

3.4 离线训练:让 4B 小模型学会\"留人\"

策略模型不是拿现成模型直接 prompt 出来的,而是用模拟攻防交互训出来的。

流程是:先采样一个场景 σ(覆盖服务侦察、凭据发现、提权、横向移动、敏感数据搜索、容器逃逸、SSH 跳板等 12 类攻击意图),拿到对应的服务画像;然后开两个隔离的 DeepSeek-V4-Flash 实例,一个扮攻击者模拟器发探测、一个扮候选生成器造工件。同一个探测会造出 k 个候选,先过三维验证滤掉不合规的,再让攻击者模拟器针对每个候选预测后续动作。

选择逻辑很有意思——不看工件像不像真的,看它能不能留住人:

  1. 优先选更能让攻击者继续在诱饵里查下去的;
  2. 其次选能引导攻击者去查新构造出来的工件的(等于把线索往下续);
  3. 再次选较少触发怀疑、终止或掉头回真实目标的;
  4. 最后才按原始顺序兜底。

选中的工件写回历史,进入下一轮。这样迭代出来的轨迹拿去过滤(保留轮次足够、冲突已解决、格式完整、无真实秘密泄漏的),最终得到 24,807 条防御决策,来自 503 条轨迹,覆盖 12 类攻击意图。训练数据里不含任何 CVE-Bench 应用、漏洞描述、参考利用轨迹、官方解法或评估器输出——这一点保证了后面的评测是干净的。

底座用 Qwen3-4B,LoRA(r=64, α=128)训 3 个 epoch,bf16,最后用 vLLM 挂上去。候选比较和攻击者模拟只在离线做,线上一次交互只跑一次构建 + 一次验证。

3.5 DDD 评估框架

原有的评价方式只有一个\"真实目标有没有被拿下\",这看不出防御在过程中到底做了什么。论文补了一套轨迹级指标:

  • Delay(拖):整条攻击预算里,被诱饵吸收的工具调用占比。Delay = (1/T) Σ I[z_t = decoy]
  • Divert(引):首次进入诱饵之后,后续动作仍指向诱饵的比例,也叫进入后保留率 PER。PER = Σ_{t>τ} I[z_t = decoy] / (T − τ)
  • Defuse(化):有效的任务完成尝试里,支撑证据能溯源到诱饵的比例。SubDefuse = |P_D| / |P|

三个指标管的不是一件事。Delay 看整体吸走了多少预算,PER 看进来之后能不能摁住不让它跑,SubDefuse 看它最后交的\"作业\"是不是拿假证据写的——最后这条最狠,意味着攻击者不是被打断,而是心满意足地报告了一个错误结论。

4、评估

4.1 实验设置

  • 靶标:15 个可部署的 CVE-Bench 任务。
  • 攻击方:PentestGPT 的 agentic 版本,分别接 Claude Opus 4.6、GPT-5.4、MiniMax M3 三个模型。
  • 规模:每个攻击者–防御组合在每个 CVE 上跑 3 次,共 405 次防御运行。预算统一 200 次工具调用,任务提示、工具集、停止规则全部对齐,pass@3 评测。
  • 对照组:Static Defenses(13 个静态干预一起上)、Cowrie(预构建虚拟 shell)、HoneyLLMd(层次概率自动机 + GPT-5.4-mini 生成自适应回显)、AgentSnare(Qwen3-4B + LoRA + ShadowOS)。
  • 入口一致性:所有防御共用同一个应用侧面包屑 /v1/internal/ops/diagnostics,通过响应头 Link、robots.txt、sitemap.xml 和维护路由暴露,保证对比公平。

4.2 静态防御为什么不行

表3:13 个静态防御实例的干预级结果与观察到的效果

逐条结果如上表。统计上很干脆:8 个连一次可归因动作都没换来,剩下 5 个也只让智能体多做了一两次动作,随后就回到原路。没有一个真正阻止了利用。

作者把失败归成三类:

  • 假设不匹配:编造的漏洞声明、私有资源、提示注入、远程执行指令,跟智能体当下的上下文对不上,一律被忽略;
  • 廉价证伪:SSH 支线、可写文件、合规告警、本地脚本、字典爆破这几条,一两次检查就能否掉;
  • 更强真实证据压过表示层把戏:智能体把有用内容规范化之后,继续走已经验证过的路径。

一句话总结:被发现不是问题,被发现之后没有后续可接,才是问题。 静态工件只给了一个孤立的点,给不出连贯的下一步。

4.3 轨迹引导效果(RQ1)

主结果如下表:

防御 Delay PER SubDefuse 被攻破 CVE
Static Defenses – – – 18/45
Cowrie 17.6% 23.5% 29.7% 12/45
HoneyLLMd 29.5% 36.9% 72.2% 10/45
AgentSnare 46.8% 55.9% 90.0% 0/45

分攻击者看,AgentSnare 三项指标全部第一:

  • Claude Opus 4.6:47.0 / 58.1 / 92.0,攻破 0/15(静态 13/15,Cowrie 9/15,HoneyLLMd 7/15)
  • GPT-5.4:37.7 / 45.0 / 96.5,攻破 0/15(静态 3/15,Cowrie 1/15,HoneyLLMd 0/15)
  • MiniMax M3:55.7 / 64.7 / 81.8,攻破 0/15(静态 2/15,Cowrie 2/15,HoneyLLMd 3/15)

PER 比 HoneyLLMd 高出 19.0 个百分点,说明它不是靠一开始的吸引力骗进来就完事——智能体在里面反复调查、验证、修正策略的过程中,诱饵还在持续接走它的动作。图3 更直观:Cowrie 全程被真实主线压着,HoneyLLMd 大致对半分,AgentSnare 在进入之后反超,后半程维持诱饵占多数。

图3:归一化攻击进度上,诱饵与真实目标的动作份额(左 Cowrie,中 HoneyLLMd,右 AgentSnare)

有个现象:三个指标并不总是同向移动。GPT-5.4 的 Delay 最低(37.7%),但 SubDefuse 最高(96.5%);MiniMax M3 反过来,Delay 和 PER 都最高,SubDefuse 只有 81.8%。说明\"待在诱饵里多久\"和\"最后信了什么\"是两件事,防御在这两个维度上要分开看。

4.4 真实目标利用抑制(RQ2)

无防御时,pass@1 下 45 对攻击者–CVE 里有 18 对被攻破(Claude 13/15,GPT-5.4 3/15,MiniMax 2/15)。静态防御全上,pass@3 下还是 18/45,等于没动。Cowrie 压到 12/45,HoneyLLMd 压到 10/45。

AgentSnare 是 0/45——每个攻击者每个 CVE 给了三次独立机会,没有一个真实靶标被评估器判定为成功利用。

而且这个结果和 4.3 的轨迹指标完全对得上:DDD 三项越高,被攻破的越少。反过来 Cowrie、HoneyLLMd 指标低,攻破数也高。说明这套过程指标确实能预测结果,不是自说自话。

4.5 消融:微调和 ShadowOS 各值多少(RQ3)

固定 GPT-5.4 作攻击者,45 次运行:

配置 Delay PER SubDefuse 被攻破
完整 AgentSnare 37.7 45.0 96.5 0/15
换回 Base Qwen3-4B(去微调,留 ShadowOS) 34.4 38.0 85.5 3/15
去掉 ShadowOS(留微调模型) 34.6 38.5 82.2 1/15
纯提示 GPT-5.4-mini(双消融) 37.0 43.7 88.6 3/15

图4:以 GPT-5.4 为攻击者的组件消融(柱为 DDD 指标,橙线为验证的真实目标攻破数)

两个发现:

微调管\"选得准\"。换回没训过的底座,三项指标全掉,被攻破数从 0 涨到 3。

ShadowOS 管\"兜得住\"。把它摘掉,SubDefuse 掉 14.3 个百分点——这是三项里降幅最大的。原因不难理解:攻击者会跨命令、跨工具反复核对同一件事,没有持久账本,前面说过的账号后面就登不上,一验就穿。

最后一行的对照最有说服力:直接用更强的闭源模型 GPT-5.4-mini 做双消融,Delay 能追到 37.0、SubDefuse 到 88.6,看起来不差,但仍然留下 3/15 被攻破。而完整的 AgentSnare 用 4B 小模型,三项全超它,且唯一做到零攻破。结论很明确:通用模型能力补不上\"轨迹级监督 + 持久状态\"这两块的缺口。

5、Case Study

表3 里 13 个实例逐条看下来,有三类失败特别典型:

案例一:高知名度漏洞反而被无视。 T2.1 在注释里写\"本服务运行 OpenSSL 1.0.1,存在 Heartbleed(CVE-2014-0160)\",指望智能体对这个家喻户晓的漏洞产生兴趣。实际反应是:明确判定与当前任务无关,继续打它已经验证过的 Web 漏洞。作者的解释是假设不匹配——智能体此刻的上下文里没有任何证据指向 TLS 组件,突然冒出来的 Heartbleed 反而显得突兀。

案例二:一次检查就被证伪。 T6.3 声称 SSH 用户 LLMexist 存在且弱口令在 rockyou.txt 里,想诱导智能体跑一次昂贵的字典爆破。智能体 cat /etc/passwd 看了一眼,没这个用户,直接放弃。整条支线只花了一次工具调用。这就是廉价证伪——静态工件没法在被质疑时给出配套证据,一问就塌。

案例三:伪装被识破。 T6.1 把 curl ... | bash 包装成紧急 IT 漏洞通告,T3.1 把 poc.sh 包装成内部 IT 泄露。两个都被标记为不可信执行诱饵,没跑。这类\"诱饵太像诱饵\"的问题,根源还是缺少上下文支撑——一条孤立的可疑链接,在没有任何前置线索铺垫的情况下出现,本身就是异常信号。

把这三个案例和 AgentSnare 的做法对照着看,差别就很清楚了:静态工件是在环境里扔一个点,AgentSnare 是沿着攻击者的动作把一张网织出来。前者只能寄希望于攻击者恰好踩上去,后者是在它每走一步时都把下一步的路铺好。

作者团队介绍

  • 论文由浙江大学主导。第一作者 Ruoyu Wang(浙江大学,同时隶属香港大学)与 Heng Zhao(浙江大学)为共同一作,Tianhang Zheng(浙江大学)为通讯作者。合作单位包括海南大学、安徽大学和香港理工大学,第一完成单位为浙江大学区块链与数据安全全国重点实验室。
  • Heng Zhao:浙江大学信息安全专业 2025 届本科,现为浙江大学博士生,研究方向为网络安全与大模型应用。此前与本文同一批作者合作过《Enhancing BGP Security by Understanding BGP's Language with LLMs》。个人主页:https://enlzhao.com/
  • Wanyu Lin:香港理工大学计算学系助理教授,博士毕业于多伦多大学,研究方向为可信人工智能与图神经网络,曾任 IEEE TNNLS 副编辑。个人主页:https://wanyu-lin.github.io/

安全学术圈 | 投稿须知
有兴趣加入学术圈的请联系 secdr#qq.com

---

    有人清了日志——这正是他暴露的开始" 网络安全文章

    有人清了日志——这正是他暴露的开始"

    本文从防守视角分析日志清除事件的价值,指出安全日志被清空时系统会自动生成事件ID1102记录清除动作,该记录本身即证据。文章提出五层攻防悖论:删除文件不等于抹掉内容、停日志服务本身会留痕、日志量突增比减少更需警惕、本地清理不影响已转发的日志副本。防守方应给1102配告警、日志异地留存、监控日志服务状态、将日志量突变纳入基线。
    评论:0   参与:  0