文章总结: 该文档揭示了LLMAgent技能包供应链的严重安全风险,指出基于外观的静态扫描器易被SKILLCLOAK框架(通过结构混淆和自解压打包)绕过。作者提出SKILLDETONATE动态检测系统,通过沙箱执行和基于标记的污点分析,实现了97%的恶意技能检出率与2%的误报率。核心启示是静态审计已过时,未来需采用零信任的动态行为监控与标准化沙箱环境。 综合评分: 90 文章分类: AI安全,漏洞分析,红队,安全工具,内网渗透
AI Agent 技能供应链的“隐身衣”与动态防御新范式
原创
APT-101 APT-101
APT-101
2026年7月6日 18:50 陕西
在小说阅读器读本章
去阅读
一、 核心背景与问题
随着 LLM Agent(如 OpenHands, Claude Code)的普及,开发者可以通过安装第三方“技能包”(Skills)来扩展其能力。然而,这引入了严重的供应链安全风险:
- 攻击面:恶意攻击者可以发布包含后门、数据窃取或权限提升逻辑的技能包。
- 现有防御失效目前业界主要依赖静态扫描器(Static Scanners),如 Cisco AI Defense, Huifer, Vigile 等,它们在安装时检查代码和文档。
- 核心痛点:静态扫描器容易被语义保持的逃避技术(Semantics-Preserving Evasion)绕过。攻击者只需改变代码的“外观”,而不改变其“行为”,即可让扫描器放行,但在运行时依然执行恶意操作。
二、 攻击侧:SKILLCLOAK 逃避框架
为了证明现有防御的脆弱性,作者提出了 SKILLCLOAK,一个自动化的技能伪装框架。它通过两种互补策略,将恶意技能转换为“看起来无害”但“行为不变”的形式。
1. 结构混淆(Structural Obfuscation)
针对基于规则(Regex/YARA/AST)的静态扫描器。
-
原理:提取扫描器的匹配规则,然后通过最小化编辑来消除触发信号,同时保留恶意载荷。
-
技术手段:
-
分散(Disperse):将共现的关键字拆分到不同行或文件。例如,
curl http://evil.com被拆分为curl在一行,URL 在另一行,或者通过变量拼接。 -
重构(Reify):将直接命令替换为等效的系统调用或库函数。
-
重命名/移动:将敏感文件移动到扫描器忽略的目录(如
.git/或build/),或更改扩展名。 -
效果:在测试中,结构混淆使大多数静态扫描器的检出率下降了 80%-99%。
2. 自解压打包(Self-Extracting Skill Packing, SFS)
针对更高级的混合扫描器(包括 LLM 法官)。
- 原理:类比二进制恶意软件的加壳技术。将真实的恶意负载加密或隐藏在一个看似 benign(良性)的“外壳”中。
- 工作流程:
- 构造:生成一个良性的封面文件(Cover)和一个解码器(Decoder)。原始恶意技能被加密存储在隐藏位置(如
.git/skillpack.dat)。 - 安装时:扫描器只看到封面和解码器,判定为安全。
- 运行时:Agent 执行解码器,解密并恢复原始恶意技能,然后按照封面中的指令执行。
- LLM 优化:如果 LLM 法官对封面产生怀疑,SKILLCLOAK 会使用另一个 LLM 重写封面,使其叙事更合理,直到通过审查。
- 效果:SFS 打包绕过了 所有 测试的静态扫描器(包括 Cisco 和 Nova), bypass 率超过 90%-99%。
三、 防御侧:SKILLDETONATE 动态检测框架
既然静态扫描不可靠,作者提出了 SKILLDETONATE,一个以行为为中心的动态审计系统。
核心理念
“不看它长什么样,只看它做什么。” SKILLDETONATE 不在安装时做决定,而是在沙箱中实际运行该技能,并监控其操作系统级别的副作用。
两大技术创新
1. 按需闭包提升(On-Demand Closure Lift)
- 问题:传统沙箱只监控初始文件。但恶意技能可能在运行时动态生成新的脚本或配置文件(即“闭包”的一部分),这些新生成的文件可能包含恶意指令。
- 解决方案:SKILLDETONATE 监控文件系统写入。一旦发现技能创建了新的可执行文件或自然语言指令文件(如
.md,.sh),它会立即将这些新文件“提升”回 Agent 的执行上下文中,并继续监控它们的执行。 - 意义:确保了即使恶意负载是动态生成的,也能被捕获。
2. 基于标记的污点分析(Marker-Based Taint Analysis)
-
问题:如何追踪敏感数据(如 API Key, SSH 私钥)是否被泄露?传统的污点分析难以处理自然语言上下文和跨进程转换。
-
解决方案:
-
数据标记(Data Markers):当 Agent 读取敏感文件时,系统不返回真实内容,而是返回一个唯一的、不透明的标记(如
#data1)。 -
传播追踪:这个标记会在整个数据流中传播——从文件读取 -> 内存变量 -> 网络请求参数。
-
策略检查:如果标记最终出现在网络出口(如
curl的参数中)或被写入非授权文件,则触发警报。 -
优势:无需修改 Agent 运行时,通过 FUSE 文件系统层拦截 syscall 即可实现,且误报率极低。
四、 实验评估
1. 数据集
- 恶意样本:1,613 个来自真实世界的恶意技能(In-the-wild malicious skills),涵盖凭证窃取、反向 Shell、加密货币挖矿等。
- 扫描器对比:9 种主流静态扫描器(Cisco, Huifer, Vigile, Nova 等)。
- 代理平台:OpenAI Codex (GPT-5.4) 和 Claude Code (Sonnet 4.6)。
2. 逃避有效性(RQ1)
| 扫描器类型 | 原始检出率 | 结构混淆后检出率 | SFS 打包后检出率 | | — | — | — | — | | 静态规则类 (Huifer, Caterpillar) | ~98% | < 5% | < 1% | | 混合/LLM类 (Cisco, Nova) | ~95% | ~10-20% | < 5% | | 结论 | 极高 | 大幅下降 | 几乎完全绕过 |
关键发现:即使是结合了 LLM 判断的高级扫描器(如 Cisco),在面对 SFS 打包时也几乎完全失效。
3. SKILLDETONATE 的检测能力(RQ2)
| 指标 | 结果 | | — | — | | 恶意技能检出率 | 97% (平均) | | 误报率 (False Positive) | 2% | | 对逃避变体的鲁棒性 | 对结构混淆和 SFS 打包的检出率保持在 87%-95% 之间,几乎没有下降。 | | 性能开销 | 每个技能约 153 秒,14.1K tokens。对于离线安装网关来说是可以接受的。 |
4. 消融实验
- 移除闭包提升:检出率略有下降,但误报率飙升 8 倍(因为无法区分良性动态文件和恶意动态文件)。
- 移除污点分析:检出率基本不变,但失去了对数据泄露的具体归因能力。
五、 核心启示与建议
1. 静态扫描已死,动态行为分析当立
论文有力地证明了,在 AI 技能生态中,基于外观的静态审计已经过时。攻击者可以轻易地通过代码变形来绕过任何固定的规则集。未来的安全防线必须建立在运行时行为监控之上。
2. “零信任”技能执行环境
Agent 不应盲目信任安装的 skill。每个 skill 都应在隔离的沙箱中运行,并且其所有 I/O 操作(文件、网络、进程)都应受到严格的信息流控制(Information Flow Control)。
3. 标准化执行环境的需求
类似于二进制恶意软件分析中的 Cuckoo Sandbox,AI 社区需要建立标准化的 Agent 执行沙箱,以便统一进行动态行为审计。
4. 开发者的责任
- 不要硬编码密钥:使用环境变量或秘密管理服务。
- 最小权限原则:Skill 应只请求其功能所需的最小权限。
- 代码签名与来源验证:虽然不能防止逻辑恶意,但可以增加攻击者的溯源成本。
六、 总结
《Cloak and Detonate》不仅揭露了当前 AI 技能市场的巨大安全黑洞,还提供了一套切实可行的解决方案。
- 攻击方:SKILLCLOAK 展示了恶意技能如何像变色龙一样适应各种扫描规则。
- 防御方:SKILLDETONATE 证明了通过动态执行 + 污点追踪,我们可以有效地捕捉这些隐蔽的威胁。
参考:https://anonymous.4open.science/r/Skill_Cloak_Detonate-346C/README.md
参考:https://arxiv.org/pdf/2607.02357
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:APT-101 APT-101 APT-101《AI Agent 技能供应链的“隐身衣”与动态防御新范式》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论