导语
近日,腾讯朱雀实验室发现著名AI社区Hugging Face开源组件datasets存在不安全特性,可引发供应链后门投毒攻击风险。AI开发者使用该组件加载攻击者构造的包含恶意代码的数据集时,会导致PC/服务器被入侵,同时在大模型预训练、微调等场景中,最终还可能导致大模型参数被窃取或篡改。
朱雀在此建议大家及时排查,同时也将持续进行大模型基础设施安全研究,分享团队在大模型时代下对于前沿安全攻防技术的思考与实践,保障大模型安全、可靠地落地应用,与行业共同提升大模型生态安全性。
关于Hugging Face
作为“AI领域的GitHub”,全球最具影响力的AI开源社区,Hugging Face 提供了大量高质量的开源模型、数据集以及AI应用托管服务,极大地降低了AI的技术门槛,该组织开源的transformers、datasets等组件也在AI领域被广泛使用。
其中datasets组件(github.com/huggingface/datasets)为广大开发者提供了一种高效、易于使用的方法来处理各种数据集,能够更轻松地训练和微调 AI 模型,在Github上有17k+ Star,是目前最流行的AI数据集开源组件。截止2023年10月,Hugging Face平台托管了73763个公开数据集供开发者使用,开发者可以使用datasets直接加载平台所有公开数据集。
图1:Hugging Face 数据集托管服务
Datasets组件的不安全特性
朱雀在对datasets等AI开源组件进行安全研究时发现,开发者通常会使用datasets组件的load_dataset函数加载数据集,为了考虑支持更复杂的数据处理格式或流程,当加载的数据集下包含有与数据集同名的Python脚本时,将会默认运行该脚本。
图2:Datasets官方使用文档
由于Hugging Face平台上的数据集都由用户上传,如果数据集中的Python脚本包含恶意行为,那么会造成严重的安全风险,如下图所示,攻击者构造的恶意脚本会主动连接攻击者服务器,并等待攻击者下发执行系统命令,最终窃取受害者服务器上的敏感数据。
图3:Datasets加载恶意数据集风险
不安全特性可被利用于供应链攻击
利用该特性,攻击者可通过在Hugging Face、GitHub及其他渠道分发包含恶意后门代码的数据集,当开发者通过datasets组件加载恶意数据集进行训练或微调时,数据集里的恶意后门代码将会运行,从而导致AI模型、数据集、代码被盗或被恶意篡改。
攻击流程如下图所示:
图4:恶意数据集攻击流程
作为AI领域的基础库,datasets拥有很大的下载量,根据pypistats网站统计,最近一天下载量将近10万。一旦有恶意数据集在网络上被大范围传播与使用,将会有大量开发者遭受这种供应链后门投毒攻击。
图5:Datasets下载量统计(pypistats)
厂商缓解措施
经与Hugging Face官方沟通,厂商认为datasets组件默认运行数据集内的Python脚本属于正常特性,表示已在GitHub开源项目中做过免责声明。
图6:Hugging Face datasets免责声明
朱雀进一步研究发现,相同的风险存在于Hugging Face官方平台所使用的datasets-server (https://github.com/huggingface/datasets-server)组件中,该组件主要用于对外提供数据集托管服务,可导致Hugging Face平台自身被攻击。
2023年10月20日,Hugging Face 确认并修复了朱雀报告datasets-server组件漏洞,并评级为严重(CVSS评分9.6)。同时,朱雀也协助官方提供尽可能详尽的安全修复建议,官方在平台上对所有可能存在风险的数据集做出了进一步的安全风险提示。
图7:Dataset Viewer风险提示
安全建议
我们认为,随着大模型越来越普及,在未来一段时间里,恶意数据集或将成为APT组织或黑客的攻击利器,除了Hugging Face,其他外部来源(如GitHub)、甚至本地数据集也需要AI与大模型开发者们高度警惕。
为了进一步保障业务的安全,朱雀建议可采取以下措施:
1、使用datasets-server作为服务端组件的开发者或团队,请及时更新到包含以下commit的版本(c8f45f858ca71c2e66782c672bfbaa8d965eab02)。
2、对于使用datasets组件的广大社区开发者或团队,请确保数据集来源可信,检查数据集脚本中是否存在恶意Python代码,谨慎使用在Hugging Face上被提示存在安全风险的数据集。
本文转载自腾讯朱雀实验室,本文观点不代表墨知立场。