大家读完觉得有帮助记得关注和点赞!!!
摘要
智能体技能将指令、参考数据和可执行辅助程序打包在一起,使通用智能体能够执行专门任务。托管提供者可以将这些文件保密,同时出售对任务结果的访问权限,使技能本身成为一个有价值的攻击目标。现有的披露防御措施可以阻止请求技能本身或其文本复制的请求,但无法阻止客户提交服务本身设计要完成的普通任务。我们提出了Daydreaming,一种纯执行攻击,通过黑盒任务交互窃取多文件技能。受害者从未被要求透露技能或对重建内容进行评分。相反,Daydreaming自适应地创建精心设计的任务,其输出结果能够区分可能的隐藏行为。它测试单个行为,使用攻击者控制的影子智能体来选择设计,并通过存储的受害者结果和本地执行检查来完成每个文件。我们将三种嵌套的访问威胁级别形式化为Differential、Trace和Output,并重点关注Output级别,即攻击者只能看到最终响应和返回的文件。
在7项技能和4个受害者模型上,Daydreaming在Output级别恢复了原始技能86.8%的能力,比SigLeak高出近4倍。即使启用披露防御措施,它也以每个技能中位数32次受害者调用生成可安装的技能。这些结果表明,隐藏技能文件和过滤直接披露本身并不能阻止通过正常使用进行的功能重建。
1 引言
通用智能体能力广泛,但现实世界的专业任务需要深度。现实世界的专业知识通常不仅仅依赖于底层模型的能力:复杂的指令、领域特定的参考资料、调优参数、辅助脚本、工具和精心设计的工作流程可能都是可靠执行专业任务所必需的。智能体系统将其编码为一种技能,智能体在普通任务接口背后加载该技能 [5, 21]。一个不断增长的市场以软件即服务的方式出售此类能力,我们称之为技能即服务(SkaaS),其中供应商在自己的智能体上托管技能,客户按任务付费或订阅。软件即服务保留程序并按计算收费,而SkaaS保留专业知识并按判断收费。现有供应商已经在法律、自主医疗编码和安全运营等领域出售托管访问权限,有时按完成的任务收费。⁰ 此外,这些供应商将隐藏技能视为受保护的资产,其服务条款禁止对服务进行逆向工程或使用输出来构建竞争性服务 [7, 11, 13],并且由这种商业市场驱动的窃取攻击已经出现在单一提示设置中,例如特定领域的系统提示 [25, 31]。
然而,随着智能体系统将越来越专业化的知识打包到托管技能中,技能本身可能成为比单一提示更有价值的专有资产。构建这样的技能可能需要专家和工程师将领域知识转化为详细的决策逻辑、策划支持数据、调整阈值和参数,并通过反复的部署经验完善工作流程。例如,一个安全运营供应商为其托管技能只打出一行广告,“调查安全警报并返回带有证据的裁决”,但可能将其升级规则、威胁指标、参考数据和调优阈值中编码的多年工程和运营知识保密,而这些决定了哪些警报值得唤醒分析师。然而,其客户是那些自身网络产生这些警报的企业,因此每个客户可以将选定的警报置于技能面前,并观察供应商的决定。
技能的执行为输出揭示了一条先前防御措施未解决的攻击路径。当前防御措施侧重于披露路径:检测试图泄露隐藏技能的可疑请求,并阻止复制受保护文本的输出。另一方面,支持良性用户任务执行的工作路径仍然容易受到行为克隆、逆向工程和重建的攻击。因此,执行本身成为观察和行为推断的来源。
我们将这种用于行为推断的可观察性形式化为三个嵌套级别:Output(o₃)、Trace(o₂)和Differential(o₁),具体取决于部署向客户公开的信息。Output仅暴露最终响应和返回的文件,使其成为对攻击者最具限制性和挑战性的设置。Trace额外暴露智能体的中间工具活动,包括调用了哪些工具、它们的输入和返回结果;此类跟踪通常被公开,以便客户审计其未自行计算的工作。Differential通过揭示输出在输入受控变化下如何变化来提供更丰富的反馈。我们主要关注Output,因为仅凭最终输出就能成功的攻击在更丰富的观察可用时同样适用。
我们提出了Daydreaming,一种将任务执行视为黑盒系统识别问题的技能窃取攻击。Daydreaming是纯执行的:每次查询都要求受害者执行一个真实任务,受害者从未被要求透露其隐藏技能或比较、评分或纠正重建内容。这使得攻击即使在披露防御措施已经激活的情况下也能运行,我们在整个过程中都假设这一点。Daydreaming反复构建任务,使得可能的属性、技能计划或文件版本预测不同的结果,然后使用受害者的观察结果来排除备选方案并完善其重建。Daydreaming不是一次性合成目标技能,而是通过反复探测和修订来顺序重建它。我们主要通过它是否能在未见输入上重现受害者的任务表现来评估被窃取的技能,而不是通过其文件是否在文本上匹配隐藏的原始文件。
在七项技能和三个受害者模型上,Daydreaming仅使用Output访问就恢复了无技能与原始技能之间行为效用差距的35.8%–86.8%,每个技能平均使用31.3–32.8次受害者调用。它在每个受害者模型上在所有被评估的攻击和基线中实现了最高的行为效用。
因此,我们做出以下贡献:
-
我们将技能窃取攻击者可用的可观察性形式化为三个嵌套访问级别:Differential(o₁)⊇ Trace(o₂)⊇ Output(o₃)(第4节),并将所有先前攻击置于该轴上。我们还表明,没有任何级别能保证精确恢复隐藏源代码。
-
我们构建了Daydreaming,一种纯执行的技能重建攻击。每次查询都委托普通工作,从不请求隐藏技能或对重建内容进行评判。因此,即使启用披露阻止、提取输入分类和输出过滤,Daydreaming也能运行(第5节)。
-
我们展示了Daydreaming在最严格的访问级别(Output o₃)上有效,且受害者查询数量有限。在7项技能上,Daydreaming在Output级别恢复了受害者任务表现的86.8%,在Trace和Differential级别分别恢复了87.0%和86.0%,攻击者推理成本中位数较低(第6节)。
2 相关工作
智能体技能。 “技能”一词在先前工作中曾用于不同语境。一些工作将技能视为学习到的可重用抽象:PolySkill学习多态技能,将抽象目标与其具体实现分离,并可跨Web任务迁移 [32]。其他系统以不同形式外部化可重用行为:大型语言模型(LLM)可以合成可调用的工具,从而分摊昂贵的推理成本 [8],而智能体工作流记忆则归纳出重复的动作例程,并在后续Web任务中检索它们 [29]。这些工作展示了可重用智能体能力的形式,但并未将技能视为机密的、由提供者控制的资产。
我们研究一种提供者控制的技能:客户可见的名称和描述,与由服务提供者控制的隐藏指令和可选参考、资产或可执行辅助程序配对。根据开放技能标准 [5, 21],名称和描述保持可用,以便智能体知道技能何时适用,而指令文档和捆绑文件仅在任务执行期间按需加载。技能是围绕通用模型挂载的,而非合并到其权重中,允许重建的技能被复制、安装在另一个智能体上,并独立于受害者服务进行评估。在整个设计和评估过程中,技能指的就是这种提供者控制的设置。
窃取智能体技能。 黑盒模型提取已确立,查询访问可以恢复专有训练模型的功能,而无需重现其实现字节 [27];技能窃取遵循相同的思路,但目标是模块化、可部署的程序,由自然语言规则和辅助工件组成,并通过其重现的行为而非精确等价性来评估。自那以来,有三项并行研究触及了此设置,但各自的假设都比我们更窄。BBS提示智能体自行暴露其指令文件,并对泄露的文本进行评分 [28]。SigLeak读取执行轨迹,需要服务在抑制其技能的情况下运行一次 [10]。RedAct是一种防御措施,在发布前编辑轨迹 [30]。没有一项能在披露防御措施激活的情况下重建多文件技能。我们将其视为并行工作,它们启发了而非约束了我们的设计,第4节将每项工作置于可观察性轴上。
窃取系统提示。 最接近的研究设置是窃取隐藏的系统提示。PLeak优化对抗性查询以实现直接披露 [15],而其他工作则从输入-输出对或仅从答案中重建功能相似的提示 [31, 24]。一项现实世界研究表明,词汇相似性不足以衡量功能复制 [26],而提示混淆则研究了防御方面 [23]。与我们框架最接近的是,信息论分析表明,每次查询的可恢复性取决于暴露的是哪个响应通道 [18]。系统提示是文本,而技能是由指令、脚本和参考数据组成的可部署程序。因此,重建技能不仅需要恢复其措辞,还需要恢复其文件、它们的作用以及它们如何协同工作,并最终通过重建技能是否可执行来评判。
3 威胁模型
我们的威胁模型围绕一个作为SkaaS服务付费客户的攻击者展开,该攻击者在有限的B次查询预算内,旨在尽可能多地窃取专有技能的功能。攻击者只能看到公共技能卡 d = (ν, σ),其中ν是公共技能名称,σ是其简短描述。攻击者从一个无技能的智能体 𝒱∅ = (M, Π, 𝒯, ∅) 开始,目标是重建由托管受害者智能体 𝒱S = (M, Π, 𝒯, S) 使用的、供应商隐藏的技能 S。
在两个智能体内部,M是语言模型,Π是智能体编排策略(包括其系统指令和工具路由逻辑),𝒯是任务工具集。关键区别在于隐藏的技能:受害者挂载 S = (m, ℛ),其中m是主要指令文档,ℛ是一组有限的支撑资源,如脚本、参考文档、模板或数据文件。该技能是攻击者瞄准的专有资产,攻击者没有 S 的副本,也无法读取受害者的文件、内存、私有推理或技能加载操作。
在执行过程中,攻击者向 𝒱S 提交一个任务 x,并观察最终输出 yS(x),包括智能体的消息和任何返回的文件。当在部署设置中可查看跟踪时,我们还写作 trS(x) = ((g₁, r₁), …, (gₖ, rₖ)) 作为客户端可见的执行跟踪,其中 gᵢ 表示第 i 次工具调用及其参数,rᵢ 是对应的返回值。攻击者可以根据先前的观察调整后续查询,并使用自己的影子智能体和本地工具,但必须保持在 B 次查询预算内,且不能利用受害者的披露路径直接请求或恢复隐藏技能。
运行示例。 为了使威胁模型和符号具体化,我们以安全警报分类的 SkaaS 为例,如图1所示,贯穿全文。
-
攻击场景。 一家安全运营供应商托管一个警报分类智能体 𝒱S = (M, Π, 𝒯, S)。其公共技能卡 d = (ν, σ) 可能只暴露一个名称如“Alert Triage”和简短描述如“调查安全警报并返回带有证据的裁决”。隐藏技能 S = (m, ℛ) 包含供应商的分类指令 m 和支撑资源 ℛ,如升级规则、指标列表、阈值表、模板或辅助脚本。客户提交一个警报 x 并收到 yS(x),如裁决、支持证据和任何返回的文件。
-
攻击者的知识和能力。 攻击者是付费客户而非内部人员。它看到公共技能卡 d = (ν, σ),知道接受的任务格式,并且最多可以提交 B 个自适应选择的警报。根据部署设置,它可能只观察 yS(x) 或也能看到客户端可见的执行轨迹 trS(x)。它无法读取隐藏技能、受害者文件、私有推理、内存或技能加载操作,所有披露防御措施保持激活。
-
攻击者的目标。 攻击者利用这些任务执行来构建一个可部署的重建 Ŝ = (m̂, ℛ̂)。目标不是恢复供应商的确切源文件,而是重现技能在新警报上的行为:例如,“升级供应商会升级的警报,同时放过良性警报”。

