当前位置: 首页 >> 我们的头条 >> 方便,AI昌盛下的隐忧——Google Tensorflow安全危险分析,椰汁 >> 正文

方便,AI昌盛下的隐忧——Google Tensorflow安全危险分析,椰汁

2019年03月28日 12:23:52     作者:admin     分类:我们的头条     阅读次数:289    

作者:[ Tencent Blade Team ] Cradmin

咱们身处一个剧变的年代,各种新技能层出不穷,人工智能作为一个诞生于上世纪50年代的概念,近两年呈现井喷式开展,得到各行各业的追捧,这背面来自于各种力气的推进,比方深度学习算法的打破、硬件核算才能的进步、不断添加的大数据剖析需求等。从2017年的迅猛开展,到2018年的继续火爆,国内外各个巨子公司如腾讯、阿里、百度、Google、行圆才智云微软、Facebook等均开端在人工智能范畴投下重兵,毫无疑问,这一技能未来将会深度参加咱们谢洛云的日子并让咱们的日子发作巨大改动:人工智能年代来了!

面临一项新技能/新趋势的开展,作为安全研讨人员该注重到什么?没错,每一个新技能的诞生及运用都会随同有安全风险,安全研讨人员要在风暴降临之前做到有备无患。

Blade Team作为注重职业前瞻安全问题的研讨团队,天然要对AI技能进行安全预研。

悍女斗中校

一个典型的人工智能体系大致由3部分组成:算法模型,AI支撑体系(练习/运转算法的软件基础设施)和事务逻辑及体系。比方一个人脸识别体系根本架构如下:

图1:典型人脸识别体系架构

从安全视角来看,咱们能够得出3个潜在的进犯面:

AI算法安全:算法模型是一个AI体系的中心,也是现在AI安全攻防对立的焦点。具体来讲,现在AI算法安全的首要风险在于对立样本(adversarial examples)进犯,即通过输入歹意样原本诈骗AI算kmspic法,终究使AI体系输出非预期的成果,现在已开展出比方生成对立网络(GAN)这种技能[0],以AI对立AI,在这个范畴学术界和工业界已有很多研讨成果,咱们可Google了解。

AI支撑体系安全:AI算法模型的运转和练习都需求一套软件体系来支撑,为了进步核算功率和下降门槛,各大厂商开发了机器学习结构,本文的主角Google Tensorflow就归于这一层,类比于核算机体系中的OS层,能够幻想到这儿假如呈现安全问题,影响怎么?而这类结构的安全性现在并没有得到满意的注重。

事务逻辑体系:上层事务逻辑及相关体系,与传统事务和运维安全风险不同不大,不再赘述。

通过近几年的开展,各种机器学习结构不断涌现出来,各有特色,其间不乏大厂的身影,咱们选取了三款运用量较大的结构作为研讨方针:

Tensorflow[1]:由Google开发,面向开源社区,功用强壮,易用性高,前期功用稍差,但在Google强壮的工程才能下,已有显着改观,从运用量上看,现在是机器学习结构里边的TOP 1。

Caffe[2]:2013年由UC Berkely的贾扬清博士开发,在学术界运用极端广泛,卷积神经网络的完结简练高效,但因前史架构问题,不行灵敏。现在贾教主已上任Facebook,并在Facebook的大力支撑下,推出了Caffe2小小杰鼠标连点器,处理Caffe年代留下的问题(修改注:发布本文时,已有音讯称贾教主现已加盟阿里硅谷研讨院,可见巨子对AI人才的渴求)。

Torch[3]:Facebook内部广泛运用的一款机器学习结构,灵敏性和速度都不错,仅有缺乏是默许选用Lua掌家幺女言语作为API接口,初学者会有些不习气,当然现在也支撑了Python。

图2 业界盛行机器学习结构扼要比照

以Tensorflow为例,咱们先来看一下它的根本架构:

图3 Tensorflow根本架构[4]

由上图大致能够看出,除了中心的机器学习算法逻辑外(Kernel implementations),Tensorflow还有很多的支撑配套体系,这无疑添加了软件体系的复杂性。

咱们继续沿用上一节的思路,首要具体剖析下Tensorflow的进犯面。这儿也插个题外话,同享下个人的一些研讨习气,一般在接触到一个新范畴,笔者习气5xdd1通读很多材料,对该范畴的根本原理和架构有个相对深化的了解,必要时结合代码粗读,对方针体系进行具体的进犯面剖析,确认从哪个薄缺点下手,然后才是看个人喜爱进行代码审计或Fuzzing,发现安全缝隙。在笔者看来,安全研讨前期的调研作业必不可少,一方面帮你确认相对正确的研讨方针,不走过多弯路,另一方面临功用和原理的深化了解,有助于找到一些更深层次的安全问题。

