从攻击者以及防御者角度详谈比特位翻转对AI安全的影响
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从攻击者以及防御者角度详谈比特位翻转对AI安全的影响相关的知识,希望对你有一定的参考价值。
参考技术A 如今众多领域均能看到AI的影子。在AI技术中,深度学习因其较高的准确率,更灵活的弹性使得其成为代表。然而随着各个行业对准确率要求的不断提高,对高质量数据要求的不断提升,现如今的模型已经呈现越来越大的趋势,传统的小机器已经没有办法训练如此庞大的模型(许多模型一次要训练上万轮,并且需要数月)。所以一个准确率高,鲁棒性好的模型是要耗费大量的资源来换取的。此外,这些训练好的模型会被部署到各个领域为行业提供精准的服务。可想而知,深度学习模型的安全是非常重要的。如果人脸识别模型被肆意篡改,那么有人脸门禁、人脸支付就立刻失效;自动驾驶领域中如果模型被篡改,那么路上行驶的车就无法识别特殊情况,从而带来严重的安全后果。本稿首先为读者介绍深度学习特征后,之后进一步归纳出了一些攻击手段,并从攻击者的角度去阐述了如何对模型进行攻击,之后又切换为防御者角度并提出两种解决方案,以供读者学习。鉴于许多读者有可能对深度学习了解较少,我这里用一些篇幅做一个简短介绍。深度学习可以分为训练与推理两个过程,训练是指通过投喂大量数据集从而使得模型具有分类或者回归的能力。而训练好的模型则可用于推理,即真正的用来做事情。比如扔进来一张图片,模型能告诉你这是什么类别。而模型类似于y = kx + b这样的公式,图片为输入x,k以及b需要我们训练出来合理的数值,从而使得y更准备。深度学校模型中的参数均是采用浮点数的形式,即32位Float。而我们知道,IEEE 754中浮点数中可以分为1位符号位,8位指数位以及23位尾数位。其中指数位表示的范围很大,尾数位用于细粒度的精度。而在推理的过程中,数值对最终结果的影响是非常巨大的,比如将y = kx+b中的k乘100倍,那经过公式计算出的数值将会变的非常大,从而影响最终的分类效果(这里就是我们本文的攻击的最核心的本质点)。
此外我们再介绍一下我们攻击场景的基本知识点:Rowhammer是一个常见的比特位翻转攻击-“Rowhammer比特翻转攻击是指利用临近内存单元之间电子的互相影响,在足够多的访问次数后让某个单元的值从1变成0,反之亦然。这种攻击可以在不访问目标内存区域的前提下使其产生数据错误。该攻击与操作系统和软件无关,纯粹是硬件上的漏洞导致的”[1] 。而该漏洞其实会随着DRAM的不断更新而变得越来越严重,举例来说:这几年的内存容量正在大幅度上涨,所以存储比特位的电容器也就越来越小,排列越来越近。要防止相邻的电容之间相互干扰,难度也就变得更大。如果能够快速、反复访问一排电容,相邻行的电容更容易产生干扰错误和所谓的“比特位翻转”,也就是0变成1 [2] 。如图1一样,红色的部分是被攻击区域,蓝色为攻击者区域,通过对蓝色区域的多次访问,红色区域会产生比特翻转的情况,从而修改内存数据。
根据前言以及背景,我们在这一章节总结一下我们的具体攻击方案并探究其造成的危害。通过比特位翻转,我们通过修改现有的精度较高的模型的某些位,从而使得该模型丧失分类或者回归的能力,然而这里有一些问题需要我们讨论:(1)模型的参数如此多,修改哪些位能够使得作恶人付出的代价最小且达成的效果最好呢?(2)模型中究竟存在多少参数能够对模型精度产生巨大的影响呢?(3)比特位翻转0到1与1到0的效果一致吗?原因又如何?下面我们根据实验的结果进行一些讲解,从而加深读者对AI模型特征的理解。
首先我们需要定义一个指标,即对模型精度的影响程度。在AI领域,提升少量百分比就是一个很好的进步,所以我们在这里定义如果模型精度降低百分之10,那么就算该模型收到了巨大的影响。针对问题1,我们进行了以下实验:我们选取了19种不同的深度学习模型+数据集,并且对其中的参数进行了比特位翻转测试。
MNIST数据集比较小,且他对应的模型相对都比较小,所以对于这些模型,我们对其所所有的参数均进行测试(例如B中21840个参数)。其中SV表示测试数据集的个数(对号为百分之十,X表示数据集全部用于测试);SB表示对参数的哪一部分(某一位?指数部分?亦或是全部位)进行测试;SP表示取多少参数;我们在这组测试的逻辑可以这样叙述:以MNIST中B(ase)为例,对该模型我们使用全部数据集进行测试(SV为X),并且对模型中所有21840个参数(SP为X)的所有位均进行测试(SB为X),如果该参数中存在某些位的改变使得整个模型的精确度下降10%,那么就可以说明该参数是易受攻击的,即攻击者就会有较高的概率把该模型击垮。所以最右侧的Ratio代表了其比例。对于CIFAR10数据集下的模型,这里只测试了其浮点数的指数位(8位);对于ImageNet,由于模型太大了,测试所有的位数不现实,所以只改变了浮点数的最高位指数位,并且抽样其中的20000个参数进行测试。从图2的最右侧能够看出,几乎所有的模型都存在将近一半的参数是易受攻击的,这对于攻击者来说是个好事。
此外,为了搞清楚比特翻转的位置对模型精度的影响,同样对各个位做了测试。这里不进行图表展示。简单来说就是指数位最高位影响是最大的(第31位),然后由于深度学习模型中第30~28位一般均为1,所以翻转后为0并不会使得该参数变为易受攻击的,所以这些位可以选择不进行翻转攻击。此外,27、26同样影响精度。所以总结来说,作为攻击者要尽量的攻击第31位,27、26位。后面的位数由于代表的数值太小,对浮点数的整体影响不大,所以可以选择放弃。
对于特定翻转类别来说,这里需要探究一下0到1以及1到0的区别。这里我们要清楚,1到0代表把原来的数值绝对值变小,而0到1表示变大,所以很直观的来看,把数变大会使得我们的模型计算的结果变的非常大,比如我把第31位从0变成1,那我这个数值整体会增加一个非常大的量。然而又由于深度学习本身的归一化影响,里面的很多数据都是处于-1到1之间,所以基本上较高指数位的值均是0,所以这里很少有1到0的情况。总结来说,攻击者需要尽量对最高位的0变为1,从而会使得参数爆炸增长。
我们现在站在攻击者的角度总结一下攻击,即由于模型中的参数有将近一半的概率会对最终的精度产生影响,所以我们不需要刻意的挑选模型的攻击参数;第二,我们在攻击参数的时候,尽量选择指数考前的位置,从而能够使得参数变化非常剧烈;第三,我们尽量将原本为0的数据改为1,从而增加原本参数的值,从概率上增加攻击的成功率。
攻击同样需要防御方案,这里我们根据上面的内容总结一下对应的防御措施。这里有两种方案可以作为参考:(1)使用特定的激活函数从而限定参数的范围;(2)使用低精度的参数代替32位浮点数。简单来说,深度中激活函数包括很多种类,有的种类并不会限定数据输出的范围,从而使得数据变化范围非常大,较大的范围使得模型弹性非常差,稍微一点点改变就使得模型最终的精度变差。通过例子来说,这里可以使用类似RELU-6来将数据限定在6以内,从而代替无限制的RELU,从而使得模型具有较好的弹性;第二使用16位或者8位的数据代替32位浮点数。例如8位最多的变化为128,而不是浮点数的38次方。上述两种方法均可以缓解攻击。此外,除了从模型的角度入手,我们也要加强硬件安全,比如我们在云环境下去避免Rowhammer的干扰,从而使得攻击者无法改变其他用户的数据bit,从根部上遏制攻击。
本文通过实验,以攻击者、防御者两个角度阐述了比特位翻转攻击对AI模型的危害,希望本文能为相关研究者提供一些防御思路,不要让我们辛辛苦苦训练出来的模型被恶意篡改,从而导致严重的经济以及信用后果。
[1] https://blog.csdn.net/u013806583/article/details/53103714
[2] https://www.freebuf.com/column/133871.html
论文源:Terminal Brain Damage:
Exposing the Graceless Degradation in Deep Neural Networks Under Hardware Fault Attacks
以上是关于从攻击者以及防御者角度详谈比特位翻转对AI安全的影响的主要内容,如果未能解决你的问题,请参考以下文章