图1:运行示例,在提供者边界处分割。
[图描述:一个分为两部分的示意图。左侧是“客户可见”部分,显示技能卡 d=(ν,σ),包含名称“alert-triage”和描述“Investigate security alerts and return a verdict.”。右侧是“供应商隐藏”部分,显示隐藏技能 S=(m,ℛ),包含 SKILL.md(升级规则 m)、flow_stats.py(检测器 ℛ₁)、indicators.csv(参考列表 ℛ₂)、thresholds.json(校准截止值 ℛ₃)。中间有“提供者控制边界”分隔线。]
[图描述:三个并排的框图,分别对应 Differential (o₁)、Trace (o₂)、Output (o₃)。每个框显示一次执行。Differential 框显示一个警报 x 发送给托管分类智能体,同时发送给无技能双胞胎 𝒱∅,并显示两者的响应。Trace 框显示客户端可见的工具调用,如 detect_beaconing、port_entropy、lookup 及其结果。Output 框仅显示最终的分类报告。]
4 技能窃取可观察性的形式化
技能窃取攻击在攻击者能从受害者服务中观察到什么信息方面有所不同,但先前工作通常将可观察性设置隐含或视为可互换。我们通过定义三个嵌套的可观察性级别,将现有攻击置于该轴上,并以适用于所有三个级别的形式表达攻击者的目标,从而使这种区别明确。
4.1 三个嵌套访问级别
攻击者从一次执行中了解到什么取决于部署暴露了多少信息。我们在下面区分三个级别,以每个级别可用的证据命名,并使用图2中的运行示例来说明它们。
表1:三个访问级别的示例部署。
| Differential (o₁) | 开放模型权重 [2] 和已发布的测试工具 [3],技能与 enclave 分开服务 [4]。 |
| Trace (o₂) | 暴露工具调用及其结果的智能体、网关或遥测系统 [12, 6, 9, 22]。 |
| Output (o₃) | 仅返回已完成任务结果的服务,如自主医疗编码或按解决方案收费的支持 [20, 16]。 |

每个级别包含其下一级可用的观察结果,因此三个级别是嵌套的,索引越小表示攻击者假设越强。
-
Differential 级别 (o₁):攻击者知道堆栈 (M, Π, 𝒯),包括 Π 中的系统指令,并且可以在发送给 𝒱S 的任何输入上运行 𝒱∅。因此,攻击者拥有构建匹配的无技能双胞胎所需的所有信息。每个查询任务返回一个匹配对,并且因为所有其他组件保持不变,两次运行之间的差异可归因于挂载 S。这种比较仍然不会揭示隐藏源代码或区分诱导相同行为的技能实现。
-
Trace 级别 (o₂):攻击者既不知道 M 也不知道 Π,但读取 trS(x),其中包含智能体进行的工具调用及其返回结果。现实世界的产品发布此记录,以便客户审计其未自行计算的结果。由于没有无技能运行可用,观察到的行为可能源于基础模型 M 或编排策略 Π,而非 S。
-
Output 级别 (o₃):攻击者接收不到执行元数据,只观察最终消息和任何返回的文件。因此,可用证据仅限于最终结果中可见的行为。这是 Daydreaming 的主要设置,需要精心设计任务,其输出能区分关于隐藏技能的竞争性假设。
运行示例。 图2显示了所有三个级别的执行。在 Differential 级别,客户在同一模型上运行相同的测试工具,维护一个无技能双胞胎,并向两者发送相同的警报。供应商执行升级并命名发现,而双胞胎只返回摘要且不升级任何内容;这种差距隔离了由技能引入的行为。在 Trace 级别,供应商额外暴露其裁决背后的证据,因此计时窗口和测得的熵 6.4 与发现一起出现,并为编码在技能中的可能阈值或规则提供线索。在 Output 级别,仅返回最终裁决,因此可用证据仅限于哪些警报被升级以及决策如何描述。
部署设置。 表1给出了每个级别的一个部署示例。这些级别在提供者从一次执行中发布什么方面有所不同;技能本身保持在提供者的边界内。
表2:与最接近的技能窃取攻击的比较。
| BBS [28] | 要求受害者透露 SKILL.md 并读取泄露的文本。 | 泄露的指令文件文本 |
| SigLeak [10] | 正常运行任务并在抑制技能的情况下运行,然后比较轨迹。 | 从轨迹推断的指令 |
| Daydreaming | 发送为区分候选行为而选择的客户任务并读取其结果。 | 带支持文件的可安装技能 |
与现有攻击的比较。 BBS 依赖直接披露 [28],而 SigLeak 需要可见轨迹和匹配的技能抑制执行 [10]。相比之下,Daydreaming 仅使用普通客户任务结果,甚至在 Output 级别也能运行,并连同其支持文件一起重建技能。表2总结了这些差异。
4.2 为什么恢复是行为性的
三个访问级别暴露不同数量的证据,但没有任何级别能保证逐位恢复确切隐藏源代码。
命题4.1(确切源代码不可识别) 固定一个访问级别和两个具有相同公共卡但不同技能。如果每个自适应任务策略在两个技能下产生相同的轨迹分布,则没有随机化攻击者可以区分它们。在两者上的相等先验下,每个精确源估计器的成功概率至多为 1/2。
只要技能格式允许运行时既不查阅也不允许影响执行、持久状态或任何披露结果的内容,这样的不可区分技能在所有三个级别都存在。修改此类惰性内容会改变技能源代码,但不会改变其任务结果或可见轨迹;Differential 级别可用的匹配无技能执行同样不变。更强的访问可以消除更多候选技能,但无法消除这种模糊性。附录B给出了形式化交互模型和带有其他理论结果的证明。
因此,确切源代码恢复不是合适的目标。相反,我们测量重建技能是否能在新的客户任务上重现受害者的功能。设 𝒟ₑᵥₐₗ 为一个保留任务集。保留意味着其任务和验证器结果在 Ŝ 构建之前不可用:它们永远不会被用作受害者查询、影子智能体任务、本地测试、候选选择信号、停止条件或超参数调优数据。每个任务 x 有一个成功验证器 vₓ: 𝒴 → [0,1] 对返回结果进行评分。技能 P 的行为检查定义为

