日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

AI繁荣下的隐忧——Google Tensorflow安全风险剖析

發(fā)布時間:2024/2/28 ChatGpt 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AI繁荣下的隐忧——Google Tensorflow安全风险剖析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.



?

作者:[ Tencent Blade Team ] Cradmin


我們身處一個巨變的時代,各種新技術(shù)層出不窮,人工智能作為一個誕生于上世紀50年代的概念,近兩年出現(xiàn)井噴式發(fā)展,得到各行各業(yè)的追捧,這背后來自于各種力量的推動,諸如深度學(xué)習(xí)算法的突破、硬件計算能力的提升、不斷增長的大數(shù)據(jù)分析需求等。從2017年的迅猛發(fā)展,到2018年的持續(xù)火爆,國內(nèi)外各個巨頭公司如騰訊、阿里、百度、Google、微軟、Facebook等均開始在人工智能領(lǐng)域投下重兵,毫無疑問,這一技術(shù)未來將會深度參與我們的生活并讓我們的生活產(chǎn)生巨大改變:人工智能時代來了!

?

面對一項新技術(shù)/新趨勢的發(fā)展,作為安全研究人員該關(guān)注到什么?沒錯,每一個新技術(shù)的誕生及應(yīng)用都會伴隨有安全風(fēng)險,安全研究人員要在風(fēng)暴來臨之前做到未雨綢繆。


Blade Team作為關(guān)注行業(yè)前瞻安全問題的研究團隊,自然要對AI技術(shù)進行安全預(yù)研。



一個典型的人工智能系統(tǒng)大致由3部分組成:算法模型,AI支撐系統(tǒng)(訓(xùn)練/運行算法的軟件基礎(chǔ)設(shè)施)和業(yè)務(wù)邏輯及系統(tǒng)。比如一個人臉識別系統(tǒng)基本架構(gòu)如下:

?

圖1:典型人臉識別系統(tǒng)架構(gòu)

?

從安全視角來看,我們可以得出3個潛在的攻擊面:

?

AI算法安全:算法模型是一個AI系統(tǒng)的核心,也是目前AI安全攻防對抗的焦點。具體來講,目前AI算法安全的主要風(fēng)險在于對抗樣本(adversarial examples)攻擊,即通過輸入惡意樣本來欺騙AI算法,最終使AI系統(tǒng)輸出非預(yù)期的結(jié)果,目前已發(fā)展出諸如生成對抗網(wǎng)絡(luò)(GAN)這種技術(shù)[0],以AI對抗AI,在這個領(lǐng)域?qū)W術(shù)界和工業(yè)界已有大量研究成果,大家可Google了解。

?

AI支撐系統(tǒng)安全:AI算法模型的運行和訓(xùn)練都需要一套軟件系統(tǒng)來支撐,為了提高計算效率和降低門檻,各大廠商開發(fā)了機器學(xué)習(xí)框架,本文的主角Google Tensorflow就屬于這一層,類比于計算機系統(tǒng)中的OS層,可以想象到這里如果出現(xiàn)安全問題,影響如何?而這類框架的安全性目前并沒有得到足夠的關(guān)注。

?

業(yè)務(wù)邏輯系統(tǒng):上層業(yè)務(wù)邏輯及相關(guān)系統(tǒng),與傳統(tǒng)業(yè)務(wù)和運維安全風(fēng)險差別不大,不再贅述。


經(jīng)過近幾年的發(fā)展,各種機器學(xué)習(xí)框架不斷涌現(xiàn)出來,各有特色,其中不乏大廠的身影,我們選取了三款使用量較大的框架作為研究對象:

?

Tensorflow[1]:由Google開發(fā),面向開源社區(qū),功能強大,易用性高,早期性能稍差,但在Google強大的工程能力下,已有明顯改觀,從使用量上看,目前是機器學(xué)習(xí)框架里面的TOP 1。

?

