刘焱(兜哥):迁移攻击云端AI服务:一个被遗忘的战场

DSC_2613

刘焱(兜哥)  百度资深安全研究员

摘要:近年来,深度学习(DL)技术被广泛应用于计算机视觉任务,特别是图像分类问题,据报道新的算法可以达到甚至超过人类的性能。最近的许多研究表明,DL模型容易受到对抗样本的攻击,但幸运的是,生成对抗样本通常需要对受害者模型进行白盒访问,基于云的图像分类服务相比白盒分类器,它的结构和参数未知,攻击者只能访问云平台开放的API。因此,将模型保存在云中通常会产生一种(错误的)安全感,本文主要研究基于云的图像分类服务的安全性,将介绍针对云端图像分类服务的三类攻击形式,分别为几何攻击、基于查询的黑盒攻击、迁移攻击。

百度X-LAB,隶属于百度安全部,主要是负责百度安全比较核心的技术研究,对外的宣传口号主要由中美安全专家组成,研究主体在国内,在美国那边有一部分的研究人员,我们这个团队主要的研究是跟AI相关的领域,针对AI模型攻防方面的信息,我们对外输出了大量的开源软件,这里列举了其中四个,第一个就是ADVBOX,我们在AI模型攻防方面的工具箱。

MESALOCK,MESALINK,就是我们开源通信加密的库,接下来会详细介绍。

先跟大家简单介绍一下AI与对抗样本,AI已经从神乎其神的东西落地在生活当中了,从智能音箱,无人驾驶,智能支付等等都已经用上了AI的技术,并且通过实验,比赛,实际的产品让我们感觉到AI已经在非常多的领域达到了人类平均水平,甚至在某些领域已经超过了平均水平,比如下象棋据说人类最高水平已经下过了,包括打地主各种游戏非常多,但是AI它的很多领域能够达到很好的水平,本身还是相当脆弱的,实验已经证明我们在原始数据上叠加很小的扰动就可以让AI产生错误,这是非常经典的图像,不是很多同学都熟悉这个领域,左边是一个原始图片是一个熊猫,中间这一块是我们在原始图片上叠加的扰动,把扰动放在原始图片上形成新的图片,把最开始的图片叫做原始图片,中间这一块叫做扰动,最后生成的叫做对抗样本,从人的感官来说最后生成的对抗样本还是可以非常清晰识别就是一只熊猫从机器识别模型来说可能把它识别为长臂猿或者是其他的动物,这就是典型的对抗样本的例子,对抗样本有一个非常典型的特征,它欺骗的是AI模型,欺骗不了人,它对原始数据的修改从人的感官来说是很难察觉的,这里举的只是图像数据,在语言,文本数据,包括语音数据也有同样的现象,在一段语音里面叠加一段人不能理解或者是根本没法察觉的背景音乐,却可以欺骗智能音箱,这个是跟(英)联合测试已经实现了,在2017年浙大的老师也通过类似的方式实现了,对抗样本在广泛的AI各领域都存在的,只是AI目前应用比较多的只是在识别和语音。

我们是否可以相对形象的来解释一下对抗样本的存在呢?这是我们拿最基础的二分类问题,这个图像是熊猫还是不是熊猫,我们就把这个问题简化为二分类问题,机器学习的过程就是提供足够多的样本让模型学习,能够画出分割曲线,绿颜色就是熊猫,红颜色不是熊猫,学习以后画出熊猫,他知道曲线上面就是熊猫,曲线下面就不是熊猫,对抗样本的理解,这个红颜色的假设红颜色是熊猫,我们就让他修改一定的像素,让他跨越这个分割,从机械的角度来说已经完成了从熊猫到不是熊猫的变化,但是从人的感官来说由于修改数据非常小,有时候可能就是十几个像素点,从人的角度来说根本看不出区别,从机器来说已经跨越了这一步,曲线就是在法律的来回的试探,刚才讲的是对抗样本,让大家比较形象的理解什么是对抗样本,接下来对对抗样本有一些简单的分类,平常按照对抗样本的已知成为分为白盒、黑盒,现在见到的就是白盒攻击,对你整个模型就是很了解的,完整了解模型的结构甚至是每个参数,也可以没有限制的访问你的输入,这是一个非常强的调整,相当于整个模型我都了解了,这里面还有一个需要特别强调的是我可以无限制访问模型输入,是直接访问的,这是非常强的条件,在后面可以发现这是得天独厚的条件。