其中 y_P(x) 是挂载 P 时产生的结果。攻击者在 B 次受害者调用内最大化 U(Ŝ)。评估将此目标实例化为成功率和行为检查(第6节)。为完整起见,我们单独报告结构恢复。
5 提出方法:Daydreaming
5.1 概述
Daydreaming 在以下设置下工作:攻击者仅获得公共技能卡 d=(ν,σ)、访问 SkaaS 工作路径以提交普通任务,以及 B 次受害者调用的预算。攻击者的目标是重建挂载在受害者 𝒱S=(M,Π,𝒯,S) 上的隐藏技能 S=(m,ℛ),生成一个可部署的重建 Ŝ=(m̂,ℛ̂),尽可能多地重现受害者的功能。
关键方法:分层假设细化循环。 Daydreaming 不是一次性重建整个技能,而是从行为属性、候选技能计划,最后到具体文件版本逐步细化假设。在每一步,一个由攻击者控制的、无法访问 S 的语言模型(我们称之为攻击者模型)提出竞争性假设,并设计一个任务,在这些假设上预测不同的可观察结果。然后 Daydreaming 通过受害者的工作路径执行该任务,并使用观察到的结果来选择或修订更受支持的假设。
在比较竞争性假设时,Daydreaming 运行本地影子智能体来预测每个备选方案在精心设计的任务上的行为。一个通用影子在没有技能的情况下执行任务,提供无技能基线,而一个候选影子使用候选技能计划执行相同任务,提供该假设预测的行为。然后 Daydreaming 将这些本地预测与受害者的观察结果进行比较,以确定哪个假设更受支持。
架构:三个层次阶段和一个共享循环。 Daydreaming 将技能重建组织为三个层次阶段,而每个阶段遵循相同的假设细化循环。在各个阶段中,被识别对象变得更加具体,从行为属性到候选技能计划,最后到完整的文件版本,使攻击者的重建更接近隐藏技能。
-
阶段1——属性。 属性 c 是 S 的一个可测试行为,如升级截止值或结果排序。阶段1返回已测试的属性记录 P、其任务和结果在 𝒪 中,以及在受害者结果中观察到的文件名在 A 中,作为阶段2生成候选技能的输入。
-
阶段2——候选技能计划。 候选技能计划 Hᵢ 描述草稿指令以及支持文件的路径、用途和草图。阶段2比较共享已测试属性但在证据不完整处做出不同选择的计划。它返回一个修订后的计划 H⋆,作为阶段3文件版本化的输入。
-
阶段3——文件版本。 阶段3将 H⋆ 中的每个文件草图转换为完整的文件版本,比较它们,并修订选中的版本。完成的文件形成最终重建的技能 Ŝ。
-
一个共享循环。 在每个阶段内,Daydreaming 重复相同的假设细化循环:
-
更新与提议。 使用先前的任务结果更新当前识别并提议下一组备选方案。
-
设计与执行。 设计一个任务,在该任务上备选方案会产生不同结果,然后运行受害者以及该阶段所需的本地比较。
-
观察与选择。 比较结果,并选择更受支持的备选方案,或记录实验为未确定。
选中的结果在循环重复前更新当前假设,因此后续任务是从先前的观察中自适应选择的,而非来自固定任务列表。
关键策略:区分性任务。 在所有三个阶段中,Daydreaming 遵循一种策略来花费受害者查询:仅当提议的备选方案可以通过精心设计的任务(我们称之为区分性任务)分开时,它才调用受害者。阶段1使用区分性任务来区分属性的可能值,阶段2使用它们来区分候选技能计划,阶段3使用它们来区分一个文件的完整版本。如果没有区分性任务能分开备选方案,Daydreaming 不进行受害者调用;如果观察结果不支持任何备选方案,则该选择记录为未确定。
算法1 Daydreaming:通过普通任务执行重建技能。
1: 公共卡 d,受害者调用预算 B,观察级别 ℓ
2: 重建技能 Ŝ
3: (B₁, B₂, B₃) ← SplitBudget(B)
4: (P, 𝒪, A) ← InferProperties(d, ℓ, B₁)
5: (H⋆, 𝒪) ← SelectCandidate(d, P, A, 𝒪, ℓ, B₂)
6: Ŝ ← RefineFiles(d, H⋆, P, 𝒪, ℓ, B₃)
7: 返回 Assemble(Ŝ, 𝒪, P) ▷ 离线;零次受害者调用