Caffe[2]:2013年由UC Berkely的賈揚清博士開發(fā),在學(xué)術(shù)界使用極其廣泛,卷積神經(jīng)網(wǎng)絡(luò)的實現(xiàn)簡潔高效,但因歷史架構(gòu)問題,不夠靈活。目前賈教主已就職Facebook,并在Facebook的大力支持下,推出了Caffe2,解決Caffe時代留下的問題(編輯注:發(fā)布本文時,已有消息稱賈教主已經(jīng)加盟阿里硅谷研究院,可見巨頭對AI人才的渴求)。


Torch[3]:Facebook內(nèi)部廣泛使用的一款機器學(xué)習(xí)框架,靈活性和速度都不錯,唯一不足是默認采用Lua語言作為API接口,初學(xué)者會有些不習(xí)慣,當然目前也支持了Python。

?

圖2?業(yè)界流行機器學(xué)習(xí)框架簡要對比

?

以Tensorflow為例,我們先來看一下它的基本架構(gòu):

?

圖3 Tensorflow基本架構(gòu)[4]

?

由上圖大致可以看出,除了核心的機器學(xué)習(xí)算法邏輯外(Kernel implementations),Tensorflow還有大量的支撐配套系統(tǒng),這無疑增加了軟件系統(tǒng)的復(fù)雜性。

?

我們繼續(xù)沿用上一節(jié)的思路,首先詳細分析下Tensorflow的攻擊面。這里也插個題外話,分享下個人的一些研究習(xí)慣,一般在接觸到一個新領(lǐng)域,筆者習(xí)慣通讀大量資料,對該領(lǐng)域的基本原理和架構(gòu)有個相對深入的了解,必要時結(jié)合代碼粗讀,對目標系統(tǒng)進行詳細的攻擊面分析,確定從哪個薄弱點入手,然后才是看個人喜好進行代碼審計或Fuzzing,發(fā)現(xiàn)安全漏洞。在筆者看來,安全研究前期的調(diào)研工作必不可少,一方面幫你確定相對正確的研究目標,不走過多彎路,另一方面對功能和原理的深入理解,有助于找到一些更深層次的安全問題。

?

通過對Tensorflow功能和架構(gòu)的了解,筆者大致把攻擊面分為以下幾類:

?

輸入文件解析邏輯:包括對訓(xùn)練和推斷時用到的圖片、視頻、音頻等類型文件的解析處理

模型處理邏輯:模型文件的解析和模型運行機制

機器學(xué)習(xí)算法邏輯:機器學(xué)習(xí)算法實現(xiàn)邏輯

分布式部署及擴展功能:包括Tensorflow分布式集群功能,性能優(yōu)化XLA Compiler,自定義函數(shù)擴展功能等。

?

詳細可參考下圖,這是當時基于Tensorflow 1.4版本的分析,有興趣的讀者可以自行分析添加。在隨后的審計中,我們在多個攻擊面中發(fā)現(xiàn)了安全問題,其中一個最嚴重的風(fēng)險存在于Tensorflow的模型處理機制。

?

圖4 Tensorflow攻擊面分析

?

我們先來了解下Tensorflow的模型機制。

?

顧名思義,Tensor是Tensorflow中的基本數(shù)據(jù)類型(或者說數(shù)據(jù)容器),flow表示dataflow,Tensorflow用數(shù)據(jù)流圖(dataflow graph)來表示一個計算模型,圖中的結(jié)點(node)表示計算操作(operation),圖中的邊(edge)表示數(shù)據(jù)輸入和輸出,當我們設(shè)計了一個機器學(xué)習(xí)模型,在Tensorflow中會以一張數(shù)據(jù)流圖來表示,最終算法模型會以圖的形式在Tensorflow運行時(runtime)下執(zhí)行,完成我們需要的運算。可以參考Tensorflow官網(wǎng)的一個示例。


圖5 Tensorflow的數(shù)據(jù)流圖[5]