相对于白盒来说,困难一点的是黑盒攻击,我对你使用的模型、参数都不知道,不了解,几乎无限制的直接访问模型的输入,最后整个模型对我来说是什么都不知道,只能访问这个模型的输入,攻击难度就提升了很多,因为我对模型不了解,现在唯一能知道的就是模型输入,这里还有一点黑盒模型比较好的地方,在于我对你的输入是直接访问模型的输入,中间不会经过乱七八糟的处理,同时我对黑盒的访问是没有任何限制的,可以一次,也可以访问十万次,只要机器CPU足够猛,时间足够多,就可以无限制访问,到后面发现这是一个特别好的条件,攻击云端的API接口是一种特殊形式的黑盒攻击,广义来说也是黑盒攻击,受的限制更多了,除了之前介绍的我不知道你使用的是什么样的模型,也不知道什么样的参数,有一个更麻烦的地方在于还要经过未知的图像预处理环节,云厂商他们也不是傻子,图像传上去之前总得动点手脚,最常见的把图像随机的组合一下,也不是随机的,图像模型大小是固定的,因为模型输入是固定的,对用户来说要做到比较好的用户体验,大小图片都能干。另外一个做一个随机的CROP,从图像里随机CROP一个大小来,预处理环节对我们造成了多大的影响,接下来会讲到这个事情,老生常态的就是云端模型也是什么也不知道,只能猜是什么样的模型。

还有一点最为过分的云端访问,我的访问次数和频率受限,他是收钱的,会限制你的速度,比如每秒只能传十张或者是免费一天只能处理一百张,超过一百张就得收钱,如果我要攻击云端模型我访问的频率和次数是受限的,如果是土豪可以充很多的值也是另当别说,网络环境决定了你不可能传图片太频繁,给大家回顾一下为什么攻击云端是最危险的,首先对模型不了解,另外有未知的处理环节,对模型的输入不是直接访问的,还会受到频率和次数的限制,攻击云端是最困难的。

因此我们把模型放在云端会给我们一种错误的安全感,比如说我的模型如果是本地化部署,部署在你的手机里或者是本地服务器里都是不安全的,我可以通过反向破解甚至于直接把你的模型拷出来就可以还原你的模型,把模型放在本地这是一个共识,大家觉得这是不安全的,但是如果把我的模型放在云端会觉得你访问我的次数受限,你又不知道我是什么样的模型,又不知道模型是什么样的参数是不是就很安全?这是一种错误的安全感,再对比一下,白盒和黑盒相比,黑盒困难,是因为黑盒不知道你的模型结构,也不知道你的模型参数,但是攻击云端很困难,正是因为这样的困难,把模型放在云端是很安全的,是否是这样的,后面会告诉你不是这样的。