图3:Daydreaming 的架构
[图描述:一个流程图,显示三个主要阶段(属性推断、候选选择、文件细化)以及一个共享的假设细化循环(更新与提议、设计与执行、观察与选择)。]
每个实验记录其精心设计的任务、观察结果、决策和支持证据到 𝒪 中。图3总结了三阶段架构和共享细化循环,而算法1给出了完整流水线。所有受害者调用共享固定预算 B,其余参数列于表14。附录C提供了完整伪代码,附录D给出了默认提示,我们的实现可在线获取。¹
5.2 阶段1:属性推断
目标和输出。 阶段1在决定这些属性如何组织成完整技能之前,学习隐藏技能的个体行为属性。它从公共卡 d、服务接受的任务格式、威胁级别 ℓ 和预算 B₁ 开始。它产生 P(一组已测试的属性记录)、𝒪(其背后的精心设计任务和受害者结果)和 A(在这些结果中观察到的辅助文件名)。P 中的每条记录包含被测试的属性、其备选方案、选定的结果和支持证据。阶段2使用 P 和 A 来构建候选技能计划,而 𝒪 保留供后续阶段和最终组装使用。
更新与提议。 攻击者模型从公共卡 d 建议的 n_seed 个可能属性开始。提示涵盖可能的能力、约束、过程、术语、输入/输出格式、决策规则和支持文件(见附录D)。对于每个属性 c,它提出 n_alt 个现实备选方案 𝒞(c)。新的受害者结果可能会修订现有属性或建议后续属性,因此后续实验取决于阶段1已学习到的内容。
设计与执行。 阶段1以三种方式设计任务,都遵循相同规则:提议的备选方案必须预测明显不同的任务结果。如果没有任务能分开备选方案,Daydreaming 不进行受害者调用。
-
普通行为。 对于结果排序、输出格式或决策行为等属性,阶段1选择输入使备选方案产生不同可见结果。自然适合一个任务的属性可以一起测试。然后受害者执行精心设计的任务。
-
数值截止值。 当被测试属性暗示截止值时,阶段1创建一个涵盖合理范围的排序批处理常规案例,同时保持其他输入固定。任务要求对每个案例做出一个决策。如果决策一致变化,后续自适应任务可以测试该变化周围的更窄范围。
-
计数规则。 当一个操作有多个合理的计数规则时,阶段1为备选方案预测不同确切总数的小输入。例如,在警报分类中,一个 DNS 数据包可能只计为 DNS,或计为 DNS 和 UDP,或计为 DNS、UDP 和 IP。任务要求受害者提供相应的总数。
每次受害者任务后,通用影子在没有技能的情况下执行相同任务。阶段1使用此比较来确定观察到的行为是特定于隐藏技能还是已可由通用智能体重现。受害者结果仍然是选定属性值的来源。
观察与选择。 Daydreaming 使用威胁级别 ℓ 下可用的最强证据:在 Differential (o₁) 级别,它还可以与匹配的无技能执行进行比较;在 Trace (o₂) 级别,它观察受害者的客户端可见工具活动;在 Output (o₃) 级别,它仅依赖最终消息和返回文件。对于普通行为,当结果跟随它时记录为已确认,当结果跟随另一个备选方案时记录为已反驳,否则为未确定。对于截止值,它要求决策在一致方向上变化一次;如果返回的材料暴露了确切比较,则用该值替换估计。对于计数规则,它选择其预测总数与受害者结果完全匹配的唯一规则。当结果不完整或不一致时,不选择任何截止值或计数规则。
阶段1还从已收集的结果中提取额外证据,无需额外受害者成本。它扫描存储的代码和任务结果,查找未由精心设计任务提供的模块名、函数名、调用、命令和路径。在受害者结果中找到的文件名只有在移除从精心设计任务中复制的名称和明显的任务输出文件后才添加到 A。
在记录进入 P 之前,其措辞仅限于受害者结果支持的细节。一个失败或未确定的测试,若只包含攻击者的猜测,则被丢弃。阶段1将每个精心设计任务、受害者结果、决策和支持证据添加到 𝒪。
运行示例。 更新与提议:阶段1提出安全发现要么按严重性排序,要么按检测时间排序。设计与执行:它创建一个报告任务,其中低严重性事件先发生,高严重性事件后发生,因此两个备选方案预测相反的行顺序。观察与选择:如果受害者将高严重性行放在第一位,阶段1记录严重性排序,并将返回的行顺序作为支持证据。后续循环可以将相同过程应用于升级截止值:提出合理范围,提交跨越该范围的警报批处理,并根据受害者决策变化的位置缩小截止值。
5.3 阶段2:候选选择
目标和局限性。 阶段1识别 S 的行为属性,但不确定这些属性如何组织成多文件技能。相同的观察行为可能来自指令、脚本或参考文件。因此,阶段2比较完整的候选技能计划,而非孤立的属性。它返回一个与观察行为一致的计划 H⋆,但不一定与供应商的原始文件组织一致。
更新与提议。 设 Hᵢ = (mᵢ, ℛᵢ) 表示候选技能计划,其中 mᵢ 是草稿 SKILL.md,ℛᵢ 中的每个条目指定支持文件的路径、用途和内容草图。阶段2构建一组 ℋ = {H₁, …, H_{n_H}} 个候选计划。每个计划必须保留 P 中已测试的属性,并包含 A 中观察到的文件名,同时在证据不完整的地方做出不同选择。
为了鼓励多样但合理的结构,攻击者模型提出 n_H 个代表性客户任务,每个任务将一个用户角色与技能的具体使用配对,并围绕每个任务草拟一个候选计划(见附录D)。一个计划也可能提议超出 A 的支持文件,因为阶段1可能未暴露隐藏技能使用的每个文件。
阶段2在轮次中成对比较计划。选中的计划用新支持的行为进行修订并进入下一轮,而未配对的计划则轮空。因此,后续轮次使用 P 和 A 中的原始证据以及在早期比较中累积的受害者结果。
设计与执行。 对于一对计划 (Hₐ, H_b),攻击者模型使用阶段2比较提示来构建 D(Hₐ, H_b),即会改变任务结果的行为差异(附录D)。仅在文件名或文件放置上的差异被排除,因为任何精心设计的任务都无法区分它们。如果 D(Hₐ, H_b) 为空,Daydreaming 不进行受害者调用。否则,它设计一个任务 x_{a,b} 来暴露一个或多个这些差异,并仅将该任务发送给受害者。攻击者模型还让每个计划的候选影子执行 x_{a,b}。候选影子接收 Hₐ 或 H_b 和任务 x_{a,b},并产生该计划预测的结果。设 y_v 为受害者结果,y_a、y_b 为两个候选影子结果。阶段2比较这三个结果,同时将更丰富的受害者观察保留在 𝒪 中。
观察与选择。 对于 D(Hₐ, H_b) 中的每个差异,阶段2检查 y_v 是跟随 y_a、y_b、两者还是两者都不。匹配更多差异的计划成为胜者。然后阶段2用受害者结果支持的行为修订它,包括另一个计划匹配更好的任何点,同时保留 P 和 A 要求的已测量属性和观察到的文件名。它将精心设计任务、三个结果、决策和修订后的胜者存储在 𝒪 中。
平局、结果不匹配任何计划或没有区分性任务都不能识别任何计划。由于阶段2必须为阶段3生成一个计划,它使用明确的回退:优先考虑对 A 覆盖更广,然后文件更少,然后更早的计划。此回退使三阶段循环继续进行。有 n_H 个初始计划,阶段2最多进行 n_H − 1 次成对比较。其输出 H⋆ 是最终修订的胜者。
运行示例。 更新与提议:两个计划都保留阶段1恢复的警报截止值,但 Hₐ 合并重复的指标命中,而 H_b 报告每次命中。设计与执行:阶段2创建一个包含相同指标两次的警报;受害者执行它,两个候选影子预测一个发现与两个发现。观察与选择:如果受害者返回一个发现,Hₐ 胜出并在下一轮前更新。如果两个计划仅在规则出现在 SKILL.md 还是脚本中有所不同,则没有任务能区分它们,布局选择将使用所述的回退。
5.4 阶段3:逐文件细化
目标和输出。 阶段2返回一个候选技能计划 H⋆ = (m⋆, ℛ⋆),其中 m⋆ 是草稿指令文件,ℛ⋆ 中的每个条目仅指定支持文件的路径、用途和内容草图。阶段3保持此文件结构固定,并将每个草图转换为完整的文件内容。它先处理支持文件,最后处理指令文件,以便最终指令可以引用已完成文件中的实际函数名、接口和路径。输出是最终重建 Ŝ = (m̂, ℛ̂)。
更新与提议。 对于每个支持文件 f ∈ ℛ⋆,攻击者模型首先将其路径、用途和草图扩展为一个完整版本。它将草稿 m⋆ 作为初始指令文件版本,并最后处理它。对于每个文件,它然后识别不确定的选择——例如,截止值使用 > 还是 ≥——并提出做出不同选择的完整版本(见附录D中的系统提示)。设 V_f 表示这组完整版本。每次比较后,选中的版本在其最弱的已检查行为处进行修订,并成为下一轮的起点。
设计与执行。 对于一个固定的文件 f,攻击者模型构建 D_f,表示 V_f 中版本之间会改变任务结果的差异(附录D)。如果 D_f 为空,Daydreaming 不进行受害者调用。否则,它设计一个任务 x_f 来暴露一个或多个这些差异,并将其提交给受害者。第一次传输不可用时,可以缩短并重试一次,两次传输都计入 B₃。我们用同样的任务 x_f 表示;设 t_{f,v} 表示遵循版本 v ∈ V_f 时产生的结果。阶段3稍后将这些影子结果与受害者结果 t_f 进行比较。任何额外的执行细节仍存储在 𝒪 中。
对于指令和参考文件,阶段3还针对阶段1和2中存储的任务-结果对比较版本。当早期结果反映由 f 控制的行为时,它提供了另一个比较,无需新的受害者调用。因此,阶段3每个文件最多获得一个新的可用受害者结果,并在适用时重用早期结果。
观察与选择。 对于每个版本 v ∈ V_f,阶段3检查 t_{f,v} 在 D_f 暴露的行为上是否匹配 t_f。对于指令和参考文件,候选影子还执行阶段1和2中存储的任务,并将其结果与存储的受害者结果进行比较。
与观察行为最一致的版本成为当前选中版本。攻击者模型修订其最弱的观察不匹配,并使用相同结果在攻击者端重复比较。如果其平均分数提高,或者没有当前版本在每个已检查行为上得分更高,则保留修订;附录中的算法4给出了完整规则。格式错误的文件、需要不可用外部副本的包装器以及更改恢复常数的修订被拒绝。在细化完每个支持文件后,阶段3最后针对其完成文件细化指令文件。
如果没有精心设计的任务能区分 V_f,或者没有返回可用的受害者结果,阶段3对指令或参考文件回退到阶段1和2中存储的结果,对可执行文件回退到本地测试。如果两个来源都不能区分版本,则标记 f 为未解决并保留初始有效版本。此回退允许循环继续。
运行示例。 更新与提议:对于检测器脚本,阶段3创建仅在恢复的截止值使用 > 还是 ≥ 上不同的完整版本。设计与执行:它向受害者发送一个恰好处于截止值的警报,将裁决存储为 t_f,并在攻击者端运行两个版本和本地测试。观察与选择:它保留匹配 t_f 的版本;本地测试拒绝一个陈述了正确比较但从未应用它的脚本。每次后续修订都重用相同结果。
5.5 组装
阶段3之后,Daydreaming 将选中的文件写入其计划相对路径。阶段2已经插入了 A 中的文件名,阶段3已验证这些路径仍然存在。组装然后执行两个受保护的离线清理:将固定电子表格范围和缺失值占位符替换为通用规则,并将绝对输出路径改为调用者选择。仅当重写移除了标记细节而未丢失恢复的接口或更改其他路径时,才保留重写;否则保留原始版本。这些检查不进行受害者调用,仅覆盖这些已知模式,因此其他任务特定细节可能残留。组装步骤出现在算法4的末尾。
6 评估
我们通过三个研究问题评估 Daydreaming:
RQ1:性能。我们评估 Daydreaming 在以下三个主要因素方面的性能:
-
相对于无技能和原始技能设置以及先前攻击和基线,Daydreaming 从最严格的 Output (o₃) 威胁级别恢复了多少效用?
-
Daydreaming 相对于原始技能可以实现多少结构恢复?
-
Daydreaming 的每个组件在不同阶段如何贡献,以及 Daydreaming 的效用如何随攻击者查询预算变化?
RQ2:可观察性。当受害者在不同威胁级别 o₁、o₂ 和 o₃ 部署技能时,Daydreaming 表现如何?
RQ3:可迁移性。一旦 Daydreaming 成功重建技能 Ŝ,它在不同受害者模型和编排/工具策略上是否仍然有用?
6.1 实验设置
数据集。 改编自 SkillsBench [19],我们选择7项技能作为窃取目标,详细信息总结于表14。我们根据现实世界用例的标准选择技能,涵盖规则/表查找、数值算法、过程/检查表、工作流编排和文档/工件生成等用例,我们还添加了安装原始技能必须比无技能条件提高任务性能的标准。
此外,遵循第4.1节定义的目标,我们从 SkillsBench [19] 中策划了一个包含5个任务的保留数据集 ℬ。其中的每个任务都有自己的输入 x 和可执行验证器 v_x。根据 SkillsBench [19] 的设计,每个任务需要一个或多个技能协同完成。例如,网络入侵任务需要 pcap-analysis 和 threat-detection 等技能。由于每个任务可能依赖多个技能,我们将其作为报告指标的基本单元。
表3:评估数据集的任务到技能映射。
| protein-expression-analysis | xlsx |
| pddl-airport-planning | pddl-skills |
| pddl-tpp-planning | pddl-skills |
| dapt-intrusion-detection | pcap-analysis, threat-detection |
| software-dependency-audit | cvss-score-extraction, trivy-offline-vulnerability-scanning, vulnerability-csv-reporting |
数据集中的每个任务完全保留,包括提示、输入和验证器从未用作受害者查询、影子智能体任务、本地测试或候选选择信号。表3也明确了任务-技能映射。
模型设置。 对于受害者模型选择,我们选择了闭源和开源模型,包括 claude-opus-5、gpt-5.6-sol 和 kimi-k3。此外,除非另有说明,我们选择 claude-opus-5 作为默认受害者。我们选择 gemini-3.7-flash 作为所有评估中的攻击者模型。所有受害者使用温度 0.2 和 top-p=0.95,而攻击者使用温度 0.7 和 top-p=0.95。对于每个重建技能,我们在 glm-5.3 上评估保留数据集作为评估的默认部署。RQ3进一步测试这些恢复技能在所有受害者模型上的可迁移性。
编排/工具策略设置。 我们选择 deepagents 作为默认策略设置,它由文件系统和几个基本工具构建而成。对于其他策略设置,我们还包含了 claude_agent_sdk、openai_agents 和 agno,详细信息见附录14。
威胁级别设置。 与我们的威胁模型一致,攻击者接收公共技能卡,但不接收技能 S、保留任务、验证器或受害者内存和推理过程。我们使用威胁模型定义的观察名称:Output 显示返回文本和文件,Trace 额外显示任务级工具事件,Differential 添加模型和测试工具堆栈以及匹配的无技能执行。这允许攻击仅适应其接收到的视图。
Daydreaming 设置。 默认每个技能的预算为 B=96,分为64次阶段1、12次阶段2和20次阶段3调用。攻击种子14-18个属性,每次探测最多分组四个,生成六个包假设,每个文件创建最多三个初始版本。Differential 无技能双胞胎调用与受害者预算调用分开记录。完整参数列表见附录14。
先前攻击和基线设置。 为了公平、资源对齐的比较,BBS 和 SigLeak 使用与 Daydreaming 相同的三个受害者、gemini-3.7-flash 攻击者和预算,同时保留其本地探测和停止规则,而非强制花费相同的调用次数。其本地输入是签名增强轨迹;因此我们将其标记为增强轨迹,并不声称 Output 威胁级别兼容性。成本以每种方法本地形式生成完整重建技能所需为准。
此外,我们评估了伴随此设置的两个额外基线,称为 Fixed Probes 和 One-pass synthesis,如下所述。对于 One-pass synthesis,攻击者模型仅获得公共卡 d,并被要求一次性生成重建技能,不允许其他查询。Fixed Probes 是一个比 One-pass Synthesis 信息更丰富的基线,因为攻击者模型可以提前设计所有任务并接收其结果。然后连同公共技能卡,它被要求生成重建技能 Ŝ。