通过对Tensorflow功用和架构的了解,笔者大致把进犯面分为以下几类:

输入文件解析逻辑:包含对练习和揣度时用到的图片、视频、音频等类型文件的解析处理

模型处理逻辑:模型文件的解析和模型运转机制

机器学习算法逻辑:机器学习算法完结逻辑

分布式布置及扩展功用:包含Tensorflow分布式集群功用,功用优化XLA Compiler,自定义函数扩展功用等。

具体可参阅下图,这是其时根据Tensorflow 1.4版别的剖析,有爱好的读者能够自行剖析添加。在随后的审计中,咱们在多个进犯面中发现了安全问题,其间一个最严峻的风险存在于Tensorflow的模型处理机制。

图4 Tensorflow进犯面剖析

咱们先来了解下Tensorflow的模型机制。

望文生义,Tensor是Tensorflow中的根本数据类型(或者说数据容器),flow表明dataflow,Tensorflow用数据流图(dataflow graph)来表明一个核算模型,图中的结点(node)表明核算操作(operation),图中的边(edge)表明数据输入和输出,当咱们规划了一个机器学习模型,在Tensorflow中会以一张数据流图来表明,终究算法模型会以图的办法在Tensorflow运转时(runtime)下履行,完结咱们需求的运算。能够参阅Tensorflow官网的一个示例。

图5 Tensorflow的数据流图[5]

机器学习模型练习中经常会呈现这样的场景:

1) 需求中止其时练习进程,保存模型,以备下次从中止处继续练习

2) 把练习好的模型保存,同享给别人进一步骤优或直接运用

Tensorflow供给了两种种模型耐久化机制,能够把算法模型保存为文件:tf.train.Saver和tf.saved_model。两组API在把模型耐久化为文件时,结构上有些差异,tf.train.Saver合适暂时保存被中止的练习模型,被保存的模型称为一个checkpoint,tf.saved_model更合适保存完好的模型供给在线偷喝妈妈的尿效劳。

tf.train.Saver保存的模型文件如下:

savermodel.meta是模型的元数据,也便是数据流图的描绘文件,选用特定的二进制格局,savermodel.data-xxx保存着模型中各个变量的值。

再来看下tf.saved_model保存的模型文件:

saved_model.pbtxt保存着表明算法模型的图结构,能够指定保存为protobuf文本格局或二进制格局,但通常情况下出于空间功率考虑,默许选用二进制办法保存,variables目录中保存模型中变量的值。

能够看到,不论哪种办法,都需求保存要害的数据流图的结构,翻开saved_model.pbtxt,细心看下咱们关怀的数据流图:

能够比较直观的看到图的结构,比方Add是操作类型,输入是参数x和y,输出是z,不难得出是一个简略的加法核算z=x+y;Tensorflow API供给了很多的操作类型,来满意各种核算需求。

图6 Tensorflow Python API[6]

看到这儿,咱们可有什么主意?没错,已然算法模型是以图的办法在Tensorflow中履行,从图的视点看,咱们能否在不影响图的正常流程的情况下,刺进一些额定的操作(结点)呢?进一步,假如这些操作是歹意的呢?

从上一节的剖析,咱们发现了一个让人略感振奋的进犯思路,在一个正常的Tensorflow模型文件中刺进可控的歹意操作,怎么做到呢?需求满意两个条件:

1)在数据流图中刺进歹意操作后,不影响模型的正常功用,也便是说模型的运用者从黑盒视点是没有感知的;

2)刺进的操作能够完结“有害”动作,如代码履行等。

先看下第二个条件,最直接的“有害”动作,一般可注重履行命令或文件操作类等,而Te镇江患病小悦悦nsorflow也的确供给了功用强壮的本地操作API,比方tf.read_file, tf便利,AI兴盛下的隐忧——Google Tensorflow安全风险剖析,椰汁.write_file, tf.load_op_library, tf.load_library等。看这几个API姓名大约就知其义,终究咱们挑选运用前2个读写文件的API来完结PoC,其他API的幻想空间读者可自行开掘。在验证进程中,笔者发现这儿其实有个约束,只能寻觅Tensorflow内置的API操作,也叫做kernel ops,假如是外部python库完结的API函数,是不会独胆第一人刺进到终究的图模型中,也就无法用于这个进犯场景。

