摘要
在这篇博客中,我们展示了攻击者如何攻击Hugging Face的Safetensors转换空间及其相关的服务机器人。这些服务是一个在Hugging Face上广受欢迎的服务,专门用于将不安全的机器学习模型转换为更安全的版本。我们随后展示了如何通过Hugging Face自身的服务,发送带有攻击者控制数据的恶意拉取请求到平台上的任何仓库,以及如何劫持通过转换服务提交的任何模型。我们使用一个被劫持的模型来证明了这一点,这个模型是设计用来测试转换服务的,该服务允许攻击者通过冒充Hugging Face转换机器人来请求对平台上的任何仓库进行更改。我们还展示了如何可能在服务中持久化恶意代码,以便在模型转换时自动劫持模型。
尽管转换服务的代码在Hugging Face服务器上运行,但系统是在Hugging Face Spaces中容器化的 — 这是一个平台,任何用户都可以在其中运行代码。因此,大部分风险不是针对Hugging Face本身,而是针对托管在该网站上的仓库及其用户。我们的团队感到有义务将这项研究公之于众,以便在造成任何损害之前找到任何可能被破坏的模型。在我们的公开报告漏洞之后,我们还联系了Hugging Face,以便在发布之前给他们时间关闭转换服务或实施安全措施。
介绍
任何人工智能系统的核心都是一个机器学习模型 — 是在给定数据集上进行大量计算的结果,经过训练、调整和优化,以执行特定任务或一般的应用程序。在模型可以部署到产品中或作为服务的一部分使用之前,它必须被序列化(保存)到磁盘上,这被称为序列化格式。通过有效地将模型简化为二进制表示,我们可以在它被训练的系统之外部署模型,或者与我们希望的任何人共享。在行业中,这些模型通常被称为“预训练模型”,并且它们已经风靡全球。
预训练的开源模型是人工智能广泛采用的主要推动因素之一,使数据科学团队能够共享、下载和重用现有模型,以适应他们的特定应用程序,而无需从头开始创建所需的庞大资源。事实上,模型的共享已经变得如此普遍,以至于围绕这一前提创建了公司。Hugging Face拥有一个强大的社区,迄今为止已经上传了超过500,000个预训练模型到平台。
模型即代码
如果您一直在关注我们的研究,您会知道模型其实就是代码,一些广泛使用的序列化格式在某种程度上允许执行任意代码,并且正在被野外利用。最大的罪魁祸首是Pickle,尽管它是最脆弱的序列化格式,但却是最广泛使用的。Pickle是PyTorch库的基础,并且是Hugging Face上最普遍的序列化格式。
为了缓解由易受攻击的序列化格式带来的供应链风险,Hugging Face团队开始开发一种新的序列化格式,这种格式从一开始就以安全为考虑构建,以便不能用于执行恶意代码 — 他们称之为Safetensors。
理解转换服务
Safetensors正如其名,允许安全的反序列化机器学习模型,主要是因为它只存储模型权重/偏移,而不存储可执行代码。为了帮助用户基础转向这个更安全的替代方案,公司创建了一个转换服务,通过拉取请求将仓库中的任何PyTorch模型转换为Safetensors版本。转换服务的代码(convert.py)直接来自Safetensors项目,并通过Hugging Face Spaces运行,这是一个在浏览器中运行Python代码的云计算产品。
在这个空间中,一个Gradio应用程序与convert.py捆绑在一起,提供了一个Web界面,用户可以在其中指定要转换的仓库。该应用程序只允许针对PyTorch二进制文件进行转换,并要求仓库中存在名为pytorch_model.bin的文件才能启动转换过程,如下图所示:
要转换的huggingface存储库
用户可以导航