图4:与先前攻击和基线的比较。
图描述:散点图,x轴为成功率(SR),y轴为行为检查分数(U)。显示 Daydreaming、SigLeak、BBS、Fixed Probes、One-pass synthesis 和原始技能在不同受害者模型上的位置。Daydreaming 靠近原始技能,在右上角。
6.1.1 指标
设 C 表示安装的包条件:无技能 ∅、重建技能 Ŝ 或原始技能 S。对于任务 b,由于受害者模型 M 和策略 Π 的随机性,我们总共运行 n_b 次试验以获得最终结果。对于索引为 i 的每次试验,它有一个最终验证器二元结果 y_bⁱ(C) ∈ {0,1}。因此,我们将第一个二元成功指标定义为

SR 表示严格的二元成功,即任务 b 的端到端完成。
另一方面,我们还将技能效用与一个跟踪相关指标进行评分,该指标捕获智能体在轨迹中的正确行为,而非最终成功。具体来说,给定试验 i、任务 b 和条件 C,该任务总共提供 m_bⁱ(C) 个中间验证器检查,而智能体可能通过其中 p_bⁱ(C) 个。我们将第二个行为检查指标定义为

U 表示行为效用。这是第4.1节中定义的 U(P) 的经验实例化。由于一个任务可能跨越多个技能,我们报告总体任务平均值如下:

我们进一步定义跨任务的归一化二元和行为成功恢复为