满意第一个条件,并没有幻想的那么简略,笔者其时也颇费了一翻曲折。

咱们以一个简略的线性回归模型y=x+1为例,x为输入变量,y为输出成果,用Tensorflow的python API完结如下:

读写文件类的操作明显与线性回归核算无关,不能直接作为三叶青的图片模型的输入或输出依靠来履行;假如直接履行这个操作呢?

图7 tf.write_file API文档[7]

从tf.write_file API文档能够看到,回来值是一个operation,能够被Tensorflow直接履行,但问题是这个履行怎么被触发呢?在Tensorflow中模型的履行以run一个session开端,这儿当用户正常运用线性回归模型时,session.run(y)即可得到y的成果,假如要履行写文件的动作,那就要用户去履行相似session.run(tf.write_file)这样的操作,明显不正常。

在简直翻遍了Tensorflow的API文档后,笔者找到了这样一个特性:

图8 tf.control_反常重口味dependencies API文档[8]

简略来说,要履行control_dependencies这个context中的操作,必需要先核算control_inputs里边的操作,慢着,这种依靠性不正是咱们想要的么?来看看这段python代码:

这个success_write函数回来了一个常量1,但在control_dependencies的影响下,回来1之前必须先履行tf.write_file操作!这个常量1正好作为模型y=x+1的输入,缝隙运用的第一个条件也满意了。

终究还有一个小问题,完结临门一脚,能够读写本地文件了,精干什么“坏事”呢?在Linux下能够在crontab中写入后门主动履行,不过或许权限不行,笔者这儿用了别的一种思路,在Linux下读取其时用户home目录,然后在bashrc文件中写入反连后门,等用户下次发动shell时主动履行后门,当然还有其他运用思路,就留给读者来考虑了。值得注意的是,运用代码中这些操作都需求用Tensorflow内置的API来完结,否则不会刺进到图模型中。

把上面的动作串起来,要害的PoC代码如下:

当用户运用这个练习好的线性回归模型时,一般运用以下代码:

运转作用如下:

模型运用者得到了线性回归预期的成果4(x=3, y=4),一切正常,但其实嵌入在模型中的反连后门已悄然履行,被进犯者成功操控了电脑。

图9 Tensorflow模型中反连后门被金怡云履行

在完结这个PoC后,咱们细心考虑下运用场景,在Tensorflow中同享练习好的机器学习模型给别人运用对错常常见的办法,Tensorflow官方也在GitHub上供给了很多便利,AI兴盛下的隐忧——Google Tensorflow安全风险剖析,椰汁的模型供研讨人员运用[9],咱们设想了这样一个大规模进犯场景,在GitHub上发布一些常用的机器学习模型,在模型中刺进后门代码,然后静待成果。

回忆一下,这个安全问题发作的根本原因在于Tensorflow环境中模型是一个具有可履行特点的载体,而Tensorflow对其间的灵敏操作又没有做任何约束;一同在一般用户乃至AI研讨人员的认知中,模型文件是被视作不具有履行特点的数据文件,愈加强了这种进犯的隐蔽性。

咱们把这个问题陈述给Google后,通过多轮交流,Google Tensorflow团队终究不以为该问题是安全缝隙,但以为是个高危安全风险,并专门发布了一篇关于Tensorflow安全的文章[10],理由大致是Tensorflow模型应该被视作可履行程序,用户有职责知道履行不明模型的风险,并给出了相应的安全主张。

在对Tensorflow其他进犯面的剖析中,咱们尝试了人工审计代码和Fuzzing的办法,又发现了多个安全缝隙,大部分归于传统的内存损坏型缝隙,触及Tensorflow的图片解析处理、模型文件解析、XLA compiler等功用,而且缝隙代码都归于Tensorflow结构自身,也从旁边面反映了Ten万能高手李怀风sorflow在代码安全上并没有做更多的作业。

下面是Tensorflow发布的安全布告及称谢[11],现在为止共7个安全缝隙,均为Tencent Blade Team发现,其间5个为笔者发现。

在研讨进程中,咱们也注意到业界的一些相似研讨,如360安全团队对多款机器学习结构用到的第三方库进行了安全审计,发现存在很多安全问题[12]便利,AI兴盛下的隐忧——Google Tensorflow安全风险剖析,椰汁,其间多为传统二进制缝隙类型。