?

機器學(xué)習(xí)模型訓(xùn)練中經(jīng)常會出現(xiàn)這樣的場景:

?

1)?需要中斷當前訓(xùn)練過程,保存模型,以備下次從中斷處繼續(xù)訓(xùn)練

2)?把訓(xùn)練好的模型保存,分享給他人進一步調(diào)優(yōu)或直接使用

?

Tensorflow提供了兩種種模型持久化機制,可以把算法模型保存為文件:tf.train.Saver和tf.saved_model。兩組API在把模型持久化為文件時,結(jié)構(gòu)上有些差異,tf.train.Saver適合臨時保存被中斷的訓(xùn)練模型,被保存的模型稱為一個checkpoint,tf.saved_model更適合保存完整的模型提供在線服務(wù)。

?

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

?

?

savermodel.meta是模型的元數(shù)據(jù),也就是數(shù)據(jù)流圖的描述文件,采用特定的二進制格式,savermodel.data-xxx保存著模型中各個變量的值。

?

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

?

?


saved_model.pbtxt保存著表示算法模型的圖結(jié)構(gòu),可以指定保存為protobuf文本格式或二進制格式,但通常情況下出于空間效率考慮,默認采用二進制形式保存,variables目錄中保存模型中變量的值。

可以看到,不管哪種方式,都需要保存關(guān)鍵的數(shù)據(jù)流圖的結(jié)構(gòu),打開saved_model.pbtxt,仔細看下我們關(guān)心的數(shù)據(jù)流圖:

?


可以比較直觀的看到圖的結(jié)構(gòu),比如Add是操作類型,輸入是參數(shù)x和y,輸出是z,不難得出是一個簡單的加法計算z=x+y;Tensorflow API提供了大量的操作類型,來滿足各種計算需求。


圖6 Tensorflow Python API[6]

?

看到這里,大家可有什么想法?沒錯,既然算法模型是以圖的形式在Tensorflow中執(zhí)行,從圖的角度看,我們能否在不影響圖的正常流程的情況下,插入一些額外的操作(結(jié)點)呢?進一步,如果這些操作是惡意的呢?

?

從上一節(jié)的分析,我們發(fā)現(xiàn)了一個讓人略感興奮的攻擊思路,在一個正常的Tensorflow模型文件中插入可控的惡意操作,如何做到呢?需要滿足兩個條件:

?

1)在數(shù)據(jù)流圖中插入惡意操作后,不影響模型的正常功能,也就是說模型的使用者從黑盒角度是沒有感知的;


2)插入的操作能夠完成“有害”動作,如代碼執(zhí)行等。

?

先看下第二個條件,最直接的“有害”動作,一般可關(guān)注執(zhí)行命令或文件操作類等,而Tensorflow也確實提供了功能強大的本地操作API,諸如tf.read_file, tf.write_file, tf.load_op_library, tf.load_library等。看這幾個API名字大概就知其義,最終我們選擇使用前2個讀寫文件的API來完成PoC,其他API的想象空間讀者可自行發(fā)掘。在驗證過程中,筆者發(fā)現(xiàn)這里其實有個限制,只能尋找Tensorflow內(nèi)置的API操作,也叫做kernel ops,如果是外部python庫實現(xiàn)的API函數(shù),是不會插入到最終的圖模型中,也就無法用于這個攻擊場景。

?

滿足第一個條件,并沒有想象的那么簡單,筆者當時也頗費了一翻周折。

我們以一個簡單的線性回歸模型y=x+1為例,x為輸入變量,y為輸出結(jié)果,用Tensorflow的python API實現(xiàn)如下:



讀寫文件類的操作顯然與線性回歸計算無關(guān),不能直接作為模型的輸入或輸出依賴來執(zhí)行;如果直接執(zhí)行這個操作呢?


圖7 tf.write_file API文檔[7]

?