表示与原始技能 S 相比的改进比率。我们注意,0对应无技能,1对应原始技能,负值表示效用低于无技能,高于1的值表示效用高于原始技能。
我们还报告成本、耗时以及结构精确率、召回率和F1。为计算结构指标,我们将恢复的数值常量、阈值分支、工具前置条件和输出模式、文件路径和可执行脚本与同一技能原始版本中的对应项一一匹配,然后跨技能汇总计数。
6.2 实验结果
我们按三个RQ组织结果。所有分数使用第6.1节定义的保留任务和指标。
RQ1:性能。
端到端效用。
表4:保留任务上的 Output 级别结果。任务单元格显示 SR_b/U_b;汇总行显示 SR/U 和 NSR/NU。
| Protein expression | .571/.786 | 1.000/1.000 | .857/.929 | 1.000/1.000 | .714/.857 |
| Airport planning | .000/.357 | .143/.500 | .286/.571 | .000/.500 | .286/.571 |
| Purchaser planning | 1.000/1.000 | .857/.857 | .571/.643 | 1.000/1.000 | 1.000/1.000 |
| Network intrusion | .000/.153 | .000/.714 | .000/.398 | .000/.602 | 1.000/1.000 |
| Dependency audit | .000/.536 | .000/.750 | .143/.786 | .714/.929 | .143/.786 |
| SR/U (任务平均) | .314/.566 | .400/.764 | .371/.665 | .543/.806 | .629/.843 |
| NSR/NU | .000/.000 | .273/.716 | .182/.358 | .727/.868 | 1.000/1.000 |
表4首先在 Output (o₃) 威胁级别下比较了 Daydreaming 与无技能和原始条件。在重建中,kimi-k3 最强,将 SR 从 .314 提高到 .543,U 从 .566 提高到 .806。claude-opus-5 重建也提高了两个指标,达到 .400/.764。gpt-5.6-sol 重建达到 .371/.665,在两个指标上仍高于无技能。因此,重建质量取决于源受害者。
与先前攻击和基线的比较。 图4比较了 Daydreaming 与先前攻击方法和基线方法在三个受害者模型上的表现,我们将确切实验数字委托给附录14。x轴报告成功率(SR),y轴报告行为检查分数(U),右上角表示更强的整体性能。在所有三个受害者上,Daydreaming 在所有攻击方法中始终实现最高的行为检查分数,同时接近原始技能的性能。尽管 Fixed Probes 在 claude-opus-5 和 gpt-5.6-sol 上获得更高的 SR,但其行为检查分数明显较低,表明仅最大化 SR 不一定产生更有用或更忠实的行为。在 kimi-k3 上,Daydreaming 在 SR 和行为检查上都优于先前攻击,展示了在不同受害者模型上有效性和行为质量之间的良好平衡。
表5:claude-opus-5 的结构恢复。P、R和F1分别表示恢复分数的精确率、召回率和F1。
| 精确常量 | 104 | .111 | .010 | .018 |
| 阈值分支 | 31 | .111 | .032 | .050 |
| 工具前置条件/模式 | 19 | .000 | .000 | .000 |
| 文件路径 | 7 | .333 | .143 | .200 |
| 可执行脚本 | 2 | .125 | .500 | .200 |
| 常量(1%容差内) | 104 | .556 | .048 | .088 |
结构恢复。 表5进一步将重建结构与原始技能进行比较。结构恢复有限,常量和阈值分支获得 .018 和 .050 的F1,而路径和脚本达到 .200。结合之前端到端效用的实验,我们因此注意,有用的行为不需要精确副本来工作。
组件和查询预算。 在进入结果之前,我们简要回顾每个阶段中使用的每个组件,并介绍它们以更好地解释实验结果。
对于 Daydreaming 的阶段1,我们消融了两个基本组件,即属性标记机制(观察与选择),它将每个属性 c∈P 与证据标签关联,以及文件名选择协议(观察与选择),它使用受害者任务结果来过滤 A 中合理的文件名。我们消融了这两个机制,因为它们是构成阶段1属性级识别的最基本部分。
对于阶段2,我们消融了另外两个组件,即候选技能计划数量(更新与提议)和区分性任务生成(设计与执行)。对于第一个,我们将阶段2中的候选技能计划数量减少到1,意味着一旦攻击者模型提出一个技能计划 H,我们就将其视为 H∗ 并进入阶段3。对于第二个,我们消融了阶段2的区分性任务生成,而是要求攻击者模型提交与每个候选计划相关的普通工作,而不考虑它们的差异。由于阶段2侧重于每个候选技能之间的更细致区分,我们选择消融这两个机制。
最后,对于阶段3,我们消融是否逐文件细化对重建技能的效用有用。

图5:组件消融。
[图描述:条形图,显示完整 Daydreaming 与移除不同组件后的 SR 和 U。每个组件移除后 U 下降。]
图5显示每个被评估的组件都对恢复技能的行为效用有贡献。最大的效用下降发生在移除阶段1文件名选择协议和阶段2区分性任务生成时,分别将 U 降至 .624 和 .626。移除阶段1属性标记机制将 SR 从 .400 提高到 .497,但将 U 降至 .696,这可能解释为验证属性给整体行为提供了更强信号,但并非最终效果。将阶段2限制为一个候选技能计划和移除阶段3逐文件细化分别使 SR 保持不变为 .400,同时将 U 降至 .736 和 .714。这表明更强烈的信号,即 Daydreaming 的后续阶段主要对重建技能的行为成功有所贡献。总体而言,每次消融都降低了 U,确认每个组件都对重建技能的质量有所贡献。
表6:受害者调用预算扫描。
| 16 | .467/.740 | 15 | 7.07 |
| 32 | .433/.762 | 25.0 | 9.53 |
| 64 | .400/.764 | 29.6 | 12.31 |
| 96 | .476/.785 | 32.8 | 14.40 |
| 128 | .400/.788 | 29.3 | 12.94 |
表6研究了受害者调用预算 B 的敏感性。在所有技能评估的设置中,行为效用从 B=32 时的 .762 增加到 B=64 时的 .777 和默认 B=96 时的 .785,而 SR 非单调变化,在 B=32 时最高。因此,额外的受害者调用更一致地改善行为质量,而非原始任务成功率,在较大预算下收益递减。这表明更大的调用预算可以恢复行为成功 U,因为 Daydreaming 的每个阶段都允许更多预算进行细粒度区分。

图6:不同受害者模型规模下的消融。
图描述:显示在 GPT-5.6 家族(Terra, Sol, Luna)和 Claude 家族(Haiku, Sonnet, Opus)上,Daydreaming 的 SR 和 U。趋势非单调。
切换受害者模型规模。 我们进一步研究重建效果是否取决于受害者模型的容量。对于每个受害者,我们替换同家族不同规模的模型,同时保持其他一切固定,从而减少跨模型家族的混淆差异。图6显示模型规模影响任务成功和行为保真度,但趋势并非均匀单调。在 GPT-5.6 家族中,性能从 Terra 到 Sol 和 Luna 持续提高,表明更大的能力受害者模型不一定重建得更好。Claude 家族表现出不同模式,Sonnet 获得最高的 SR,而 Opus 获得最高的行为成功 U。在两个家族中,每个受害者模型都比无技能基线提高了 U,而 GPT-5.6-Terra 在 SR 上低于无技能基线。总体而言,受害者模型容量影响可恢复性,但家族特定的行为一致性似乎至少与受害者模型规模同等重要。
表7:固定精心设计任务结果下变化威胁级别
| Output o₃ | 返回文本和文件 | .400 | .273 | .764 | .716 |
| Trace o₂ | Output 加任务级工具事件 | .567 | .804 | .807 | .870 |
| Differential o₁ | Trace 加堆栈和无技能配对 | .544 | .731 | .804 | .860 |
RQ2:可观察性。 为了隔离可观察性的影响,我们使用 claude-opus-5 的相同冻结精心设计任务序列评估所有三个威胁级别。如表7所示,从 Output 到 Trace,SR 从 .400 增加到 .567,U 从 .764 增加到 .807。相应的归一化指标改进更显著,NSR 从 .273 增加到 .804,NU 从 .716 增加到 .870。Differential 表现与 Trace 相似,但 SR 低 2.3 个百分点,U 低 .3 个百分点,NSR 和 NU 分别低 7.3 和 1.0 个百分点。由于 Differential 暴露的信息严格多于 Trace,我们不将这种小幅逆转解释为额外可观察性有害的证据。相反,结果表明任务级工具事件已经暴露了恢复技能所需的大部分有用信息,而访问堆栈和配对无技能执行在此固定任务设置下提供的额外收益有限。总体而言,主要的可观察性增益来自执行轨迹,而非仅最终输出。
RQ3:可迁移性。 我们冻结每个重建技能,并在四个部署模型和四个编排/工具策略上评估它,不向受害者发出任何额外查询。图7报告归一化成功恢复(NSR)和归一化行为效用(NU)。

