ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

机器学习 Pickle 文件的攻防实战:解析 DEF CON AI Village 2021 演讲与 Fickling 反编译注入工具

机器学习 Pickle 文件的攻防实战:解析 DEF CON AI Village 2021 演讲与 Fickling 反编译注入工具 【免费下载链接】publicationsPublications from Trail of Bits项目地址https://gitcode.com/GitHub_Trending/pu/publications点击查看免费下载本篇技术指南围绕 Trail of Bits 在 DEF CON AI Village 2021 的演讲《Never a Dill Moment: Exploiting Machine Learning Pickle Files》展开系统讲解机器学习模型以 Python pickle 格式序列化背后的安全隐患——反序列化即代码执行——并完整介绍配套开源工具 Fickling反编译器、静态分析器与二进制重写器三合一的用途与用法。读完本文你将理解 pickle 协议本质上是一套可执行指令流掌握如何用 Fickling 分析、篡改和注入恶意 pickle 模型文件并学会模型分享与加载环节的实用防御措施。为什么机器学习模型偏爱 Pickle演讲开篇先回答了一个基础问题什么是 pickle在 Python 生态中pickle是用于序列化serializing和反序列化de-serializing任意 Python 对象的标准模块。所谓pickling是把一个 Python 对象转换成字节流的过程unpickling则是把这个字节流重新还原成 Python 对象。它的核心优势是能够轻松序列化自定义对象——包括机器学习训练出来的复杂模型结构而不需要为每个自定义类单独编写序列化代码。正是这种便利性使 pickle 在机器学习领域变得无处不在。演讲指出PyTorch、TensorFlow、spaCy、scikit-learn、Azure ML、Theano等主流 ML/NLP/CV 框架与平台都依赖 Python pickle 及其变体来持久化模型。具体到模型生产与分发流程中pickle 之所以被广泛采用主要因为它带来了三个实际收益节省内存模型训练过程中可以以紧凑的字节流形式保存中间状态支持开始—停止式训练训练可以随时中断、序列化保存之后反序列化继续不必从头再来便于共享训练好的模型以单个 pickle 文件形式分发任何拿到文件的人都能直接加载使用。但便利性的另一面是风险。演讲用一个形象的比喻点破本质反序列化拥有自己的一套指令集和虚拟机VM它可以调用任意 Python 代码。这意味着加载一个来自不可信来源的 pickle 文件等价于在目标机器上执行攻击者提供的代码。Pickle 是一种流式字节码解构 totally_safe_trust_me.pkl为了说明这一点演讲展示了切分一个 pickleSlicing a Pickle的过程对一个名为totally_safe_trust_me.pkl一个讽刺性的文件名暗示绝对安全、请相信我的文件进行剖析可以得到两层视图反汇编后的 pickle 操作码Disassembled Pickle Opcodespickle 文件是一系列单字节操作码opcode组成的字节流例如EMPTY_TUPLE、REDUCE、BUILD、STOP等每条指令完成一个具体的 VM 操作反编译后的 Python 等价代码Decompiled Python Equivalent把这段指令流还原成等价的、可读的 Python 源码。这个视角非常关键pickle 不是数据文件而是程序文件。unpickling 过程会解释执行这段指令流而REDUCE之类的指令可以直接调用任意 Python 可调用对象——这意味着os.system、eval、exec、subprocess.call这些危险入口都可能在反序列化过程中被触发。演讲还提醒pickle 是一种流式格式streaming format反序列化器边读边执行某些恶意载荷例如pickle 炸弹pickle bombs——通过精巧嵌套的结构在解压时爆炸性膨胀内存或递归深度因此在解析过程早期就会被激活。因此一句经典的安全结论贯穿全篇pickling 并不安全Pickling is not secure。匿名共享的模型被忽视的供应链攻击面如果说不安全只是技术属性那么**匿名共享**则是让它变成现实威胁的社会条件。演讲指出两个层面的事实Pickle 任意代码执行ACE/RCE在安全社区早已是常识攻击者构造恶意 pickle 的技术路线成熟但大量机器学习从业者并没有计算机科学背景更不用说安全背景。官方 pickle 文档虽然包含不要反序列化不可信数据的告诫但多数 ML 框架在加载模型的 API 上没有直接给出醒目的安全警告开发者很难意识到torch.load()与执行一段远程代码之间几乎没有区别。更关键的是行业现状预训练模型经常被匿名地、无签名地分享——例如通过 PyTorch Hub 索引、模型分享平台等渠道分发。演讲还引用了 MITRE 的对抗性机器学习威胁矩阵ATLAS指出这种文件格式里藏着一台怪异的机器another file format contains a weird machine的模式已被系统性收录为威胁类别是 AI 系统供应链风险的组成部分。Fickling反编译、检测与注入三位一体的开源工具面对怎么腌处理它的问题演讲正式介绍了 Trail of Bits 的开源工具Fickling安装方式为pip3 install fickling。它是一个针对 pickle 文件的安全分析工具包含三大核心能力能力作用典型使用场景反编译器Decompiler将 Pickle VM 字节码反编译为 Python AST再还原为人类可读的 Python 代码审查陌生 pickle 文件的真实行为静态分析器Static Analyzer检测明显恶意的代码模式例如eval、exec、os.system、subprocess.call等危险调用在加载前识别可疑模型文件二进制重写器Binary Rewriter向已有的 pickle例如一个 ML 模型文件中注入任意代码渗透测试、红队演练把良性模型改造成恶意模型从工作流上看Fickling 把二进制黑盒变成了可读源码Pickle VM → Python AST → 人类可读 Python。这既让防御方能够审慎地先看再加载也让攻击方以及模拟攻击的渗透测试者能够在不动模型原有数据的前提下精确地向 pickle 指令流中植入额外逻辑。演讲将 Fickling 定位为供渗透测试人员penetration testers和红队red teamers使用的工具其研究动机是证明攻击者可以轻松制造出能够攻击 PyTorch、spaCy 等主流 ML 框架的恶意模型文件而这完全源于 pickle 设计上的固有缺陷。概念验证针对真实 ML 系统的攻击场景演讲给出了多个基于 Fickling 构造的概念验证PoC攻击场景覆盖从信息窃取到模型破坏的完整链条本地文件外渗Exfiltrate local files在模型反序列化时把目标机器上的文件——包括专有源代码和专有模型——回传攻击者对专有 ML 系统的潜在 RCE演讲点名了Microsoft Azure ML认为攻击者有望在模型加载环节获得远程代码执行当时尚未实测但被评估为可行任意分类延迟Add arbitrary classification delays在模型推理路径中注入人为延时形成**拒绝服务DoS**效果替换训练好的模型为后门模型backdoored model整体调包让下游任务在特定条件下输出攻击者预设的结果模型投毒Model poisoning attacks污染模型的训练产物或分发产物破坏其完整性替换模型参数或张量Swap out model parameters or tensors细粒度篡改权重条件化触发恶意逻辑可以依据时间、时区、系统 locale/语言、IP 地址等环境条件决定何时激活使恶意行为难以被常规复现和检测。这些场景的共同点是攻击者不需要攻破任何服务端漏洞只需要让受害者加载一个精心构造的模型文件——一次torch.load()或spacy.load()调用恶意代码就已在目标进程中执行。负责任披露PyTorch Hub 的回应演讲披露了与 PyTorch 团队的沟通经过问题于2021 年 1 月 25 日报告给 PyTorch1 月 27 日收到回复。PyTorch 团队的回复大意是PyTorch Hub 索引页面上的模型链接只审核质量和实用性不会对发布模型的人做背景调查也不会在把 GitHub 仓库链接加入索引前仔细审计代码安全。换言之官方将该问题标记为WONTFIX不修复——因为这在架构层面被视为模型作者与加载者之间的信任问题而非框架缺陷。演讲引用拉丁语格言Caveat sciscitator学者自慎仿自经典的 caveat emptor——买者自慎提醒模型使用者必须自行承担这份安全责任。作者也表达了一个愿望希望有一天 pickling 不再被用来反序列化不可信文件。缓解措施从必须用 pickle到别用 pickle针对现实约束演讲给出了分层的缓解建议。如果暂时无法摆脱 pickle使用Fickling对可疑文件做更安全的反序列化前置检查先反编译、静态分析再决定是否加载遵循框架推荐的最佳实践例如 PyTorch 的state_dictload_state_dict组合——只反序列化纯张量数据而不是整个模型对象图能显著缩小攻击面。更彻底的方案是切换到非执行型文件格式替代格式特点ONNX开放的神经网络交换格式纯数据描述PPML隐私保护机器学习相关格式面向隐私计算场景HDF5结构化数据存储格式TensorFlow SavedModel框架原生的非 pickle 持久化Protobuf平台中立的二进制描述格式JSON纯文本、完全可审计TF Lite移动/嵌入式推理格式CoreMLApple 生态模型格式这些格式的共同特征是**数据即数据**——反序列化过程不存在任意代码执行语义因此从根源上消除了 pickle 类攻击。更宏观的立场召唤恶魔与系统化防御演讲的最后部分把视角从单点漏洞拉高到 AI 安全方法论。一方面作者承认业界确实需要继续研究新颖的 ML 攻击——例如演讲提到的 Counterfeit、PrivacyRaven、IBM ART、PyTorchFi 等工具其中 PrivacyRaven 也是 Trail of Bits 的开源项目相关介绍见本仓库 PrivacyRaven: Comprehensive Privacy Testing for Deep Learning。但作者强调这些攻击恶魔需要被召唤出来才能发挥作用而召唤它们的正是文件格式、库、服务器架构中的种种漏洞——pickle 就是最典型的例子ATLAS 威胁矩阵则负责系统化地枚举这些召唤通道。另一方面针对防御方演讲给出了一份可落地的行动清单让工具默认安全secure by default框架加载 API 默认应拒绝不可信 pickle或默认展示安全警告最小化模型文件的访问权限以威胁建模为前提明确谁可以上传、谁可以加载模型签名模型并验证签名结合model cards模型卡记录模型的来源、用途与限制管理模型的完整生命周期例如使用MLflow之类的模型生命周期管理平台监控模型运行并保留审计日志在攻击发生时能够及时发现验证输入对送入模型的每个输入做合法性校验彻底测试模型包括单元测试、属性测试、模糊测试等Trail of Bits 在这一领域的工程实践可参考仓库内 smart_contract_audit_findings 等测试方法资料。后续演进从单点利用到系统化的 ML 输入处理攻击本仓库还收录了同一研究方向的后续演讲——Incubated Machine Learning Exploits: Backdooring ML Pipelines Using Input-Handling BugsDEF CON 322024。该演讲沿着pickle 是输入处理缺陷的思路进一步系统化研究者利用语言理论安全LangSec框架系统性地挖掘主流 ML 工具中的模型序列化缺陷构造了polyglot多语言文件与歧义ambiguous文件等恶意模型工件并持续向Fickling项目贡献代码使其更好地服务于 ML 场景。这也印证了Never a Dill Moment中的判断ML 模型从来不是孤立的对象而是由大量工具构建、嵌入复杂流水线的工件其安全必须放在供应链整体视角下审视。结论本演讲的核心结论可以浓缩为四点Pickling 是一种便利但极不安全的序列化方式——反序列化即执行文件即程序正因为它便利pickle 已成为 ML 生态的事实标准模型分发高度依赖它这构成了ML 社区严重的供应链风险一个匿名的、无签名的模型文件就能导致 RCE、信息窃取、模型投毒与 DoS因此让工具默认安全是当务之急——无论是框架层面的默认防护还是从业者层面的格式选择与加载前审计。对每一位机器学习工程师和安全从业者这篇演讲的实用建议是在加载任何来自不可信来源的模型之前先把它当作一段待执行的代码来对待——用 Fickling 反编译审阅用静态分析扫描危险调用或者干脆改用 ONNX、SavedModel 等非执行型格式。相关幻灯片全文见本仓库 DEFCON AI Village Fickling Talk.pdf该演讲亦收录于仓库根目录 README.md 的 Machine Learning 演讲列表中。赞分享【免费下载链接】publicationsPublications from Trail of Bits项目地址https://gitcode.com/GitHub_Trending/pu/publications点击查看免费下载相关推荐PayloadsAllTheThings 之 Python 反序列化攻防pickle 与 PyYAML 的 RCE 深入解析PayloadsAllTheThings 之 Python 反序列化攻防pickle 与 PyYAML 的 RCE 深入解析 本指南以 Insecure De网络安全应用安全渗透测试上一篇探索声音的数字魔法 —— DSP.js库深度解读下一篇如何使用React Native Navigation构建流畅的NFT藏品导航体验从列表到详情的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进