现在回到今天讨论的问题,今天讨论的问题就是要攻击云端图像分类模型,只是举个例子,这个比较简单的场景,图像分类可以分别你是奔驰还是宝马,图像问题最后都可以划分为图像分类问题,这是最简单的图像分类的情况,拿最可爱的猫作为我们的原始图片,作为一个攻击者希望在我们猫的图片上叠加一定的扰动以后,攻击云端图像分类API,攻击之前我们的分类模型可以把它正确的识别猫,概率是0.99%,攻击以后对抗样本识别以后就是别的物体,希望通过我们的精心修改让我们云端模型把这个猫识别错,至于识别成什么不关心,只要识别不是猫就可以了,常见的几种攻击云端的方式,也是黑盒攻击的衍生,最常见的就是基于查询的攻击,非常好理解,我对应的模型我什么也不知道,依靠猜,二靠攻,可以不断的查询通过查询的反馈来猜测了解你的模型结构,同时我攻击的过程在查询中进行的,有一个典型的特征要通过大量的请求来了解模型的结构,并且攻击,攻击速度特别慢,成本比较高,慢体现在因为有了云端的限制,攻击十万次,一万次以后,花一个小时甚至一天,比较慢,成本高,一个是时间成本,还有一个是攻击要花比较多的钱,通常云平台我了解到的一天免费的量是从一百至两千都有,但是可以看到攻击这张图片就需要两万次甚至十万次,每攻击一张照片就得花几块钱或者是十几块钱,一个是时间成本,一个是金钱成本,这里举个例子,先解释两个数量极,一个是(英)极,它的大小是32乘32乘3,有十个分类,图像大小是32乘32,(英)图像比较大了,是24乘24,长宽是相等的,追求的目标这里指的是(英)准确率,这里是原始模型,第二个是攻击成功率,只要我们攻击的时候识别了第一个分类产生了错误我们认为它攻击成功了,怎么理解,在AI模型使用的过程中,我扔进去一个图片,通常会访问给我很多分类结果的概率,像(英)会反馈一千个分类结果的概率,我们会按照概率的前几名来排名,比如第一名,返回概率最大的值就是正确的,如果是第五名,我们现在以最严格的形式就看返回最大值不是猫我们就认为它是成功了。

(英)的数据级,要达到99.6%的攻击率,平均查询次数要接近五千次,要到(英),查询次数要接近两万五千次,查询次数是比较多的,如果攻击图片越大,查询次数就越多,越大的图片需要的像素也比较多,需要查询的次数也是很多的,这里给大家一个感性的认识,基于查询的攻击方式攻击成本是很高的,这里列举了(英)数据级的亮点,它一共有十个分类,猫,马类的,(英)有一千个分类,从常见的车、人、小猫、小狗都有,也是最常见的数据级。横轴表示的我们统计每张图查询的次数,纵轴比如我两千次,对应的纵轴有二十个图片我需要查询两千次才能完成,图像尺寸越小,我查询的次数就越少。

基于查询的攻击方式在理论上可行,在2015年之前很多论文也只有通过查询才能攻击,浙大老师提出一个新的算法,有一定的知识,我想把人的图片能够识别成一个猫或者是把猫的图片识别成一个汽车,是否可以让我修改的像素点只集中在猫或者是人的身上,这里的知识首先把图像里面先做一个语义分割,把我们关注的人或者是物体分割出来,想要马识别成别的动物或者是车,修改的像素点只修改马身上的像素点,这样就让我们查询的范围大大减少,这里举个例子,攻击一个政治人物识别,比如我为了规避政策的风险,里面只要涉及到明星或者是政治人物尽量希望这个图片不要传上去或者是打上特殊的标记,现在很多云平台都提供这个功能政治人物识别或者是敏感人物识别,这是一个奥巴马的图片,通过在奥巴马图片上修改一些像素点,识别政治人物,本来是奥巴马的图片传上去之后返回的结果是政治人物,改了一个像素点识别成物体,这里观察的是人本身,只要修改你人身上的像素点就可以了,这是基于查询攻击算法的改进。