從tf.write_file API文檔可以看到,返回值是一個operation,可以被Tensorflow直接執(zhí)行,但問題是這個執(zhí)行如何被觸發(fā)呢?在Tensorflow中模型的執(zhí)行以run一個session開始,這里當用戶正常使用線性回歸模型時,session.run(y)即可得到y(tǒng)的結(jié)果,如果要執(zhí)行寫文件的動作,那就要用戶去執(zhí)行類似session.run(tf.write_file)這樣的操作,顯然不正常。

?

在幾乎翻遍了Tensorflow的API文檔后,筆者找到了這樣一個特性:


圖8 tf.control_dependencies API文檔[8]

?

簡單來說,要執(zhí)行control_dependencies這個context中的操作,必須要先計算control_inputs里面的操作,慢著,這種依賴性不正是我們想要的么?來看看這段python代碼:



這個success_write函數(shù)返回了一個常量1,但在control_dependencies的影響下,返回1之前必須先執(zhí)行tf.write_file操作!這個常量1正好作為模型y=x+1的輸入,漏洞利用的第一個條件也滿足了。

?

最后還有一個小問題,完成臨門一腳,能夠讀寫本地文件了,能干什么“壞事”呢?在Linux下可以在crontab中寫入后門自動執(zhí)行,不過可能權(quán)限不夠,筆者這里用了另外一種思路,在Linux下讀取當前用戶home目錄,然后在bashrc文件中寫入反連后門,等用戶下次啟動shell時自動執(zhí)行后門,當然還有其他利用思路,就留給讀者來思考了。值得注意的是,利用代碼中這些操作都需要用Tensorflow內(nèi)置的API來完成,不然不會插入到圖模型中。

?

把上面的動作串起來,關(guān)鍵的PoC代碼如下:

?

?

當用戶使用這個訓(xùn)練好的線性回歸模型時,一般使用以下代碼:



運行效果如下:



模型使用者得到了線性回歸預(yù)期的結(jié)果4(x=3, y=4),一切正常,但其實嵌入在模型中的反連后門已悄然執(zhí)行,被攻擊者成功控制了電腦。


圖9 Tensorflow模型中反連后門被執(zhí)行

?

在完成這個PoC后,我們仔細思考下利用場景,在Tensorflow中共享訓(xùn)練好的機器學(xué)習(xí)模型給他人使用是非常常見的方式,Tensorflow官方也在GitHub上提供了大量的模型供研究人員使用[9],我們設(shè)想了這樣一個大規(guī)模攻擊場景,在GitHub上公布一些常用的機器學(xué)習(xí)模型,在模型中插入后門代碼,然后靜待結(jié)果。

?

回顧一下,這個安全問題產(chǎn)生的根本原因在于Tensorflow環(huán)境中模型是一個具有可執(zhí)行屬性的載體,而Tensorflow對其中的敏感操作又沒有做任何限制;同時在一般用戶甚至AI研究人員的認知中,模型文件是被視作不具有執(zhí)行屬性的數(shù)據(jù)文件,更加強了這種攻擊的隱蔽性。

?

我們把這個問題報告給Google后,經(jīng)過多輪溝通,Google Tensorflow團隊最終不認為該問題是安全漏洞,但認為是個高危安全風(fēng)險,并專門發(fā)布了一篇關(guān)于Tensorflow安全的文章[10],理由大致是Tensorflow模型應(yīng)該被視作可執(zhí)行程序,用戶有責(zé)任知道執(zhí)行不明模型的風(fēng)險,并給出了相應(yīng)的安全建議。

?

?

在對Tensorflow其他攻擊面的分析中,我們嘗試了人工審計代碼和Fuzzing的方法,又發(fā)現(xiàn)了多個安全漏洞,大部分屬于傳統(tǒng)的內(nèi)存破壞型漏洞,涉及Tensorflow的圖片解析處理、模型文件解析、XLA compiler等功能,并且漏洞代碼都屬于Tensorflow框架本身,也從側(cè)面反映了Tensorflow在代碼安全上并沒有做更多的工作。