图7:受害者模型迁移;迁移条目报告 NSR/NU。
图描述:热图或表格,显示从三个源受害者(Opus-5, GPT-5.6-Sol, Kimi-K3)重建的技能在四个部署模型(Opus-5, GPT-5.6-Sol, Kimi-K3, GLM-5.3)上的 NSR/NU。非对角线值显示可迁移性。
实验结果表明,重建技能并非专属于提取它们的模型,但其可移植性强烈不对称。Opus-5 重建是最广泛可迁移的:它在所有四个部署模型上仍然有用,并且值得注意的是,在 GPT-5.6-Sol 上的表现比在其源匹配部署上更好。Kimi-K3 重建表现出更具选择性的迁移形式,在几个部署上仅表现中等,但迁移到 GLM-5.3 尤其好。相比之下,GPT-5.6-Sol 重建相对脆弱,未能在 Opus-5 上提供可测量的收益,且仅微弱迁移到 GLM-5.3。这些非对角线成功表明,匹配源和部署模型既不是强迁移的必要条件也不是充分条件。相反,一些重建程序似乎是广泛可执行的,而另一些则仍然依赖于模型特定的执行行为。
NSR 和 NU 进一步揭示了两种不同的迁移概念。在几个案例中,部署模型可以使用重建技能恢复任务成功,而无需重现源受害者的行为轮廓。例如,Kimi-K3 重建在 Opus-5 和 GPT-5.6-Sol 上保持中等 NSR,但其 NU 急剧下降,表明这些模型通过与原技能显著不同的行为达到成功结果。相反的模式也会发生:Opus-5 重建在 GLM-5.3 上保留相对较高的行为效用,尽管成功恢复有限。因此,跨模型执行可能保留技能的功能结果或行为特征,但不会同时保留两者。这种区别会被仅使用任务成功评估迁移所掩盖。
工具/编排策略迁移。 我们进一步改变用于执行重建技能的工具和编排策略。如表8所示,deepagents 表现最佳,达到 SR/U 为 .600/.833 和 NSR/NU 为 .909/.965,接近原始技能参考。agno 提供次强结果,为 .467/.755,而 claude_agent_sdk 和 openai_agents 都获得 .400 的 SR,但行为效用显著较低。这些差异不能仅由查询数量解释:claude_agent_sdk 使用最多的受害者调用,却获得最低的 NU,而 deepagents 以中等受害者调用实现最强结果。总体而言,可移植性不仅取决于部署模型,还取决于执行策略是否能忠实地实现重建技能。
表8:工具/编排策略迁移结果。
| deepagents | .600/.833 | .909 | .965 | 219 |
| claude_agent_sdk | .400/.631 | .273 | .234 | 355 |
| openai_agents | .400/.667 | .273 | .364 | 179 |
| agno | .467/.755 | .486 | .682 | 177 |
7 潜在防御
本文中的每个实验已经启用了一个三部分披露防护:一个提取输入检测器、SkillGuard⁵ 不披露指令 [28] 和一个用于复制受保护文本的输出过滤器。我们额外添加了四个在服务不同点作用的替代防御措施。D1 重写客户任务并添加不披露指令 [1]。D2 移除与隐藏技能共享受保护5-gram的回复或跟踪记录 [33]。D3 将 PSM 防护附加到系统提示 [17]。D4 缩短公共技能卡到其任务和路由线索,移除实现提示,如机制名称和常量。
我们使用 claude-opus-5 作为受害者,gemini-3.7-flash 作为攻击者,Output 访问和默认 Daydreaming 配置。我们使用作者的配置,并在 D0(原始防御)之上应用每个防御。我们将研究限制在与黑盒托管模型兼容的防御措施;需要权重、嵌入、注意力状态或令牌对数概率的方法不在该部署设置内。表9总结了四种替代防御措施。
表9:针对 Daydreaming 评估的防御措施。
| D0 | 无 | – | – |
| D1 | 查询重写 + 指令防御 | [1] | 提示 |
| D2 | 5-gram 输出过滤器 | [33] | 回复/跟踪 |
| D3 | PSM 防护附加 | [17] | 提示 |
| D4 | 广告最小化 | [14] | 技能描述 |
表10:在每个防御下重建技能在保留集上的有效性。SR 和 U 使用第6.1节的定义。
| D0 | .286 | .395 |
| D1 | .308 | .621 |
| D2 | .308 | .367 |
| D3 | .400 | .707 |
| D4 | .308 | .638 |
表10报告了与整个评估中相同的任务平均成功率(SR)和行为效用(U)。因为每个防御需要一次新的重建运行,D0 是该实验的匹配参考;各行不应与不同运行的重建进行比较。只有 D2 降低了 U,从 .395 降至 .367,且未降低 SR。D1、D3 和 D4 反而产生比 D0 更高的 U。因此,四种添加措施中没有任何一种能降低重建技能有效性的两个指标。
这种有限效果源于防御检查的内容。D1 针对提取形状的任务请求,而 Daydreaming 提交普通客户任务;它引起了八次模型拒绝,但未记录任何被阻止的输入或过滤结果。D2 直接作用于返回信息,因此更频繁地干预:它过滤了179个回复中的18个(10.1%),并编辑了271条跟踪记录。后者在 Output 级别不可见,因此不会改变本实验的观察结果。即便如此,剩余的任务结果足以重建具有 SR/U .308/.367 的技能。D3 改变指令遵循,而非合法任务结果中包含的信息,D4 仅移除攻击者的初始提示。
表11:每个防御下的攻击资源,七项技能总和。Q_T 和 Q_A 分别表示受害者任务和攻击者模型调用。
| D0 | 138 | 1128 | .223 | 78.84 |
| D1 | 156 | 1154 | 4.676 | 100.82 |
| D2 | 117 | 922 | .305 | 68.52 |
| D3 | 115 | 913 | .202 | 70.16 |
| D4 | 131 | 955 | .080 | 72.12 |
这些添加可以改变成本而不停止攻击。表11显示 D1 将攻击者花费从 $0.22 提高到 $4.68,七项技能的受害者端成本从 $78.84 提高到 $100.82,但其重建比 D0 更有用。D2 提供了唯一测量的效用降低——2.8 个百分点——但也减少了受害者调用数量且未降低 SR。因此,以可疑请求或复制文本为中心的防御措施并未直接解决通过合法任务执行累积揭示的行为信息。保护此工作路径仍然是一个开放问题。
8 讨论
“窃取”技能意味着什么?
Daydreaming 并不声称恢复供应商的确切实现。事实上,命题4.1表明,仅凭执行观察通常无法识别确切源代码恢复。相反,我们采用模型提取中的功能窃取概念:攻击者获得一个替代资产,重现经济上有价值的行为,而无需恢复原始实现 [27]。重建的技能可能在文件名、代码结构或实现细节上有所不同,同时保留用户付费的决策。相反,仅文本相似性并不意味着正确执行。因此,我们将保留行为效用作为主要评估指标,结构相似性仅作为支持证据。从提供者的角度来看,关键损失不是 SKILL.md 的泄露,而是托管能力的可移植替代品的创建。
可编程性和混淆。 一种自然防御是将敏感技能逻辑从提示和参考文件移动到通过窄类型接口公开的提供者控制代码中。隐藏轨迹 [30] 和混淆客户端可见组件 [23] 可以隐藏文件名、控制流、表和中间状态,减少攻击者可用的结构信号。然而,这并不能消除行为泄露:如果自适应查询仍然到达具有精确输出的确定性接口,黑盒识别仍然是可能的。因此,有效保护还需要限制输出精度并约束或审计自适应查询。这些措施增加实现成本,可能降低可调试性、可审计性或效用,而足够信息性的输出可能仍然使功能重建成为可能。
9 结论
我们提出了 Daydreaming,一种通过普通任务交互重建隐藏智能体技能的纯执行攻击。在多种技能和受害者模型上,Daydreaming 即使在仅 Output 访问下也能恢复大量保留功能,而无需直接请求受保护技能。我们的结果表明,当正常任务执行本身泄露足够的重建行为证据时,隐藏技能文件和阻止披露是不够的。因此,保护托管智能体技能需要解决通过工作路径而非仅直接披露的行为泄露防御措施。
A 评估细节
表12:默认 Daydreaming 参数。
| 种子属性 | 14–18 |
| 每个分组探测的元素 | ≤ 4 |
| 阶段1细化轮次 | 4 |
| 阶段1每个探测的内容尝试 | 2 |
| 阈值候选 / 二分次数 | ≤ 4 / 2 |
| 约定备选方案 | 2–4 |
| 包假设 | 6 |
| 每个文件的初始分支 / 标准 | ≤ 3 / ≤ 5 |
| 方面分数 / 生成次数 | 0–10 / 3 |
| 总目标预算 / 包 | 96 |
| 探索 / 区分 / 细化 | 64 / 12 / 20 |
| 阶段3方法 | EGAE |
| 文件准入 | 受害者证明的证据 |
| 受害者 / 攻击者输出上限 | 4,096 / 无 |
| 受害者 / 攻击者温度 | .2 / .7 |
| 受害者 / 攻击者 top-p | .95 / .95 |
表13:每个受害者载体的工具策略。Agno 不暴露文件系统或 shell 工具;其技能加载器是唯一的工具集。
| deepagents (ver. 0.7.6) | |
| 文件检查 | ls, read_file, glob, grep |
| 文件修改 | write_file, edit_file, delete |
| 程序执行 | execute |
| 任务委派 | task |
| claude_agent_sdk (ver. 0.2.139) | |
| 文件检查 | Read, Glob, Grep |
| 文件修改 | Write, Edit |
| 程序执行 | Bash |
| 技能调用 | Skill |
| openai_agents (ver. 0.20.0) | |
| 文件检查 | list_files, read_file |
| 程序执行 | run_bash |
| agno (ver. 2.9.0) | |
| 技能加载 | get_skill_instructions, get_skill_reference, get_skill_script |
表14:七个受控技能包的描述性特征。文件计数不包括指令文件。
| xlsx | 电子表格创建、编辑、分析和公式重新计算。 | 2,650 | 2 | 18,362 | 1 |
| pddl-skills | PDDL 加载、计划合成和正确性验证。 | 718 | 4 | 4,672 | 0 |
| pcap-analysis | 使用经过测试的 Python 实用程序进行 PCAP 分析和网络统计。 | 3,818 | 1 | 23,660 | 1 |
| threat-detection | 扫描、拒绝服务和信标检测阈值。 | 1,344 | 0 | 5,136 | 0 |
| cvss-score-extraction | 从漏洞源提取 CVSS 并具有回退处理。 | 2,368 | 0 | 9,163 | 0 |
| trivy-offline-vulnerability-scanning | 无需互联网访问的离线 Trivy 漏洞扫描。 | 1,706 | 0 | 7,180 | 0 |
| vulnerability-csv-reporting | 具有过滤和格式化的结构化 CSV 安全报告。 | 2,859 | 0 | 12,202 | 0 |
表15:与先前攻击和基线的比较。每个单元格报告 SR/NSR 在 U/NU 之上。
| 方法 | 威胁级别 | claude-opus-5 | gpt-5.6-sol | kimi-k3 | Q_T | Q_A | USD/技能 |
| 无技能(共享) | 神谕 | .314/.000 [0.6pt] .566/.000 | N/A | N/A | N/A | N/A | |
| 原始技能(共享) | 神谕 | .629/1.000 [0.6pt] .843/1.000 | N/A | N/A | N/A | N/A | |
| Daydreaming | Output | .400/.273 [0.6pt] .764/.716 | .371/.182 [0.6pt] .665/.358 | .543/.727 [0.6pt] .806/.868 | 31.3–32.8 | 160–209 | 3.47–15.07 |
| BBS† | Output | .225/−.284 [0.6pt] .485/−.295 | .236/−.249 [0.6pt] .443/−.446 | .167/−.468 [0.6pt] .424/−.515 | 12 | 17 | .0096–.0130 |
| SigLeak | 增强轨迹 | .433/.378 [0.6pt] .450/−.421 | .333/.060 [0.6pt] .371/−.707 | .367/.168 [0.6pt] .480/−.313 | 6.8–7.2 | 10.0–11.2 | 2.07–10.14 |
| Fixed probes | Output | .533/.696 [0.6pt] .640/.266 | .600/.909 [0.6pt] .637/.255 | .333/.060 [0.6pt] .269/−1.076 | 40 | 78.43–117.71 | 2.21–19.87 |
| One-pass synthesis(共享) | 无受害者 | .167/−.468 [0.6pt] .368/−.718 | 0 | 1 | .0083 |
NSR 和 NU 未裁剪,分别使用共享的无技能/原始宏观锚点 .314/.629 和 .566/.843。
输入检测器在受害者模型执行前拒绝了 251/252 个计划的 BBS 目标尝试。
表16:跨源受害者模型的候选逐任务结果。攻击者为 gemini-3.7-flash,部署模型为 glm-5.3,任务单元格报告 SR_b/U_b。汇总 SR/U 平均所有五个任务;NSR 和 NU 使用共享的无技能和原始宏观锚点。
| claude-opus-5 (Anthropic/L) | 1.000/1.000 | .143/.500 | .857/.857 | .000/.714 | .000/.750 | .400/.764 | .273 | .716 | 229 | .948 |
| claude-sonnet-5 (Anthropic/M) | .667/.833 | 1.000/1.000 | .667/.667 | .000/.333 | .000/.750 | .467/.717 | .486 | .545 | 214 | .882 |
| claude-haiku-4.5 (Anthropic/S) | .333/.667 | .333/.667 | 1.000/1.000 | .000/.619 | .000/.750 | .333/.740 | .060 | .628 | 159 | 1.000 |
| gpt-5.6-sol (OpenAI/L) | .857/.929 | .286/.571 | .571/.643 | .000/.398 | .143/.786 | .371/.665 | .182 | .358 | 219 | 1.000 |
| gpt-5.6-terra (OpenAI/M) | .000/.500 | .000/.167 | 1.000/1.000 | .000/.619 | .000/.750 | .200/.607 | −.363 | .147 | 200 | 1.000 |
| gpt-5.6-luna (OpenAI/S) | .667/.833 | 1.000/1.000 | 1.000/1.000 | .000/.500 | .000/.417 | .533/.750 | .696 | .664 | 170 | 1.000 |
| kimi-k3 (Moonshot/L) | 1.000/1.000 | .000/.500 | 1.000/1.000 | .000/.602 | .714/.929 | .543/.806 | .727 | .868 | 220 | 1.000 |
| gemini-3.7-flash† (Google/S) | 1.000/1.000 | .000/.333 | .333/.333 | .000/.214 | .000/.500 | .267/.476 | −.150 | −.327 | 191 | 1.000 |
| 无技能(共享) | .571/.786 | .000/.357 | 1.000/1.000 | .000/.153 | .000/.536 | .314/.566 | .000 | .000 | – | 1.000 |
| 原始(共享) | .714/.857 | .286/.571 | 1.000/1.000 | 1.000/1.000 | .143/.786 | .629/.843 | 1.000 | 1.000 | – | .980 |
NSR 和 NU 未裁剪,分别使用共享的无技能/原始宏观锚点 .314/.629 和 .566/.843。
此行重用攻击者模型作为源受害者,并从七受害者总结中排除。
表17:结构相似性与结果之间的候选 Spearman 相关性。U 表示分级效用,SR 表示严格二元成功,区间为聚类自助法 95% CI。
| 端到端 ROUGE-L | U | .037 | [-.454, .737] |
| 端到端 ROUGE-L | SR | -.225 | [-.547, .544] |
| 文件树 F1 | U | -.051 | [-.529, .365] |
| 文件树 F1 | SR | -.001 | [-.367, .388] |
| 技能文本余弦 | U | .145 | [-.546, .349] |
| 技能文本余弦 | SR | -.070 | [-.579, .401] |
| 结构 F1 | U | .054 | [-.471, .632] |
| 结构 F1 | SR | -.160 | [-.482, .495] |
网硕互联帮助中心



评论前必须登录!
注册