第二种方法,刚才介绍的是基于查询的,如果我已经知道了云端模型就可以把黑盒攻击退回为白盒攻击,是否我们可以这样去做,大家通过研究发现很多图像分类模型基础单元是很接近的,甚至同一个模型增加了层次,对抗样本本身具有迁移性,如果模型结构越接近,攻击效果也就越好,纵的这一列,前三个可以认为是同一类模型,成素不一样,后面两个是别的模型,在本地会攻击这个模型,生成的对抗样本会再攻击云端的远程模型,纵轴是本地有的模型,横轴等于是攻击模型,数字表明的是准确率,这个值越低表示攻击效果越好,如果我的对抗样本都能让你识别错,我的准确率是零,值越小说明我的攻击效果越好,在对角线这个轴都是零,表明我本地模型云端是完全一样的,攻击成功率应该是100%,识别是0,结构越接近的,他们对应的识别率比较低,这也证明了如果我的结构越接近,那我的攻击效果就越好,利用这一点,我们可以猜测云端可能是什么样的模型,在本地用同样的模型直接攻击,这样查询次数只有一次,有点懵,不一定是100%就会成功,有一个特点攻击效率比较低,或者是成功率比较低。

接下来就是我们实验室在今年亚洲会上提出来的一个新的攻击方式,我们的模型如果越接近我们的攻击效果越好,我们会去猜到底云端是什么样的模型,运气好了猜中,运气不好猜不中,是否有某种方式一定保证我可以猜中,因为常见的模型只有那么多,图像分类的,假设我手上有一个猫的图片,把猫的图片拿到我手上已知的模型里面,每一个都生成对抗样本,猫让它识别成狗或者是猪都无所谓,只要识别错就行,会把每一个生成的对抗样本都扔到云端问一下,就会有一个好玩的结果,如果某种模型返回的值或者是某种模型生成的对抗样本成功了,就意味着云端和本地的模型非常接近,通过有限的查询以后就可以大概率猜测出云端是什么样的模型,大大提高了准确率,像已知的图像模型还是有限的,在二十种以内,在有限的查询次数摸清云端是什么样的图片,把黑盒攻击退化成为白盒攻击。

这是我们实际攻击的例子,这是一个开源的无人车目标检测模型,正常情况下能够识别前方的卡车,后方是一个汽车,通过我们的攻击方式以后,我们可以让后面这辆汽车识别不出来,就是这种汽车消失很好实现,目标检测前面有框画出来的物体不是汽车,他认为这个汽车就消失了,以前这辆车会被识别为汽车,在图像分类让识别成猫或者是狗,从汽车的角度来说前面的汽车就消失了,围绕着人、汽车消失实现的是从目标检测模型里面变成别的类别就可以了,把汽车识别成猫或者是狗就可以,在原始图像可以正确识别卡车或者是汽车,经过我们的攻击只能识别前面的卡车,离它非常近的汽车却消失了,这是对抗样本直接的例子。

前面讲的两种方式一个是迁移攻击,一个是基于查询的攻击,基于迁移的攻击攻击效果比较好,有一个前提我在手上必须有相似或者是类似的图像分类才可以,目前开源比较多的还是常见的(英)一千个分类,如果要做黄色图像识别或者是恶意图像识别手上没有足够多的模型做迁移了,怎么解决这个问题,有一个新的方式,我要尽量减少查询的次数,只能做白盒攻击,我可以在本地模拟一个白盒,让它跟云端的功能相同,人们提出替身攻击的方式,通过有限查询在本地训练出一个汽车模型,这样就把黑盒攻击又退化成为白盒攻击,它的攻击方式分为两步,第一步通过有限次的查询API,得到结果以后在本地训练出一个汽车模型,训练汽车模型以后就可以进行白盒攻击了。

