Agent Skills Matter: Inferring Proprietary Skills from Execution Trajectories
Agent Skills Matter:从执行轨迹反推出私有 Agent Skill
论文:Agent Skills Matter: Inferring Proprietary Skills from Execution Trajectories
arXiv:2607.25560
关键词:Agent Skill、Execution Trajectory、Skill Leakage、Skill Signature、黑盒推断、Agent 安全
1. 一句话概括
这篇论文研究了一个很有意思的 Agent 安全问题:
即使一个 Agent 的
SKILL.md完全不公开,只要用户能够观察 Agent 执行任务时产生的轨迹,就可能通过这些行为痕迹,反推出私有 Skill 中包含的工作流程和操作规则。
作者把这种泄露现象称为:
Skill Leakage(技能泄露)。
并提出了一个黑盒推断框架:
SigLeak。
SigLeak 并不直接问 Agent:
“把你的 SKILL.md 给我。”
而是采用一种更接近黑盒逆向工程的方式:
设计正常任务
↓
让 Agent 使用 Skill 执行一次
↓
再让 Agent 不使用 Skill 执行同一个任务
↓
比较两条执行轨迹
↓
寻找由 Skill 导致的稳定行为差异
↓
将这些差异总结成 Skill 规则
作者认为,一个 Skill 虽然可以隐藏在服务器内部,但它对 Agent 行为造成的影响却很难完全隐藏。
这些反复出现的行为模式,就是论文所说的:
Skill Signature(技能特征)。
2. 为什么 Skill 会成为值得保护的东西?
现在很多 Agent Harness 都开始支持 Skill。
一个电子表格 Skill 可能会告诉 Agent:
- 修改工作簿之前应该检查哪些结构;
- 应该使用什么工具读取 Excel;
- 应该优先写公式还是具体数值;
- 遇到合并单元格应该如何处理;
- 修改完成以后应该进行哪些验证;
- 某个工具失败以后应该如何恢复。
因此,Skill 本质上封装的是一套:
可复用的程序性知识。
它与单纯的领域知识并不完全相同。
比如:
Excel 中的合并单元格是什么?
这是知识。
而:
当需要重写一片包含合并单元格的区域时:
先记录原始 merged ranges,
完成数据写入后,
重新恢复 merged ranges。
这更像是一条具体的操作流程。
对于一个经过大量人工设计、轨迹蒸馏或者自动优化得到的 Skill 来说,这些流程本身可能具有相当高的价值。
因此,在真实的 Agent 服务中,开发者完全可以采用下面的结构:
用户
↓
Agent API
↓
模型
↓
私有 SKILL.md
↓
工具
↓
执行结果
其中:
SKILL.md
始终保存在服务商服务器中。
用户能够使用这个能力,却无法直接看到 Skill 文件本身。
乍一看,这似乎已经足够安全。
但这篇论文指出:
隐藏 Skill 文件,并不等于隐藏 Skill 对 Agent 行为造成的影响。
3. 执行轨迹可能成为一种侧信道
现代 Agent 系统为了让用户监督 Agent 的工作过程,通常会展示大量中间信息,例如:
模型回复
工具调用
终端命令
文件读取
网页访问
环境反馈
执行进度
错误信息
因此,用户真正能够观察到的并不仅仅是最终答案,而是一整条执行轨迹。
论文将使用 Skill $s$ 的 Agent 在任务 $q$ 上产生的用户可见轨迹表示为:
$$\tau_s=A(q;s)=[(a_1,o_1),(a_2,o_2),\dots,(a_T,o_T)]$$
其中:
- $a_t$ 表示第 $t$ 步 Agent 对用户可见的行为;
- $o_t$ 表示对应的环境反馈;
- $s$ 表示当前 Agent 使用的 Skill。
也就是说,即使用户无法读取:
SKILL.md
用户仍然可能看到:
Agent 先检查了什么
Agent 使用了哪个工具
Agent 以什么顺序完成任务
Agent 遇到错误以后怎么处理
Agent 最后进行了哪些验证
而这些行为,很可能正是由 Skill 决定的。
因此,Skill 中隐藏的程序性知识,会通过执行轨迹形成一种:
行为侧信道。
这就是论文提出 Skill Leakage 的基本出发点。