?

下面是Tensorflow發(fā)布的安全公告及致謝[11],目前為止共7個安全漏洞,均為Tencent Blade Team發(fā)現(xiàn),其中5個為筆者發(fā)現(xiàn)。


?

在研究過程中,我們也注意到業(yè)界的一些類似研究,如360安全團隊對多款機器學(xué)習(xí)框架用到的第三方庫進行了安全審計,發(fā)現(xiàn)存在大量安全問題[12],其中多為傳統(tǒng)二進制漏洞類型。

?

回顧整個漏洞報告和處理流程,可謂一波三折。最初上報漏洞時,我們發(fā)現(xiàn)除了GitHub上的issue,Tensorflow似乎沒有其他的漏洞上報渠道,出于風(fēng)險考慮,我們覺得發(fā)現(xiàn)的安全問題在修復(fù)之前不適合在GitHub上直接公開,最后在Google Groups發(fā)帖詢問,有一個自稱是Tensorflow開發(fā)負責(zé)人的老外回復(fù),可以把安全問題單發(fā)給他,開始筆者還懷疑老外是不是騙子,事后證明這個人確實是Tensorflow團隊開發(fā)負責(zé)人。

?

經(jīng)過持續(xù)近5個月、幾十封郵件的溝通,除了漏洞修復(fù)之外,最終我們也推動Google Tensorflow團隊建立了基本的漏洞響應(yīng)和處理流程。

?

1)Tensorflow在GitHub上就安全問題作了特別說明Using Tensorflow Securely[10],包括安全漏洞認定范圍,上報方法(郵件報告給security@tensorflow.org),漏洞處理流程等;

?

圖10 Tensorflow安全漏洞處理流程

?

2)發(fā)布安全公告,包括漏洞詳情和致謝信息[11];


3)在Tensoflow官網(wǎng)(tensorflow.org)增加一項內(nèi)容Security[13],并鏈接至GitHub安全公告,引導(dǎo)用戶對安全問題的重視。


?

針對我們發(fā)現(xiàn)的模型機制安全風(fēng)險,Google在Using Tensorflow Securely這篇安全公告中做了專門說明[10],給出了相應(yīng)的安全措施:

?

1)提高用戶安全意識,把Tensorflow模型視作可執(zhí)行程序,這里其實是一個用戶觀念的轉(zhuǎn)變;


2)建議用戶在沙箱環(huán)境中執(zhí)行外部不可信的模型文件,如nsjail沙箱;


3)在我們的建議下,Tensorflow在一個模型命令行工具中增加了掃描功能(tensorflow/python/tools/saved_model_cli.py),可以列出模型中的可疑操作,供用戶判斷。

?

可以看出,Tensorflow團隊認為這個安全風(fēng)險的解決主要在用戶,而不是Tensorflow框架本身。我們也在Blade Team的官方網(wǎng)站上對這個風(fēng)險進行了安全預(yù)警,并命名為“Columbus”[14]。

?

上文提到的其他內(nèi)存破壞型漏洞,Tensorflow已在后續(xù)版本中修復(fù),可參考安全公告[11]。

?

AI安全將走向何方?我們相信AI算法安全的對抗將會持續(xù)升級,同時作為背后生產(chǎn)力主角的基礎(chǔ)設(shè)施軟件安全理應(yīng)受到應(yīng)有的關(guān)注,筆者希望這個小小的研究能拋磚引玉(實際上我們的研究結(jié)果也引起了一些專家和媒體的關(guān)注),期待更多安全研究者投身于此,一起為更安全的未來努力。

?

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

[1]?https://www.tensorflow.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.12/api_docs/python/tf

[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/


?

總結(jié)

以上是生活随笔為你收集整理的AI繁荣下的隐忧——Google Tensorflow安全风险剖析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。