这个是我们在上个月在(英)提的一个改进汽车攻击,常见的汽车攻击需要大量的样本,作为攻击者我很难收集成足够的汽车图片,退化成另外一个问题,如果能用尽量少的图像在本地训练出一个模型,做了两个假设,假设我直接拿我的攻击图片作为训练图像,我就直接发出我的训练样本,第二个用到(英)技术,让本地快速的使用少量的样本能够模拟出云端的功能,这里就讲到我们用的比较典型的功能,第一个就是我们在做训练模型的时候通常只会关注你的输出,把原始图像扔给你,我只会关心你最后分类的标签对不对,就像一个老板一样,在你工作的最后一天只看你的结果,这样的效果不会太好,比较常见的方式,或者说一个比较好的老板会怎么做,会在一个项目关键的节点会抽查你,看一下你做的事情跟他预想的是否一样,我们在训练的时候多了一个环节,以前训练的时候只会关心你整个模型的输出跟预想的结果是否一样,但我们在实现的时候会看到这几个模型在几个关键点的输出是否跟我设想的一下,我们对项目的把控会更好,从模型训练角度来讲就会用更小的数据训练出更好的模型来,更像是如何更好的做迁移学习的过程。

第二个点,通常图像识别模型是卷积的,我们把模型分为三个部分,比如模型的前半部分我们提取的都是一些初级的特征,比如猫跟人之间提取的是他们身上的纹理,这都是比较初级的特征。第二层是中间层,提取的是稍微高级一点的特征,可能到重要的边缘,纹路或者是更高级别的特征了,到了最后一个级别,更高级别的特征出现了完整的比如人的躯干,人完整的头形,层次越低,提取的特征是越初级的,层次越高,提取的特征更高,我在攻击的时候除了让我的目标产生分类,在更高级别上跟原来的图片上产生的差距越大,迁移也就越强,这是我们做的两个点,一个是在替身学习的时候,用(英)技术用尽量少的样本确认出方法更强的模型。

第二个在白盒攻击的时候增加了特征图,提高攻击的可靠性,通过这两步攻击了常见的云端平台,攻击成功率达到了90%,已经接近于白盒的能力了,这是我们利用图像分类的攻击模型,我们攻击的是图像搜索,图像搜索在实现上有很多的技术,现在比较主流的还是我的图片传上去以后,我根据你的分类结果去找相同的图片,也有很多跟你的图像找相似度找的,只要图片传上去以后根据分类结果返回类似的结果,通过这个攻击也验证了我的说法,之前传上去的图片是英国长毛猫,用对抗样本以后识别的是一个树,后面展示的图片也是树,对抗技术在图像检索上面也是生效的。

刚才讲的前三种都是比较有技术含量的,我需要把模型算一算,后面就是一种新发现的方式,机器学习模型的弱点,这种攻击方式本身不需要大家有深度学习的知识,也不需要大家会高等数学,这是国外研究者发现的,AI模型或者是图像分类模型确实可以在图像分类任务上达到人类平均水平或者是高出人类,在本质上并没有理解什么是猫,什么是狗,理解的还是统计学上的规律,有的翻译成空间攻击,这无所谓,从比较通俗的语言来说我在图片上做一个简单的流转,增加一些噪音,从人的角度理解没有任何问题,因为我们是真正理解什么是猫,什么是狗,从一个机器的角度来说,图片就是一个矩阵,矩阵类的数据却发生了很大的变化,图像只是旋转十度,但是对于图像来说我矩阵上的每个像素点的值都被修改了,对于机器来说全改掉了,今年是浙大的老师好像也发了相关的文章,同样的图片,本来是手枪,旋转一下,差不多十度,就把一个手枪识别成捕鼠器,中间的秃鹰,旋转一下,就变成了大猩猩,右边这个,常见的噪音有几个,一个是高斯噪音,早期的黑白电视信号不太好,会出现黑白点,就出现了椒盐噪音,这个是谷歌的例子,左边的图片就是一个茶壶,通过叠加了10%的椒盐噪音把它识别成一个生物,也不知道是什么样的生物,但不是茶壶了。

第二个例子,这是一个别素,叠加了15%的椒盐噪音识别成生态系统,确实导致的结果分类输出产生了变化,无论是住宅还是生态系统,识别标签发生了变化,我认为你的攻击是成功的,这个东西本身并没有用很深奥的知识,确实导致你的分类结果产生了错误。

