研究人员发现操纵机器学习模型的新方法

研究人员开发了一种新方法,通过在序列化过程中注入恶意代码来操纵机器学习 (ML) 模型。该方法侧重于将 Python 对象存储为字节码的“pickling”过程。尽管 Pickle 格式存在长期已知的风险,ML 模型通常仍以该格式打包和分发。

正如 Trail of Bits 在一篇新博客文章中所述,Pickle 文件为攻击者提供了一些掩护,使他们能够将恶意字节码注入机器学习程序。理论上,此类代码可能造成多种后果(如操纵输出、数据窃取),但不像其他供应链攻击方法那样容易被发现。

NCC Group 首席安全顾问 David Brauchler 警告说:“它使我们能够在运行时更巧妙地将恶意行为嵌入到我们的应用程序中,这使得我们有可能在更长时间内不被我们的事件响应团队注意到。”

“昏昏欲睡的泡菜”攻击:毒害 ML 模型

所谓的“昏昏欲睡的泡菜”攻击相当简单,只需使用Flicking之类的工具即可。Flicking 是一个用于检测、分析、逆向工程或创建恶意 Pickle 文件的开源程序。攻击者只需说服目标下载有毒的 .pkl 文件(例如通过网络钓鱼或供应链入侵),然后在反序列化后,他们的恶意操作代码就会作为 Python 有效负载执行。

这种方式毒害模型具有许多隐身优势。首先,它不需要本地或远程访问目标系统,并且磁盘上不会留下任何恶意软件痕迹。由于毒害在反序列化过程中动态发生,因此可以抵抗静态分析。(发布到像 Hugging Face 这样的 AI 存储库的恶意模型可能更容易被发现。)

序列化模型文件通常非常庞大,因此破坏所需的恶意代码可能只占整个文件大小的一小部分。这些攻击可以多种方式进行定制,而常规恶意软件攻击则是为了防止检测和分析。

研究人员指出,尽管“昏昏欲睡的泡菜”可以对目标机器执行多种操作,但“沙盒、隔离、权限限制、防火墙和出口流量控制等控制措施可以防止有效负载严重损坏用户系统或窃取/篡改用户数据。”

更有趣的是,攻击可以针对模型本身进行操纵。例如,攻击者可以在模型中插入后门,或者操纵其权重,从而操纵其输出。Trail of Bits 在实践中展示了如何使用这种方法,例如建议患流感的用户喝漂白剂来治愈自己。或者,受感染的模型可用于窃取敏感用户数据、向模型输出添加网络钓鱼链接或恶意软件等等。

如何安全地使用 ML 模型

为了避免这种风险,组织可以专注于仅使用更安全的文件格式 Safetensors 中的 ML 模型。与 Pickle 不同,Safetensors 仅处理张量数据,而不处理 Python 对象,从而消除了反序列化时任意代码执行的风险。

“如果你的组织执意要运行以 pickled 版本分发的模型,那么可以将其上传到资源安全的沙箱中(例如 AWS Lambda),并动态进行转换,然后生成文件的 Safetensors 版本,”Brauchler 建议道。

但他补充道:“我认为这更像是在更大问题上贴创可贴。当然,下载 Safetensors 文件可能会让你对它不包含恶意代码有一定的信心。但你是否相信生成这些数据的个人或组织所生成的机器学习模型不包含后门或恶意行为,或其他你的组织无法处理的问题、疏忽或恶意?”

“我认为我们确实需要关注如何在我们的系统中管理信任,”他说,而做到这一点的最佳方式是严格区分模型检索的数据和用于运行的代码。“我们需要围绕这些模型进行架构设计,这样即使它们确实出现问题,我们的应用程序用户和环境中的资产也不会受到影响。”

Leave a Comment

Your email address will not be published. Required fields are marked *