AI安全之模型序列化后门攻击

admin 2024年8月15日22:04:48评论40 views字数 2769阅读9分13秒阅读模式
什么是序列化后门攻击
在网络安全的世界里,“后门攻击”是个耳熟能详的词汇,那它究竟意味着什么呢?

想象一下,你购买了一套高级的智能门锁,但卖家偷偷藏了一把备用钥匙,等你安装好后,他们就可以轻松地进入你的家——这就是后门攻击的核心思想。攻击者通过在正常软件中嵌入恶意代码,让用户在不知情的情况下打开了自家的大门。

GitHub作为全球最大的开源代码托管平台,承载着数以万计的项目,是后门攻击的重灾区。而对于AI模型,也有一个类似的托管平台——Hugging Face,这里同样托管着海量的模型,供开发者免费下载使用。那么,AI模型是否也会遭遇同样的后门攻击呢?

答案是肯定的。就像恶意代码可以悄悄潜入软件一样,恶意AI模型也能以同样的方式侵入我们的系统。今天,我们就来揭开序列化后门攻击的秘密面纱。

AI模型的后门攻击有很多种,我们今天只讲序列化后门攻击。

首先,我们需要了解AI模型是如何保存和加载的。简单来说,AI模型通过序列化技术进行存储,这意味着将模型的状态转化为一种易于保存的形式。你可以把它想象成拆解一个乐高模型的过程:将完整的模型拆分成一个个小零件,然后小心地装进一个盒子里,并附上组装说明书。这就是序列化的过程。当你的朋友收到这个乐高模型包裹后,他们会按照说明书上的步骤,将这些零件重新组合起来,恢复成原来的模型。这个过程就是反序列化

现在,想象一下,你在邮寄包裹时悄悄塞入了一个可以远程控制的小摄像头,并在组装说明书中加入了这样一行字:“组装完成后,请按下按钮开启摄像头。”虽然这对组装乐高没有任何帮助,但却让你有了窥视朋友的能力。这个摄像头就是所谓的后门,而模型后门攻击的目标就是让你的朋友遵照说明,无意中启动这个摄像头。

序列化后门攻击的实现

AI模型可以以多种格式存储,但在众多存储格式中,有三种特别值得关注,因为它们面临着较高的序列化攻击风险:Pickle及其变种、SavedModel以及H5格式。

01
Pickle序列化后门
Pickle是Python的内置模块,实现了对一个Python对象结构的二进制序列化和反序列化。它的序列化漏洞由来已久,其官方文档开头便有对其风险的警告:

AI安全之模型序列化后门攻击

Pickle模块的风险在于反序列化时,__reduce__方法会被调用。这就意味着,只要在序列化之前重写__reduce__方法,并在里面嵌入执行操作系统命令的逻辑,就能在加载模型时触发这些命令,实现远程代码执行(RCE)攻击。

例如,假设你加载了一个被恶意修改过的模型,其中的__reduce__方法被重写为执行“cat /etc/passwd”命令:

AI安全之模型序列化后门攻击

只是简单地调用了Pickle.load,在反序列化时便执行了命令。

在与AI相关的框架中,Numpy和PyTorch的save函数都是使用的Pickle模块,因此也可以使用同样的方式来加载后门。

02
SavedModel序列化后门

SavedModel是TensorFlow提供的一种模型存储格式,它不仅保存了模型的所有参数,还包括了完整的计算图。尽管大多数TensorFlow操作专注于机器学习计算,但涉及文件操作的功能如io.read_file和io.write_file却为攻击者打开了序列化攻击的大门。

io.read_file可以被滥用去读取系统中的敏感文件,而io.write_file的风险更大,因为它可以用来写入任意文件。以Linux系统为例,攻击者可以利用它往用户的家目录.ssh/authorized_keys文件中写入SSH公钥,从而实现免密码登录操作系统。此外,还可以往cron文件中添加计划任务,自动下载恶意程序并在后台执行。

那么,如何让这些文件读写操作得以执行呢?这里的关键是利用TensorFlow的call函数。在TensorFlow中,无法直接在加载模型时执行反序列化攻击,而是在调用模型时才能触发。每当模型被调用时,都会执行一次call函数,而 build 函数则会在call函数首次执行时被调用一次。因此,只需将文件相关的操作写入call或build函数中,就可以在加载模型时实现文件的读写。

以下是一个在call函数里面实现了“io.read_file('/etc/passwd')”操作的模型加载和调用过程的例子:

AI安全之模型序列化后门攻击

在调用模型时进行预测时,io.read_file被执行了,且并不会影响predict的效果。

04
H5序列化后门

Keras是少数几个原生支持将模型序列化为HDF5格式的机器学习框架之一。HDF5作为一种在学术界和研究领域广泛流行的通用数据序列化格式,通常被认为是安全的。然而,Keras的Lambda层却为攻击者打开了一扇后门。

Lambda层的设计初衷是为了在数据传递给机器学习模型之前进行预处理或后处理操作。然而,它允许执行任意代码的特点,却成为了潜在的攻击点。攻击者可以利用Lambda层来执行操作系统命令,从而实现远程代码执行(RCE)攻击。

以下模型在Lambda层实现了“os.system('cat /etc/passwd')”操作,加载模型:

AI安全之模型序列化后门攻击

模型在加载时执行了Lambda层的命令。

序列化后门攻击的检测

说完了模型后门植入的方法,接下来我们来看看如何检测这些潜在的威胁。幸运得是,现在已经有一些开源的扫描工具可以帮助我们评估模型的安全性。例如,Protect AI的ModelScan工具就是其中之一。让我们一起探索这款工具在检测上述三种序列化后门方面的表现吧!

1. 检测pickle模型:

AI安全之模型序列化后门攻击

检测结果为严重风险,描述信息为使用来自模块“posix”的不安全运算符“system”。

2. 检测SavedModel模型:

AI安全之模型序列化后门攻击

检测结果为高风险,描述信息为使用模块“Tensorflow”中不安全的运算符“ReadFile”。

3. 检测H5模型:

AI安全之模型序列化后门攻击

检测结果为中风险,描述信息为使用模块“Keras”中不安全的运算符“Lambda”。此处只能检测存在Lambda层,没办法检测到具体的操作了。

使用工具进行检测只是保障模型安全的一个方面,更重要的是始终保持警惕,只使用来自可信来源的模型。毕竟,预防胜于治疗,确保模型的安全性从源头抓起才是王道。

关于昂楷磐石研究院

昂楷科技磐石研究院作为专注于技术研究的核心部门,多年来深耕数据安全领域,紧跟数据安全发展的前沿趋势,汇聚了一支技术实力雄厚的专业团队。随着人工智能技术的迅猛发展,我们积极投身于AI安全领域的探索,致力于深入研究AI攻击与防御技术,为推动AI安全的发展贡献力量。

展望未来,我们将不断强化自身的技术实力,为AI安全领域带来创新性的解决方案。我们的安全产品将逐步推出AI领域的专业能力,实现对AI攻击的有效检测、监测与防御,为用户提供全方位的安全保障。

原文始发于微信公众号(昂楷资讯):技术揭秘 | AI安全之模型序列化后门攻击

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月15日22:04:48
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   AI安全之模型序列化后门攻击https://cn-sec.com/archives/3070010.html

发表评论

匿名网友 填写信息