这个图,大家可以理解这个值越大,表明我的误差越大,横轴代表移动,比如移动十个像素点或者是三十个像素点,向左边移动三个像素点或者是向右边移动三个像素点,这个横轴代表的是我的图像移动的像素点的个数,这个横轴也可以叫纵轴,代表的是你的图像旋转角度,是在正负三十度之间,我的像素移动的个数控制在10倍左右,第一个例子是手写数据级,是28乘28,左右移动只有三个像素点,到了右边(英)我记得图像大小是32乘32,移动正负也是三个像素点,到了最右边(英)大小是24乘24,移动大小是左右各20个像素点,我在横轴上移动的个数只控制在图像的10%以内,是在Y轴移动的角度都是在正负30度之间,向左边移动三个像素点,同时移动的度数在负30度至30度之间整个偏差是比较大的,如果我把图像旋转正负30度,同时我在横轴上面移动正负3个像素点,分类结果会产生巨大的变化,当然是不同图像不一样,如果是针对(英)可能需要移动20个像素,左右移动也就是30个就可以了,表明的观点,如果我配合角度旋转以及图像的左右移动都会导致分类产生巨大的变化,分类变化直观的感觉把猫识别为狗,手枪识别为汽车。

通过以上四种攻击都可以在不同程度实现对云端AI模型的攻击,也验证一个观点,把我们的模型保留在云端给人一种错误的安全感,我们现在主要验证的还是图像分类模型,云端还有很多像云识别这些并没有做很多的攻击,这种说法也不是太严谨用更合理的方式来说把图像分类模型放在云端并不安全。

防守方式,在学术研究比较多,只能防守一些点,只有都用上才能对抗中低级,把我们能做的事情做好,提升我们的攻击门槛,做事情第一步传统安全需要做的事情,我们必须做好我们基础的web安全,这样保证黑客不会轻易把我们的模型偷走,一旦模型被偷走,黑盒攻击退化成了白盒攻击,成功率接近100%,最重要的一步,我们云端web安全要做好,要保证别把我的模型偷走。

第二个加强滤波器去噪,基础的滤波器过滤,可以干掉常见的高斯、椒盐噪音,提高鲁棒性,希望大家在不太费劲的情况下加一个滤波,也有一定的风险在里面,有可能降低你的识别率,大家要做测试。

第三步这是我们公司的同学跟别人发的论文,在2018年(英)提了七种防御方式,最后也被一个大佬攻破,这是一种最容易实现而且效果还不错的防御方式,生成对抗样本的过程其实就是利用过滤盒的实现,比如在模型实现的时候可能识别了比较细微的特征,这些细微的特征弥补上去就可以把攻击欺骗,比如猫的图片机器识别猫有一些特殊的褶皱他认为这就是狗,这些攻击特征因为很细致,把图像做一个轻微的旋转缩放之后,从人的角度来说图像本身没有发生变化,对抗样本就会失效,这个实现非常简单,效果比较好,图片再传到云端之前预处理,把你的图片做一个随机缩放,随机的挪位置,这样对我的图像分类结果不会产生太大的影响,但是对我的对抗样本尤其是基于优化,基于修改量比较小的样本会有比较好的效果。

另外一个是我比较推崇的叫做对抗训练,无论你怎么做图像预处理,本质就可以说是梯度掩码,证明这样的方式比较容易攻破,还是要给它喂一些数据,把生成的对抗样本扔给你,再扔到模型重新训练,不要以为它是狗了,它是猫,这是对抗训练的过程,重新训练,这样会让我的模型变的更加可靠,后面讲的就是攻击成功率,基于对抗训练的方式还是比较好的能够提升攻击。

我们也开源了AI模型工具箱,用它比较好的生成对抗样本,可以利用生成对抗样本重新训练自己的模型,让自己的模型更好的抵御攻击。

上一篇:潘柱廷:主持人

下一篇:汤青松:PHP反序列化漏洞分析实践