宅客频道编者按:AI 已经从神乎其神的东西落地在生活当中,智能音箱、无人驾驶、智能支付等都已经用上了 AI 的技术,并且通过实验、比赛、实际的产品, AI 已经在很多的领域达到了人类的平均水平,甚至在某些领域已经超过了平均水平。但是 AI 面对对抗样本却相当脆弱,本次演讲的主讲人 Dou 所在的百度安全已经通过实验证明,在原始数据上叠加很小的扰动就可以让 AI 产生错误的识别结果。
以下为 Dou 在第七届NSC网络安全大会(原中国网络安全大会)的演讲概要,宅客频道在不改变讲者原意的基础上对演讲全文进行了删减,小标题为编者所加,该文原标题为《迁移攻击云端AI,一个被遗忘的战场》。
演讲人:Dou,百度安全
在经典的图像领域,左边原始图片是一只熊猫,中间这一块是我们在原始图片上叠加的扰动,把扰动放在原始图片上形成新的图片,最后生成的图片叫做对抗样本。
从人的感官看,最后生成的对抗样本还是可以清晰识别为一只熊猫,机器识别模型可能把它识别为长臂猿或者其他的动物,这就是典型的对抗样本的例子。对抗样本有一个非常典型的特征,它欺骗的是 AI 模型,一般欺骗不了人,但人对原始数据的修改难以识别,这里举例的仅是图像数据,在语言、文本数据上也有同样的现象,在一段语音里叠加一段人不能理解或者是根本没法察觉的背景音乐,却可以欺骗智能音箱,2017 年浙大的徐老师通过海豚音实现了类似的攻击,对抗样本在广泛的 AI 各领域都存在,只是目前应用比较多的是图像识别和语音。
我们是否可以相对形象地解释一下对抗样本的存在?我们拿最基础的二分类问题举例,这个图像是不是熊猫,可以简化为二分类问题,机器学习的过程就是提供足够多的样本让模型学习,能够画出分割曲线,绿颜色就是熊猫,红颜色不是熊猫,学习以后画出熊猫,他知道曲线上面就是熊猫,曲线下面就不是熊猫。但是,如果修改一定像素,让它跨越这个分割,从机器的角度来说已经完成了从熊猫到不是熊猫的变化,但是从人的感官无法察觉,有时可能就是十几个像素点。
接下来对对抗样本有一些简单的分类,平常按照对抗样本的已知情况分为白盒、黑盒,现在介绍的就是白盒攻击,对你整个模型就是很了解,完整了解模型的结构,甚至是每个参数,也可以没有限制的访问模型的输入,这是一个非常强的条件,相当于整个模型我都了解,还有一个需要特别强调的是,我可以无限制访问模型输入,是直接访问的,这是非常强的,这是得天独厚的条件。
相对于白盒而言,困难一点的是黑盒攻击,我对你使用的模型、参数都不知道,不了解,几乎无限制的直接访问模型的输入。只能访问这个模型的输入,攻击难度就提升了很多,因为我对模型不了解,现在唯一能知道的就是模型输入,这里还有一点黑盒模型比较好的地方,在于我对你的输入是直接访问模型的输入,中间不会经过乱七八糟的处理,同时我对黑盒的访问是没有任何限制的,可以访问十万次,只要机器CPU足够猛,时间足够多,就可以无限制访问,这是一个特别好的条件,攻击云端的 API 接口是一种特殊形式的黑盒攻击,广义来说也是黑盒攻击,受的限制更多,除了之前介绍的我不知道你使用的是什么样的模型,也不知道什么样的参数,更麻烦的地方在于还要经过未知的图像预处理环节,云厂商不是傻子,图像传上去之前总得“动点手脚”,最常见的是把图像随机缩放。或者,从图像里随机CROP一个大小,预处理环节对攻击者造成了多大的影响,接下来会讲到这个事情。
还有一种云端访问的情况比较苛刻,访问次数和频率受限,他是收钱的,会限制你的速度,比如每秒只能传十张或者是免费一天只能处理一百张,超过一百张就得收钱,如果攻击者要攻击云端模型,访问的频率和次数受限,如果是土豪,可以充很多的值,另当别论,网络环境决定了你不可能太频繁地传图片,所以,攻击云端是最困难的。
因此,把模型放在云端会给我们一种错误的安全感,比如说我的模型如果是本地化部署,部署在你的手机或者是本地服务器里都是不安全的,攻击者可以通过反向破解甚至直接把模型拷出来就可以还原模型,把模型放在本地这是一个共识,大家觉得这是不安全的,但是如果把模型放在云端,会觉得你访问我的次数受限,你又不知道我是什么样的模型,又不知道模型是什么样的参数,是不是就很安全?这是一种错误的安全感,再对比一下,白盒和黑盒相比,黑盒困难,是因为黑盒不知道你的模型结构,也不知道你的模型参数,但是攻击云端很困难,正是因为这样的困难,把模型放在云端是很安全的,我会告诉你不是这样的。
今天讨论的问题就是攻击云端图像分类模型,只是举个例子,这是比较简单的场景,图像分类可以识别你是奔驰还是宝马,图像问题最后都可以划分为图像分类问题,这是最简单的图像分类的情况,拿最可爱的猫作为原始图片,一个攻击者希望在猫的图片上叠加一定的扰动以后攻击云端图像分类API,攻击之前我们的分类模型可以正确识别猫,概率是99%,攻击以后,模型将对抗样本识别为别的物体。
常见的几种攻击云端的方式,也是黑盒攻击的衍生,最常见的就是基于查询的攻击。
非常好理解,对应的模型我什么也不知道,一靠猜,二靠攻,可以不断通过查询的反馈来猜测、了解你的模型结构,同时我攻击的过程在查询中进行的,要通过大量的请求来了解模型的结构,并且攻击,攻击速度特别慢,成本比较高,因为有了云端的限制,攻击十万次,一万次以后,花一个小时甚至一天,比较慢,成本高,这是时间成本,还有,攻击要花比较多的钱。我了解到,通常云平台一天免费的量是从一百至两千都有,但是可以看到攻击这张图片就需要两万次甚至十万次,每攻击一张照片就得花几块钱或者是十几块钱。
此外,图像尺寸越大,查询次数越多。
基于查询的攻击方式在理论上可行,在2015年之前很多论文也只有通过查询才能攻击,浙大的纪老师提出一个新的算法,有一定的先验知识,我想把人的图片能够识别成一个猫或者是把猫的图片识别成一个汽车,是否可以让我修改的像素点只集中在猫或者是人的身上?首先把图像先做一个语义分割,把我们关注的人或者是物体分割出来,只修改该物体身上的像素点,这样就让我们查询的范围大大减少。
攻击人物识别模型,比如为了规避政策的风险,里面只要涉及到明星或者政治人物,尽量希望这张图片不要传上去或者是打上特殊的标记,现在很多云平台都提供这个功能——敏感人物识别,这是奥巴马的图片,通过在奥巴马图片上修改一些像素点,就无法识别这是奥巴马,这是基于查询攻击算法的改进。
第二种方法,如果已经知道云端模型,就可以把黑盒攻击退回为白盒攻击。
通过研究,很多图像分类模型基础单元是很接近的,甚至只是同一个模型增加了层次,对抗样本本身具有迁移性,如果模型结构越接近,攻击效果也就越好,纵列前三个可以认为是同一类模型,成素不一样,后面两个是别的模型,在本地会攻击这个模型,生成的对抗样本,再攻击云端的远程模型,纵轴是本地有的模型,横轴等于是攻击模型,数字表明的是准确率,这个值越低表示攻击效果越好,如果我的对抗样本都能让你识别错,我的准确率是零,值越小说明我的攻击效果越好,在对角线这个轴都是零,表我本地模型云端是完全一样的,攻击成功率应该是100%,识别是0,结构越接近的,他们对应的识别率比较低,这也证明了如果结构越接近,攻击效果越好,利用这一点,我们可以猜测云端可能是什么样的模型,在本地用同样的模型直接攻击,这样查询次数只有一次,攻击效率比较低,或者说成功率比较低。
接下来就是我们实验室今年提出来的一种新攻击方式,模型越接近,攻击效果越好,我们会去猜到底云端是什么样的模型,运气好了猜中,运气不好猜不中,是否有某种方式一定保证我可以猜中?
因为常见的图片分类模型只有那么多,假设我手上有一张猫的图片,把猫的图片拿到手上已知的模型里,每一个都生成对抗样本,猫让它识别成狗或者是猪都无所谓,只要识别错就行,把每一个生成的对抗样本都扔到云端问一下,就会有一个好玩的结果,如果某种模型返回的值或者是某种模型生成的对抗样本成功了,就意味着云端和本地的模型非常接近,通过有限的查询,以后就可以大概率猜测出云端是什么样的模型,大大提高了准确率,像已知的图像模型还是有限的,在二十种以内,在有限的查询次数摸清云端是什么样的图片,把黑盒攻击退化成为白盒攻击。
这是我们实际攻击的实验室案例,这是一个开源的无人车目标检测模型,正常情况下能够识别前方的卡车,后方是一辆汽车,通过我们的攻击方式后,可以让后面这辆汽车无法识别,汽车消失了,这是对抗样本直接的例子。
基于迁移的攻击攻击效果比较好,前提是攻击者手上必须有相似或者是类似的图像分类模型,目前开源比较多的ImageNet还是常见的一千个分类,如果要做恶意图像识别手上没有足够多的模型做迁移,怎么解决这个问题?
有一个新方式——尽量减少查询的次数,只能做白盒攻击,攻击者可以在本地模拟一个白盒,让它跟云端的功能相同,这就是替身攻击的方式,通过有限查询在本地训练出一个汽车模型,这样就把黑盒攻击又退化成为白盒攻击,它的攻击方式分为两步,第一步通过有限次的查询 API,得到结果后在本地训练出一个替身模型,第二步就是白盒攻击。
这是我们在上个月在DEF CON CHINA 1.0 提的改进版汽车攻击,常见的替身攻击需要大量的样本,攻击者很难收集成足够的图片,如果能用尽量少的图像在本地训练出一个模型,做了两个假设,假设直接拿攻击图片作为训练图像,我就直接发出我的训练样本,第二,让本地快速使用少量的样本模拟出云端功能。
这里就讲到我们用的比较典型的功能,第一,就是我们做训练模型时通常只会关注你的输出,把原始图像扔给你,只会关心你最后分类的标签对不对,就像老板在你工作的最后一天只看你的结果,这样的效果不会太好。一个比较好的老板会怎么做?他会在项目关键的节点抽查你,看你做的事情跟他预想的是否一样,我们在训练时多了一个环节,以前训练时只会关心整个模型的输出跟预想的结果是否一样,但我们在实现时会看这几个模型在几个关键点的输出是否跟我设想的一下,我们对项目的把控会更好,从模型训练角度来讲,就会用更小的数据训练出更好的模型,更像是如何更好地做迁移学习的过程。
第二,通常图像识别模型是卷积的,我们把模型分为三部分,比如模型的前半部分我们提取的都是一些初级的特征,比如猫跟人之间提取的是他们身上的纹理,这都是比较初级的特征。第二层是中间层,提取的是稍微高级一点的特征,可能到器官或者是更高级别的特征,到了最后一个级别,更高级别的特征出现了完整的比如人的躯干,完整的头形,层次越低,提取的特征越初级,层次越高,提取的特征更高,在攻击的时除了让目标产生分类错误,在更高级别上跟原来的图片上产生的差距越大,迁移也就越强,这是我们做的两个点,一是在替身学习时,用尽量少的样本确认出方法更强的模型。
第二,在白盒攻击的时候增加了特征图损失,提高攻击的迁移性,攻击常见的云端平台后,攻击成功率达到了90%,已经接近于白盒的能力,这是我们利用图像分类的攻击模型,我们攻击的是图像搜索,图像搜索在实现上有很多的技术,现在比较主流的还是图片传上去以后,根据分类结果去找相同的图片。
刚才讲的前三种都是比较有技术含量的,我需要把模型算一算,后面就是一种新发现的方式,机器学习模型的弱点,这种攻击方式本身不需要大家有深度学习的知识,也不需要大家会高等数学,这是国外研究者发现的,AI 模型或者是图像分类模型确实可以在图像分类任务上达到人类平均水平或者是高出人类,在本质上并没有理解什么是猫,什么是狗,理解的还是统计学上的规律,有的翻译成空间攻击,无所谓,用比较通俗的语言来说,我在图片上做一个简单的旋转,增加一些噪音,从人的角度理解没有任何问题,因为我们是真正理解什么是猫,什么是狗,从一个机器的角度来说,图片就是一个矩阵,矩阵类的数据却发生了很大的变化,图像只是旋转十度,但是对图像来说,矩阵上的每个像素点的值都被修改了,对于机器来说全改掉了,今年国内的老师好像也发了相关的文章,同样的图片,本来是手枪,旋转一下,差不多十度,就把一个手枪识别成捕鼠器,中间的秃鹰,旋转一下,就变成了大猩猩,右边这个,常见的噪音有几个,一个是高斯噪音,早期的黑白电视信号不太好,会出现黑白点,就出现了椒盐噪音,这个是谷歌的例子,左边的图片就是一个茶壶,通过叠加了10%的椒盐噪音把它识别成一个生物。第二个例子,一张别墅的图片叠加了15%的椒盐噪音就被识别成生态系统,导致结果分类输出产生了错误。
以上四种攻击都可以在不同程度实现对云端 AI 模型的攻击,也验证一个观点,把模型保留在云端给人一种错误的安全感。
处在学术研究阶段的防守方式比较多,只能防守一些点,只有都用上才能对抗中低级攻击,我们把我们能做的事情做好,提升黑客的攻击门槛,这样保证黑客不会轻易把我们的模型偷走,一旦模型被偷走,黑盒攻击退化成了白盒攻击,成功率接近100%,最重要的一步,云端的 web 安全要做好,要保证别把模型偷走。
第二,加强滤波器去噪,基础的滤波器可以干掉常见的高斯、椒盐噪音,提高鲁棒性,希望大家在不太费劲的情况下加一个滤波,但也有一定的风险,可能降低识别率,大家要做测试。
第三,国外研究员在 2018 年的ICLR上提了七种防御方式,最后也被一个大佬攻破,这是一种最容易实现而且效果还不错的防御方式,生成对抗样本的过程其实就是利用模型的过拟合,比如在模型实现时可能识别了比较细微的特征,这些细微的特征弥补上就可以欺骗攻击,比如机器识别一张图片为猫,是因为有一些特殊的褶皱,这些攻击特征因为很细致,把图像做轻微旋转缩放后,从人的角度来说,图像本身没有发生变化,对抗样本就会失效,这个实现非常简单,效果比较好,图片再传到云端之前预处理,把图片做随机缩放,随机挪位置,这样对图像分类结果不会产生太大的影响,但是对对抗样本尤其是基于优化、修改量比较小的样本会有比较好的防守效果。
另外,我比较推崇的防守方法叫做对抗训练,无论你怎么做图像预处理,本质就可以说是梯度掩码,证明这样的方式比较容易攻破,还是要给它喂一些数据,把生成的对抗样本扔给你,再扔到模型重新训练,这样会让模型变得更加可靠。
我们也开源了AI模型工具箱,可以利用生成对抗样本,重新训练自己的模型,让自己的模型更好抵御攻击。
宅客频道注:第七届NSC网络安全大会(原中国网络安全大会)由赛可达实验室、国家计算机病毒应急处理中心、国家网络与信息系统安全产品质量监督检验中心、首都创新大联盟及百家行业联盟共同主办。
联系客服