回忆整个缝隙陈述和处理流程,便利,AI兴盛下的隐忧——Google Tensorflow安全风险剖析,椰汁可谓便利,AI兴盛下的隐忧——Google Tensorflow安全风险剖析,椰汁好事多磨。开端上报缝隙时,咱们发现除了GitHub上的issue,Tensorflow好像没有其他的缝隙上报途径,出于风险考虑,咱们觉得发现的安全问题在修正乐刷客服电话之前不合适在GitHub上直接揭露,终究在Google Groups发帖问询,有一个自称是Tensorflow开发负责人的老外回复,能够把安全问题单发给他,开端笔者还置疑老外是不是骗子,过后证明这个人的确是Tensorflow团队开发负责人。

通过继续近5个月、几十封邮件的交流,除了缝隙修正之外,终究咱们也推进Google Tensorflow团队建立了根本的缝隙响应和处理流程。

1)Tensorflow在GitHub上就安全问题作了特别阐明Using Tensorflow Securely[10],包含安全缝隙确定规模,上报办法(邮件陈述给security@tensorflow.org),缝隙处理流程等;

图10 Tensorflow安全缝隙处理流程

2)发布安全布告,包含缝隙概况和称谢信息[11];

3)在Tensoflow官网(tensorflow.org)添加一项内容Security[13],并链接至GitHub安全布告,引导用户对安全问题的注重。

针对咱们发现的模型机制安全风险,Google在Using Tensorflow Securely这篇安全布告中做了专门阐明[10],给出了相应的安全措施:

1)进步用户安全意识,把Tensorflow模型视作可履行程序,这儿其实是一个用户观念的改变;

2)主张用户在沙箱环境中履行外部不可信的模型文件,如nsjail沙箱;

3)在咱们的主张下,Tensorflow在一个模型命令行东西中添加了扫描功用(tensorflow/python/tools/saved_model_cli.py),能够列出模型中的可疑操作,供用户判别。

能够看出,Tensorflow团队以为这个安全风险的处理首要在用户,而不是Tensorflow结构自身。咱们也在Blade Team的官方网站上对这个风险进行了安全预警,并命名为“英勇的桑希洛Columbus”[14]。

上文说到的其他内存损坏型缝隙,水木坑爹女Tensorflow已在后续版别中修正,可参阅安全布告[11]。

AI安全将走向何方?咱们信任AI算法安全的对立将会继续晋级,一同作为背面生产力主角的基础设施软件安全理应遭到应有的注重,笔者期望这个小小的研讨能抛砖引玉(实际上咱们的研讨成果也引起了一些专家和媒体的注重),等待更多安全研讨者投身于此,一同为更安全的未来尽力。

[0] https://en.wikipedia.org/wiki/Generative_adversarial_network

[1] https://www.tens便利,AI兴盛下的隐忧——Google Tensorflow安全风险剖析,椰汁orflow.org/

[2] http://caffe.berkeleyvision.org/

[3] http://torch.ch/

[4] https://www.tensorflow.org/guide/extend/architecture

[5] https://www.tensorflow.org/guide/graphs

[6] https://www.tensorflow.org/versions/r1.1壬月暮远2/api_docs/python/t便利,AI兴盛下的隐忧——Google Tensorflow安全风险剖析,椰汁f

[7] https://www.tensorflow.org/versions/r1.12/api_docs/python/tf/io/write_file

[8] https://www.tensorflow.org/versions/r1.12/api_docs/python/tf/control_dependencies

[9] https://github.com/tensorflow/models

[10] https://github.com/tensorflow/tensorflow/blob/master/SECURITY.md

[11] https://github.com/tensorflow/tensorflow/blob/master/tensorflow/security/index.md

[12] https://arxiv.org/pdf/1711.发作性关系11008.pdf

[13] https://www.tensorflow.org/community#security

[14] https://blade.tencent.com/columbus/

人工智能 开发 技能
声明:该文观念仅代表作者自己,搜狐号系信息发布渠道,搜狐仅供给信息存储空间效劳。
除非特别注明,本文『方便,AI昌盛下的隐忧——Google Tensorflow安全危险分析,椰汁』来源于互联网、微信平台、QQ空间以及其它朋友推荐等,非本站作者原创。 本站作者admin不对本文拥有版权,如有侵犯,请投诉。我们会在72小时内删除。 但烦请转载时请标明出处:“本文转载于『加油理念-为您助力-扬帆起航』,原文地址:http://www.come-concept.net/articles/1332.html