【Figure 1:Skill Leakage 的总体威胁模型。私有 Skill 本身保存在后端,但 Skill 对 Agent 执行行为产生的影响会通过执行轨迹暴露,攻击者可以利用这些轨迹反推出 Skill 中的程序性知识。】
4. 最关键的观察:不同 Skill 会留下不同的“行为指纹”
作者首先进行了一个预实验。
他们在电子表格任务上使用了三种不同来源的 Skill:
| Skill | 来源 |
|---|---|
| Anthropic Skill | Anthropic 官方 Skill |
| Trace2Skill | 从大量执行轨迹中蒸馏得到 |
| SkillOpt | 通过迭代优化得到 |
作者发现:
即使这些 Skill 最终都是为了提高电子表格任务能力,它们也会让 Agent 形成明显不同的执行模式。
论文中展示了一个电子表格任务。
Agent 需要根据指定规则统计内容,并将结果写回工作簿。
4.1 没有 Skill
没有 Skill 的 Agent 会直接理解任务、计算答案并写入结果。
但它忽略了任务中的一个条件回退规则,因此最终得到了错误结果。
也就是说,基础模型虽然具备一定的 Excel 操作能力,但并没有稳定地遵循这个任务中的全部流程要求。
4.2 Anthropic Skill
使用 Anthropic Skill 后,Agent 表现出比较明显的:
公式优先模式。
大致流程类似:
读取工作簿
↓
生成 Excel 公式
↓
写入公式
↓
尝试重新计算
↓
处理重新计算过程中出现的问题
↓
修复或检查最终结果
4.3 Trace2Skill
Trace2Skill 表现出的流程则有所不同:
显式分析任务条件
↓
处理条件回退逻辑
↓
计算结果
↓
写入工作簿
↓
重新打开文件
↓
检查目标单元格
这里明显更加重视:
遵循显式规则 + 修改后验证。
4.4 SkillOpt
SkillOpt 又表现出了另一套行为模式。
它更加倾向于:
读取工作簿
↓
直接计算目标结果
↓
写入具体数值
而不是像 Anthropic Skill 那样优先生成 Excel 公式。
这些现象说明:
Skill 的作用并不仅仅表现为“最终成功率提高了多少”,还会具体改变 Agent 怎样完成任务。
这些变化可能体现在:
- 如何理解任务;
- 是否检查已有资源;
- 使用什么工具;
- 工具以什么顺序调用;
- 遇到异常以后如何恢复;
- 如何构造最终结果;
- 是否进行结果验证。
作者将这种反复出现、能够体现 Skill 内部程序性知识的行为模式称为:
Skill Signature。
5. Skill Leakage 到底要恢复什么?
这里有一个非常重要的区别。
SigLeak 的目标并不是:
逐字逐句还原原始
SKILL.md。
攻击者真正希望获得的是一个新的:
inferred SKILL.md
只要这个新 Skill 能够恢复目标 Skill 的关键行为规则,并重新获得一部分原 Skill 的能力收益,就已经构成了有效的 Skill Leakage。
论文将这一过程表示为:
$$\hat{s}=G(d;A_{s^*})$$
其中:
- $s^*$ 表示隐藏的目标 Skill;
- $A_{s^*}$ 表示安装了该 Skill 的目标 Agent;
- $d$ 表示公开的任务场景描述;
- $G$ 表示攻击者使用的 Skill 推断方法;
- $\hat{s}$ 表示最终推断出来的 Skill。
攻击者可以获得:
公开的任务场景描述
+
对目标 Agent 的黑盒访问
+
用户可见的执行轨迹
但是不能获得:
原始 SKILL.md
Skill 相关私有资源
Agent 内部隐藏状态
任务参考答案
轨迹成功 / 失败标签
因此,这和普通的 Skill 蒸馏存在明显区别:
攻击者甚至不知道自己观察到的某一条轨迹究竟是正确还是错误的。
6. 最大难点:看到一个行为,怎么证明它来自 Skill?
假设我们观察到一个 Agent:
读取 Excel
↓
检查工作表结构
↓
检查 merged cells
↓
修改数据
↓
重新打开文件
↓
检查工作簿结构
现在我们观察到:
检查 merged cells
问题在于:
这一步真的是 Skill 教给 Agent 的吗?
也有可能:
- 基础模型本身就有这个习惯;
- 当前任务天然需要这一步;
- Agent Harness 默认要求这么做;
- 只是模型这一次随机产生了这个行为。
这就是论文认为 Skill Leakage 中最核心的问题:
归因。
如果只观察使用 Skill 后的轨迹:
$$\tau_s$$
其实很难判断某一个行为究竟是不是由 Skill 导致的。
于是 SigLeak 引入了整篇论文最关键的设计:
成对轨迹比较。
7. SigLeak 的核心:同一个任务跑两遍
对于同一个诊断任务 $q$,SigLeak 会让目标 Agent 执行两次。
第一次正常执行。
此时目标 Skill 可以被正常调用:
$$\tilde{q}_{on}=q$$
第二次则在任务前加入额外要求,例如:
Do not use any skills.
于是:
$$\tilde{q}{off}=c\Vert q$$
其中:
- $c_{off}$ 表示禁止使用 Skill 的额外指令;
- $\Vert$ 表示将两段内容连接起来。
这里需要特别注意:
目标 Skill 并没有真的从 Agent 环境中被卸载。
它依然安装在目标 Agent 中。
只不过第二次执行时,明确要求模型不要访问或者调用它。
于是,系统分别得到:
$$\tau_{on}(q)=A_{s^*}(\tilde{q}_{on})$$
以及:
$$\tau_{off}(q)=A_{s^*}(\tilde{q}_{off})$$
此时,两次实验中的:
基础模型
Agent Harness
任务内容
环境
基本相同。
主要变化就是:
是否使用目标 Skill
那么两条轨迹之间稳定出现的差异,就更加有可能来自 Skill 本身。
8. 为什么这种成对差分很重要?
例如,有 Skill 时 Agent 的执行流程是:
读取 Excel
↓
检查 worksheet
↓
记录 merged ranges
↓
修改工作簿
↓
重新打开文件
↓
验证 merged ranges
而没有 Skill 时:
读取 Excel
↓
检查 worksheet
↓
修改工作簿
那么共有部分:
读取 Excel
检查 worksheet
修改工作簿
很可能只是完成任务本身需要的行为。
但只有使用 Skill 时才出现:
修改前记录 merged ranges
修改后重新验证 merged ranges
这就提供了一个较强信号:
这些额外步骤可能来自隐藏 Skill。
所以 SigLeak 实际上并不是简单地:
Trajectory
↓
LLM 总结
↓
Skill
而是:
With-Skill Trajectory
\
→ 差分分析 → Skill Signature
/
Without-Skill Trajectory
对于第 $r$ 轮产生的诊断任务集合 $Q^{(r)}$,可以把这一过程理解为:
$$S^{(r)}=\bigcup_{q\in Q^{(r)}}\Delta(q;\tau_{on}(q),\tau_{off}(q))$$
其中:
- $\Delta$ 表示从成对轨迹的差异中提取候选 Skill Signature;
- $S^{(r)}$ 表示这一轮获得的 Skill 特征集合。
所以,SigLeak 相比“直接总结轨迹”真正重要的地方是:
它不是单纯学习 Agent 做了什么,而是在寻找 Skill 到底让 Agent 改变了什么。
9. SigLeak 整体框架
SigLeak 包含两个主要组件:
Generator
Skill Synthesizer
其中:
Generator
负责:
设计什么任务,才能最大程度地让隐藏 Skill 暴露自己的行为特征。
Skill Synthesizer
负责:
比较有 Skill 和无 Skill 的轨迹,从差异中提取 Skill Signature,并把这些规律整理成新的 SKILL.md。
整个方法又分成两个阶段:
Stage 1:Initial Skill Reconstruction
Stage 2:Active Discrepancy-Guided Skill Refinement

【Figure 3:SigLeak 整体框架。Stage 1 首先通过诊断任务和成对轨迹构造初始 Skill;Stage 2 根据当前推断出的 Skill、历史任务和已有行为差异,继续主动生成针对知识缺口的新任务,并迭代修正 Skill。】
10. Generator:不是随便生成任务,而是生成“诊断任务”
如果攻击者只是随便给 Agent 几个任务:
做表格 A
做表格 B
做表格 C
这些任务未必能够真正暴露隐藏 Skill 的特点。
所以 SigLeak 的 Generator 专门负责生成:
Diagnostic Tasks(诊断任务)。
作者给出了两个主要原则。
10.1 Task Diversity:任务多样性
生成的任务不能只是:
任务 A
任务 A 换一种说法
任务 A 再换一种说法
而应该覆盖明显不同的情况。
例如改变:
输入格式
任务类型
任务约束
输出要求
异常条件
边界情况
这样才能观察目标 Skill 在不同情况下是否持续表现出相同的行为规律。
10.2 Decision Density:决策密度
作者还强调:
一个好的诊断任务应该包含尽可能多的、有实际后果的决策点。
例如:
应该如何理解用户要求?
应该先检查什么资源?
应该选择哪个工具?
中间结果要不要验证?
工具执行失败后怎么办?
最终结果应该如何保存?
输出以后是否需要再次检查?
原因很直观:
Agent 需要做出的决策越多,隐藏 Skill 能够影响 Agent 行为的机会也就越多。
因此,更容易暴露 Skill Signature。
Generator 的过程可以表示为:
$$Q{(r)}=\operatorname{Generate}(C;\Pi)$$
其中:
- $C^{(r)}$ 是当前这一轮 Generator 可以看到的上下文;
- $\Pi$ 表示 Task Diversity 和 Decision Density 等生成原则。
11. Stage 1:先尽可能广泛地摸清 Skill
Stage 1 的目标是:
建立第一版推断 Skill。
这一阶段中,Generator 还不知道目标 Skill 到底是什么。
所以它最初可以利用的信息主要是:
公开的任务场景描述 d
也就是:
$$C^{(0)}={d}$$
论文实验中,Stage 1 首先生成:
6 个互补的诊断任务。
这些任务尽量覆盖不同类型的决策,例如:
任务理解
工具选择
中间验证
异常恢复
结果构造
复杂或边界操作
每一个诊断任务都会分别执行:
with Skill
without Skill
于是可以得到 6 对执行轨迹。
Skill Synthesizer 随后比较这些轨迹,从不同任务中寻找反复出现的行为差异。
最终得到第一版推断 Skill:
$$\hat{s}_0=\operatorname{Initialize}(S^{(0)})$$
也就是:
Initial SKILL.md
12. 为什么不能看到一次差异就直接写进 Skill?
因为 Agent 轨迹本身存在随机性。
例如某一次使用 Skill 的 Agent 恰好执行了:
检查文件大小
但这并不意味着原始 SKILL.md 中真的规定了:
必须检查文件大小
模型可能只是这一次临时做出了这个决定。
因此,Skill Synthesizer 更关注的是:
跨多个不同任务反复出现的行为差异。
例如:
任务 A:
有 Skill → 修改完成后重新打开文件
无 Skill → 不检查
任务 B:
有 Skill → 修改完成后重新打开文件
无 Skill → 不检查
任务 C:
有 Skill → 修改完成后重新打开文件
无 Skill → 不检查
那么:
修改完成后重新打开文件进行验证
就更可能是目标 Skill 中的一条稳定规则。
13. Stage 2:专门探索“还没有弄明白的地方”
Stage 1 的问题是:
6 个初始诊断任务不可能把一个复杂 Skill 中的所有规则全部暴露出来。
因此,作者设计了第二阶段:
Active Discrepancy-Guided Skill Refinement。
这一阶段不再进行广泛的随机探索,而是根据目前已经恢复的信息判断:
已经知道了哪些规则?
哪些规则仍然比较模糊?
还有哪些行为无法解释?
哪些情况以前从来没有测试过?
然后专门针对这些知识缺口继续生成任务。
此时 Generator 能够看到的上下文可以表示为:
$$C^{(r)}=(d,\hat{s}_{r-1},Summ(Q_p),S_p)$$
其中:
- $d$ 表示公开的任务场景描述;
- $\hat{s}_{r-1}$ 表示当前已经恢复出的 Skill;
- $\operatorname{Summ}(Q^{<r})$ 表示以前已经测试过的诊断任务摘要;
- $S^{<r}$ 表示此前累计观察到的 Skill Signatures。
于是 Generator 可以开始主动寻找:
当前 Skill 描述中的知识缺口。
14. Stage 2 如何更新 Skill?
获得新的成对轨迹以后,Skill Synthesizer 不会把之前的 Skill 整个推翻重新写。
它主要进行三类修改。
Add
出现之前完全没有观察到的新行为规律:
发现新证据
↓
增加一条新规则
Elaborate
之前已经存在一条规则,但内容过于模糊:
粗粒度规则
↓
利用新证据补充细节
Correct
新的执行轨迹与之前推断出的规则发生冲突:
发现旧规则存在错误
↓
修正已有规则
整个更新过程可以表示为:
$$s_r=Update(s_{r-1},S_r)$$
其中,$s_{r-1}$ 表示上一轮恢复出的 Skill,$S_r$ 表示当前轮新获得的 Skill Signatures。
如果新一轮轨迹没有带来有效的新信息,使得:
$$s_r=s_{r-1}$$
那么推断过程就可以提前停止。
否则继续迭代,直到达到预设的探针预算。
15. 原文案例:怎么一步一步推断出一条 Skill 规则?
论文附录给出了一个比较直观的电子表格案例。
这个案例也非常适合理解 Stage 1 和 Stage 2 的区别。
15.1 Stage 1:发现“修改前后都要检查结构”
Generator 首先设计了一个任务。
任务大意是:
在 Excel 中增加一列数据,需要进行跨工作表查询,同时处理缺失出生日期,并保持原始工作簿结构。
使用 Skill 和不使用 Skill 的 Agent 最终都完成了任务。
但是它们的执行轨迹出现了明显差异。
使用 Skill
在修改之前,Agent 会额外检查:
merged ranges
table definitions
修改完成以后,又会进行:
重新打开输入工作簿
重新打开输出工作簿
比较结构
比较公式
检查未修改区域
不使用 Skill
无 Skill Agent 并没有执行完整的结构检查和修改后验证流程。
因此,通过 Stage 1 中的多组轨迹,SigLeak 可以逐渐推断出类似下面的规则:
修改工作簿之前:
检查工作簿结构。
修改完成以后:
重新加载文件,
并验证工作簿结构是否被意外破坏。
这形成了一条初步的 Skill Signature。
16. Stage 2:进一步推断 merged ranges 应该怎么保护
经过 Stage 1,推断出来的 Skill 可能已经包含这样一条规则:
保持 merged layout
但问题在于:
这句话仍然太模糊。
例如:
如果这一次不是简单修改几个单元格,而是需要:
清空整片数据区域
+
重新写入数据
到底应该怎样保护合并单元格?
Stage 1 并没有回答这个问题。
于是 Stage 2 专门生成了一个更有针对性的任务,例如涉及:
删除重复数据
重新排序记录
重新写入数据区域
这种任务会迫使 Agent 对整个区域进行较大规模修改。
随后再次比较:
With Skill
Without Skill
两条轨迹。
16.1 使用 Skill 的 Agent
它会执行类似下面的流程:
检查 merged ranges
↓
检查公式
↓
检查样式单元格
↓
在清空数据之前记录原始 merged ranges
↓
重新写入数据
↓
恢复 merged ranges
16.2 不使用 Skill 的 Agent
则没有表现出完整的这一套保护流程。
于是,原本模糊的:
保持 merged layout
就可以进一步细化成:
如果需要重写整片数据区域:
1. 在清空数据之前记录原始 merged ranges;
2. 写入新的数据;
3. 数据写入完成之后重新应用 merged ranges。
这就是 Stage 2 的核心作用:
已有一个粗粒度规律
↓
发现还有没解释清楚的情况
↓
设计一个专门触发这种情况的任务
↓
重新构造成对轨迹
↓
观察新的行为差异
↓
细化 Skill
因此,SigLeak 并不是一次性的:
收集轨迹
↓
总结 Skill
而更像:
形成当前假设
↓
设计实验
↓
观察行为
↓
更新假设
17. 实验设置
作者在五类任务上测试了 SigLeak。
| Benchmark | 主要能力 |
|---|---|
| SpreadsheetBench | 电子表格操作与推理 |
| OfficeQA | 基于文档内容的问答 |
| SealQA | 面对噪声和冲突网页证据的信息搜索 |
| LiveMathematicianBench | 基于近期 arXiv 论文的数学推理 |
| ALFWorld | 家居环境中的长序列决策 |
实验同时覆盖了不同模型以及不同 Agent Harness,以测试这种 Skill Leakage 是否只存在于某一种 Agent 实现中。
18. SigLeak 的探针预算
主实验采用的配置为:
Stage 1:
6 个诊断任务
Stage 2:
每一轮 3 个诊断任务
最多进行 2 轮
因此,如果完整运行:
6 + 3 + 3 = 12
总共会生成 12 个诊断任务。
而每一个任务又分别执行:
With Skill
Without Skill
因此实际上需要观察成对执行轨迹。
19. 对比方法
作者设置了几个主要基线。
| 方法 | 核心做法 |
|---|---|
| Direct Generation | 只根据任务场景描述,直接生成一个 Skill |
| Naive Trace Summarization | 只观察使用 Skill 的执行轨迹,然后直接总结 Skill |
| BBS | 使用明显具有窃取意图的提示尝试直接提取 Skill |
| SigLeak | 正常诊断任务 + With/Without Skill 成对轨迹差分 |
其中最值得关注的是:
Naive Trace Summarization。
因为它对应了一个非常自然的问题:
既然 Skill 会反映在轨迹中,我直接看几条轨迹,让 LLM 总结规律不就行了吗?
如果这种简单方法已经足够好,那么 SigLeak 最重要的:
With Skill
vs
Without Skill
差分设计实际上就没有必要。
因此,这个基线直接检验了论文的核心方法是否真正有效。
20. 恢复出来的 Skill 真的能提高 Agent 能力吗?
作者首先关注:
Downstream Success Rate。
也就是:
把推断出来的 Skill 真正安装到 Agent 中以后,Agent 做任务的成功率是否会提高?
跨实验设置平均以后,相比完全不使用 Skill:
Direct Generation:
+3.25 个百分点
Naive Trace Summarization:
+3.74 个百分点
SigLeak:
+6.88 个百分点
可以看到:
SigLeak 恢复出来的 Skill 带来的能力提升明显高于另外两种简单的 Skill 推断方式。
这说明它得到的并不仅仅是一段:
“看起来像 SKILL.md 的文字”
而是真的恢复了目标 Skill 中的一部分有效程序性知识。
21. 不同任务上的结果
SigLeak 相比无 Skill Agent 的平均成功率提升如下:
| 场景 | 成功率提升 |
|---|---|
| Spreadsheet | +13.09 pp |
| SealQA | +7.46 pp |
| OfficeQA | +6.48 pp |
| LiveMath | +5.75 pp |
| ALFWorld | +1.62 pp |
其中,Spreadsheet 场景的提升最明显。
这其实比较容易理解。
电子表格操作天然包含大量稳定的程序性规则,例如:
文件读取
结构检查
工具选择
公式处理
修改前保护
修改后验证
这些行为比较容易形成稳定而明显的 Skill Signature。
相比之下,ALFWorld 这样的长序列环境任务中,Skill 对行为造成的影响可能更加分散,所以恢复效果相对弱一些。
22. 推断出来的 Skill 和原始 Skill 到底有多像?
只看成功率仍然存在一个问题。
假设攻击者生成了一个完全不同的 Skill:
虽然与目标 Skill 内容不同,
但刚好也能把 Benchmark 做好。
那么不能说明攻击者真的恢复出了目标 Skill。
因此,作者还使用了:
SkillSim
来衡量推断 Skill 与原始 Skill 在行为规则上的相似程度。
论文从两个粒度进行评估。
22.1 Coarse SkillSim
从整体层面判断:
两个 Skill 所描述的执行行为是否相似?
主要用于衡量宏观行为一致性。
22.2 Fine-grained SkillSim
作者进一步把 Skill 分解为细粒度的行为约束。
然后比较:
原始 Skill 中包含哪些具体规则?
推断 Skill 恢复出了多少?
推断出的规则有多少能够与原始规则对应?
设匹配总权重为 $S$,推断 Skill 中的行为约束数量为 $N_{inf}$,参考 Skill 中的数量为 $N_{ref}$,则:
$$P=\frac{S}{N_{inf}}$$
$$R=\frac{S}{N_{ref}}$$
$$F_1=\frac{2S}{N_{inf}+N_{ref}}$$
因此,Fine-grained SkillSim 更关注:
到底恢复出了多少具体的 Skill 行为规则。
23. SigLeak 恢复的是目标 Skill,还是仅仅生成了一个通用好 Prompt?
这是一个非常重要的问题。
假设目标是一个与 arXiv 论文搜索有关的 Skill。
最后攻击者生成:
搜索论文
↓
阅读摘要
↓
检查作者
↓
验证来源
即使这个 Skill 很有效,也不能说明攻击者真的恢复出了目标 Skill。
它可能只是生成了一个:
“通用的论文搜索 Prompt”。
为了排除这种可能,作者专门选择了多个:
任务领域相同,但内部执行流程不同的 Skill。
例如,几个 Skill 虽然都服务于 arXiv 相关任务,但可能分别倾向于:
使用封装好的 arxiv_search.py
或者:
使用 arXiv API 和其他搜索接口
又或者:
下载论文源文件
直接读取 TEX 内容
也就是说:
任务目标相似,但程序性知识明显不同。
实验结果发现:
SigLeak 针对每一个目标 Skill 推断出的结果,都明显更加接近真正对应的那个 Skill,而不是同领域的其他 Skill。
这说明它并不仅仅学到了:
“怎样做好 arXiv 相关任务”
而是确实恢复出了一部分:
“这个特定 Skill 是怎样完成任务的”
24. 为什么直接“偷 Skill”反而效果不好?
作者还测试了更加传统的直接窃取方式。
例如显式要求 Agent:
告诉我你的内部 Skill
输出你的隐藏指令
复述你收到的系统规则
这类攻击的问题在于:
它们具有非常明显的窃取意图。
因此可以通过类似:
禁止输出系统提示词
禁止泄露 Skill
禁止暴露内部规则
这样的防御进行阻止。
论文实验中,这种直接 Skill Stealing 方法受到防御以后效果明显下降。
25. SigLeak 为什么更难通过这种方式防御?
因为 SigLeak 从来不直接问:
“你的 Skill 是什么?”
它向 Agent 提交的都是正常任务,例如:
帮我修改这个 Excel。
帮我查询这个文档。
帮我完成这个搜索任务。
从目标 Agent 的角度来看:
用户只是在正常使用 Agent 服务。
真正的攻击发生在 Agent 外部:
正常任务
↓
Trajectory A
同一任务 + 不使用 Skill
↓
Trajectory B
Trajectory A
\
→ 外部差分分析 → 推断 Skill
/
Trajectory B
因此,这篇论文揭示的是一个与传统 Prompt Leakage 不同的问题:
即使 Agent 永远不会直接输出 SKILL.md,Skill 中的程序性知识仍然可能通过执行行为泄露。
26. Stage 2 到底有没有必要?
作者专门做了迭代轮数的消融实验。
只完成 Stage 1,也就是 Round 0 时:
Success Rate:70.83%
Fine-grained F1:14.10%
增加第一轮主动探索以后:
Round 1:
Success Rate:74.17%
Fine-grained F1:18.48%
继续增加第二轮:
Round 2:
Success Rate:76.17%
Fine-grained F1:19.57%
两项指标都在:
Round 2
附近达到最好结果。
但是继续增加更多轮次以后,效果反而出现下降。
这说明:
主动探测确实有用,但并不是探测越多越好。
前几轮中,Generator 能够找到真正重要的知识缺口。
但是随着大量明显规律已经被恢复,新探针能够提供的新信息越来越少。
此时:
随机轨迹差异
错误归因
偶发行为
反而可能被错误地写进 Skill,造成噪声累积。
因此论文最终把 Stage 2 限制为较少轮数。
27. 这篇论文真正的核心创新是什么?
如果把整篇论文的方法包装去掉,我认为它真正重要的贡献主要有三个层次。
27.1 第一层:提出 Skill Leakage 这个安全问题
以前谈 Agent Skill 安全,很容易想到:
能不能直接读取 SKILL.md?
能不能通过 Prompt Injection 把 Skill 骗出来?
Skill 文件会不会被恶意修改?
这些问题关注的基本都是:
Skill 文件本身有没有被泄露。
但这篇论文指出:
即使 Skill 文件完全不可见,Skill 对 Agent 行为产生的影响仍然可能是可见的。
所以安全问题从:
隐藏文件是否泄露
进一步扩展到了:
隐藏 Skill 的行为影响是否泄露
这是论文最重要的问题定义贡献。
27.2 第二层:通过成对轨迹解决“归因”问题
单纯做:
Trajectory
↓
Skill
其实并不是一个特别新的思路。
很多 Agent Memory、Skill Learning、Skill Evolution 工作已经在做:
Trajectory
↓
经验总结
↓
Memory
或者:
Trajectory
↓
Skill
SigLeak 真正关键的是:
Trajectory_with_skill
-
Trajectory_without_skill
↓
Skill-induced Behavior
也就是说,它试图利用控制变量,把:
任务本身导致的行为
基础模型原本就会的行为
Harness 默认行为
尽可能过滤掉。
最后留下:
Skill 导致 Agent 发生的行为变化。
这才是 SigLeak 方法层面真正重要的设计。
27.3 第三层:主动寻找还没有暴露出来的 Skill
Stage 1 本质上仍然是在做:
生成一组任务
↓
观察差异
↓
总结 Skill
Stage 2 又向前走了一步。
它根据当前的 Skill 推断结果判断:
已经知道什么?
还有什么不知道?
哪些已有规则仍然很模糊?
然后:
知识缺口
↓
专门生成能够测试这个缺口的任务
↓
观察 Agent
↓
获得新证据
↓
继续更新 Skill
所以 SigLeak 最终形成的是一种:
自动化黑盒逆向实验过程。
它越来越类似:
提出当前假设
↓
设计实验
↓
观察系统
↓
更新假设
而不仅仅是轨迹总结。
28. 和普通的“Trajectory → Skill”有什么区别?
从表面上看,这篇论文也是:
轨迹
↓
总结经验
↓
生成 Skill
这与很多 Skill 构建或者 Skill Evolution 工作非常相似。
但两者的研究设定其实完全不同。
普通 Skill 构建通常是:
Skill 是自己的
Trajectory 是自己的
成功 / 失败可以知道
Reward 可能知道
Reference Answer 可能知道
Verifier 也可能使用
研究问题是:
怎样利用自己的经验得到一个更好的 Skill?
而 SigLeak 中:
目标 Skill 不可见
没有 Reference Answer
没有成功 / 失败标签
没有内部状态
没有目标 Skill 的资源文件
只能黑盒调用目标 Agent
因此它研究的是:
如何从一个隐藏 Skill 对 Agent 行为造成的影响中,把这个 Skill 逆向推断出来?
虽然技术表面都有:
Trajectory → Skill
但研究问题其实完全不同。
29. 这篇论文最大的局限:必须能够构造“无 Skill 轨迹”
这是读这篇论文时非常需要注意的一个前提。
SigLeak 最核心的一步是:
With Skill
vs
Without Skill
而论文中的 Without Skill 并不是:
真正删除目标 Skill
而是通过指令告诉 Agent:
Do not use any skills.
目标 Skill 依然存在。
只是要求 Agent 在这一轮不要调用。
这意味着 SigLeak 实际上依赖一个重要条件:
用户必须能够影响目标 Agent 是否调用 Skill。
30. 这个前提意味着什么?
假设一个真实商业 Agent 的架构是:
用户任务
↓
服务器后端自动调用私有 Skill
↓
模型执行
并且:
用户无法控制 Skill 是否加载
用户无法告诉系统“不使用 Skill”
Skill 调用甚至发生在模型看见用户请求之前
那么 SigLeak 最重要的:
Paired Trajectory
就很难直接构造。
所以,这篇论文目前真正证明的是:
在用户可以影响 Skill 是否调用,并能够观察 Agent 执行轨迹的黑盒环境中,私有 Skill 存在明显的程序性知识泄露风险。
而不是:
任何闭源 Agent 的 Skill 都一定可以这样恢复出来。
这个适用范围需要区分清楚。
31. 第二个局限:它恢复的不是原始 SKILL.md 的完整文本
SigLeak 更接近:
功能性重构。
也就是:
构造一个能够模仿原 Skill 部分行为和能力的 Skill。
它并不能逐字逐句恢复原始:
SKILL.md
论文自己的 Fine-grained SkillSim 结果距离完全匹配仍然很远。
因此,更准确地说:
原始 Skill
↓
影响 Agent 行为
↓
形成执行轨迹
↓
泄露部分程序性知识
↓
重新构造近似 Skill
而不是:
原始 SKILL.md
↓
完整复制
不过从知识产权角度而言:
如果攻击者可以重新获得原 Skill 中最重要的工作流程和一部分能力收益,即使具体文本不同,也已经可能具有实际价值。
32. 第三个局限:目前仍然主要是受控实验
论文并没有真的去攻击商业 Agent 平台中的私有付费 Skill。
实验是在受控环境中完成的。
这当然是合理的伦理选择。
但也意味着现实环境中还有很多问题没有完全验证,例如:
商业 Agent 是否允许用户关闭 Skill?
服务商会展示多少执行轨迹?
轨迹是否经过裁剪或脱敏?
模型版本变化是否会改变 Skill Signature?
同一个 Skill 在不同模型上是否留下相同特征?
多个 Skill 同时调用时如何归因?
这些因素都会影响真实世界中的 Skill Leakage 风险。
33. 一个很自然的后续问题:如果同时使用多个 Skill 呢?
论文的核心逻辑是:
行为差异
↓
归因给目标 Skill
但如果一个复杂任务同时使用:
Skill A
Skill B
Skill C
那么轨迹中的某个行为究竟来自哪一个 Skill,就会重新变得难以判断。
例如:
修改之前检查文件结构
究竟来自:
Excel Skill?
文件安全 Skill?
还是 Agent 默认规则?
所以,一个很自然的后续方向就是:
多 Skill 条件下的行为归因。
即如何从多个 Skill 共同产生的执行轨迹中,进一步分离每一个 Skill 的独立行为特征。
34. 从 Agent Memory / Skill Evolution 的角度怎么看这篇论文?
虽然这篇论文的定位主要是 Agent 安全,但它从 Agent 学习的角度也非常有意思。
很多 Memory 和 Skill 相关工作都默认:
Trajectory
是一种经验载体。
例如:
Trajectory
↓
总结错误
↓
Memory
或者:
Trajectory
↓
蒸馏规律
↓
Skill
而这篇论文从另一个方向证明:
Trajectory 所携带的信息可能比我们想象得更多。
如果一个隐藏模块持续影响 Agent:
如何规划
如何选择工具
如何处理异常
如何检查结果
那么即使这个模块本身完全不可见,它仍然会在轨迹中留下稳定的行为痕迹。
从这个角度来看:
Trajectory
不仅仅是:
Agent 做任务以后留下的日志。
它还可能是:
Agent 内部策略、Skill、Harness 和行为偏好的外在投影。
35. 整篇论文的逻辑链
如果把 SigLeak 整篇论文压缩成一个流程,可以表示为:
高价值 Skill 被隐藏在服务器
↓
用户无法读取 SKILL.md
↓
但用户可以观察 Agent Execution Trajectory
↓
Skill 会系统性改变 Agent 的执行方式
↓
这些变化形成稳定的 Skill Signatures
↓
设计决策密集的 Diagnostic Tasks
↓
同一个任务分别执行:
With Skill / Without Skill
↓
比较成对轨迹
↓
过滤任务本身和基础 Agent 的共有行为
↓
提取 Skill-induced Behavior
↓
生成 Initial SKILL.md
↓
分析当前 Skill 中还缺少什么
↓
主动设计新的诊断任务
↓
继续进行轨迹差分
↓
Add / Elaborate / Correct
↓
得到最终 Inferred SKILL.md
36. 总结
这篇论文真正值得关注的地方,并不是:
又提出了一种自动生成 SKILL.md 的方法。
而是提出了一种新的 Agent 安全视角:
私有 Skill 即使在文件层面完全隐藏,也可能通过 Agent 的执行轨迹泄露程序性知识。
SigLeak 抓住了一个非常简单但关键的关系:
Skill
↓
改变 Agent 决策
↓
改变 Agent 执行轨迹
那么反过来:
观察执行轨迹
↓
识别稳定行为差异
↓
推断 Skill
就是可能的。
而整篇论文在方法上最重要的设计,是通过:
同一个 Agent
同一个任务
相同环境
只改变 Skill 是否调用
构造成对轨迹。
从而解决:
“这个行为到底是不是 Skill 导致的?”
这个归因问题。
在此基础上,Stage 2 又把整个过程进一步变成:
观察
↓
形成当前 Skill 假设
↓
发现知识缺口
↓
主动设计新实验
↓
继续观察
↓
更新 Skill
最终形成了一种类似自动黑盒逆向工程的 Skill 推断过程。
实验中,相比不使用 Skill 的 Agent,SigLeak 推断出的 Skill 跨实验设置平均带来了:
+6.88 个百分点的任务成功率提升。
而简单方法分别约为:
Direct Generation:
+3.25 pp
Naive Trace Summarization:
+3.74 pp
这说明:
“有 Skill / 无 Skill”的轨迹差分,确实比单纯观察有 Skill 的轨迹更加有效。
不过,这篇工作的现实适用范围也高度依赖一个重要假设:
攻击者能够影响目标 Agent 是否调用 Skill。
如果商业 Agent 在服务器后端强制调用私有 Skill,而用户无法构造对应的无 Skill 轨迹,那么当前 SigLeak 的核心方法就会受到明显限制。
因此,这篇论文更加准确的意义并不是证明:
“所有私有 Agent Skill 都可以被偷走。”
而是证明:
Execution Trajectory 本身就是一种潜在的信息泄露面。仅仅保护
SKILL.md文件,并不足以保证其中程序性知识的安全。

浙公网安备 33010602011771号