2017年 AI安全風險白皮書
摘要
深度學習引領著新一輪的人工智慧浪潮,受到工業界以及全社會的廣泛關注。 雖然大家對人工智慧有很多美好的憧憬,但是現實是殘酷的 — 隨著一批深度學習應用逐漸開始變成現實,安全問題也漸漸顯現出來。
360 安全研究院在過去一年裡對深度學習系統的安全性做了詳細的研究。 我們通過這個文檔對這些工作做了一個系統的總結。 AI系統的安全問題主要包括模型安全、數據安全以及代碼安全。 本文以目前流行的圖像識別AI系統為例,介紹AI系統在這些方面面臨的安全威脅。對於這些威脅造成的影響,我們關注傳統的攻擊類型,包括惡意輸入導致的拒絕服務,信息泄露,系統劫持。 同時我們也關注AI系統特有的安全問題,例如逃逸攻擊,數據污染攻擊。
關於AI系統的安全威脅,本文從以下三個角度進行闡述。第一部分描述深度學習系統軟體實現的複雜度,以及軟體實現帶來的安全漏洞。第二部分描述針對深度學習系統模型的逃逸攻擊。 第三部分揭示深度學習系統數據流中的安全威脅,以及相應的降維攻擊展示。 白皮書主要內容參照了360安全團隊近期發布的AI安全相關報告。
深度學習軟體實現中的安全問題
人工智慧應用面臨來自多個方面的威脅:包括深度學習框架中的軟體實現漏洞、對抗機器學習的惡意樣本生成、訓練數據的污染等等。 這些威脅可能導致人工智慧所驅動的識別系統出現混亂,形成漏判或者誤判,甚至導致系統崩潰或被劫持,並可以使智能設備變成殭屍攻擊工具。
在推進人工智慧應用的同時,我們迫切需要關注並解決這些安全問題。本章首先介紹我們在深度學習框架中發現的安全問題。
人工智慧討論中的安全盲點
目前公眾對人工智慧的關注,尤其是深度學習方面, 缺少對安全的考慮。我們把這個現象稱為人工智慧的安全盲點。 導致這個盲點的主要原因是由於演算法與實現的距離。 近期對於深度學習的討論主要停留在演算法和前景展望的層面,對應用場景和程序輸入有很多假設。受到關注的應用往往假定處於善意的或封閉的場景。例如高準確率的語音識別中的輸入都是自然採集而成,圖片識別中的輸入也都來自正常拍攝的照片。這些討論沒有考慮人為惡意構造或合成的場景。
人工智慧討論中的安全盲點可以通過最典型的手寫數字識別案例來說明。基於MNIST數據集的手寫數字識別應用是深度學習的一個非常典型的例子, 最新的深度學習教程幾乎都採用這個應用作為實例演示。在這些教程中(如下圖所示)演算法層的討論所考慮的分類結果只關心特定類別的近似度和置信概率區間。演算法層的討論沒有考慮輸入會導致程序崩潰甚至被攻擊者劫持控制流。這其中被忽略掉的輸出結果反映出演算法和實現上考慮問題的差距,也就是目前人工智慧討論中的安全盲點。
圖I-1. 深度學習演算法與安全所考慮的不同輸出場景
現實中的開放應用需要處理的輸入不僅來源於正常用戶,也可以是來自黑產等惡意用戶。 人工智慧的應用必須考慮到應用所面臨的現實威脅。程序設計人員需要考慮輸入數據是否可控,監測程序是否正常執行,並驗證程序執行結果是否真實反映應用的本來目的。
深度學習系統的實現及依賴複雜度
深度學習軟體很多是實現在深度學習框架上。目前基於深度學習系統框架非常多,主流的包括TensorFlow、Torch,以及Caffe 等。
深度學習框架的使用可以讓應用開發人員無需關心神經元網路分層以及培訓分類的實現細節,更多關注應用本身的業務邏輯。 開發人員可以在框架上直接構建自己的神經元網路模型,並利用框架提供的介面對模型進行訓練。這些框架簡化了深度學習應用的設計和開發難度,一個深度學習的模型可以用幾十行代碼就可以寫出來。
圖I-2. 深度學習框架以及框架組件依賴
深度學習框架掩蓋了它所使用的組件依賴,同時也隱藏了系統的複雜程度。 每種深度學習框架又都是實現在眾多基礎庫和組件之上,很多深度學習框架里還包括圖像處理、矩陣計算、數據處理、GPU加速等功能。 圖2展示了典型的深度學習應用組件和它們的依賴關係。例如Caffe除了自身神經元網路模塊實現以外,還包括137個第三方動態庫,例如libprotobuf, libopencv, libz 等。 谷歌的TensorFlow 框架也包含對多達97個python模塊的依賴,包括librosa,numpy 等。
系統越複雜,就越有可能包含安全隱患。任何在深度學習框架以及它所依賴的組件中的安全問題都會威脅到框架之上的應用系統。另外模塊往往來自不同的開發者,對模塊間的介面經常有不同的理解。當這種不一致導致安全問題時,模塊開發者甚至會認為是其它模塊調用不符合規範而不是自己的問題。在我們的發現的導致深度學習框架崩潰的漏洞中就遇到過這種情況。
深度學習軟體實現細節中的安全問題
正如安全人員常說的, 魔鬼隱藏於細節之中 (The Devil is In the Detail)。任何一個大型軟體系統都會有實現漏洞。 考慮到深度學習框架的複雜性, 深度學習應用也不例外。
360 Team Seri0us 團隊在一個月的時間裡面發現了數十個深度學習框架及其依賴庫中的軟體漏洞。發現的漏洞包括了幾乎所有常見的類型,例如內存訪問越界,空指針引用,整數溢出,除零異常等。 這些漏洞潛在帶來的危害可以導致對深度學習應用的拒絕服務攻擊,控制流劫持,分類逃逸,以及潛在的數據污染攻擊。
以下我們通過兩個簡單的例子來介紹深度學習框架中的漏洞以及對應用的影響。兩個例子都來源於框架的依賴庫,一個是TensorFlow框架所依賴的numpy包,另一個是Caffe在處理圖像識別所使用的libjasper庫。
案例1: 對基於TensorFlow的語音識別應用進行拒絕服務攻擊
案例中的 numpy 是TensorFlow所依賴的一個負責科學計算的python庫。TensorFlow的很多應用在進行矩陣運算的時候都會用的它。 我們在這個庫里發現一個簡單邏輯漏洞(CVE-2017-12852)。 這個問題的簡單情況如下圖所示,它是發生在numpy中的pad函數。 在pad函數中,存在這樣一個while循環,循環結束需要使 pad_before>safe_pad和pad_after>safe_pad同時不成立, 而在我們構造的例子中,可以使得pad_before和 pad_after不斷的增大,而safe_pad不斷的減小,使得循環始終無法結束,從而導致拒絕服務。
圖I-3. Numpy 拒絕服務攻擊漏洞及官方補丁
我們選擇了基於TensorFlow的語音識別應用來演示基於這個漏洞觸發的攻擊。攻擊者通過構造語音文件,會導致上圖中顯示的循環無法結束,使應用程序長時間佔用CPU而不返回結果,從而導致拒絕服務攻擊。
我們選取了一個基於TensoFlow進行聲音分類的應用來演示這個問題。這個應用是一個 TensorFlow程序演示,應用腳本源碼可以從以下網站下載:[ 「Urban Sound Classification」: https://aqibsaeed.github.io/2016-09-03-urban-sound-classification-part-1/ ]
當給定一個正常的狗叫的音頻文件,應用可以識別聲音內容為 「dog bark」,其過程如下:
./demo.sh dogbark.wav02:34:42.713346: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasnt compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.... ...audio file: dogbark.wavsoftmax output: [[ 9.82184019e-07 1.81138901e-07 2.68021075e-04 9.97506797e-01 3.25933332e-04 4.26165315e-07 1.18322554e-03 4.01796569e-08 2.90570169e-05 6.85345207e-04]]The audio is dog_bark!
當給定一個畸形的聲音文件可導致拒絕服務, 程序無法正常結束:
./demo.sh dos.wav02:37:23.818618: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasnt compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.... ...audio file: dos.wav^C^C^C^C^C
在前面關於模塊依賴複雜導致漏洞的討論中,我們提到過對模塊介面的理解不一致會導致問題。值得一提的是Numpy這個漏洞的修復過程正好反映了這個問題。在我們最初通知Numpy開發者的時候,他們認為問題是由於調用者librosa庫的開發人員沒有對數據進行嚴格檢測,導致空列表的使用。所以儘管有應用會因為此問題受到拒絕服務攻擊, Numpy開發者最初認為不需要修復這個問題。但後來發現有多個其它庫對numpy的相關函數也有頻繁的類似調用,所以最終對這個漏洞進行了修復。同時 librosa 開發者也對相關調用添加了輸入檢查。
案例2:惡意圖片導致基於Caffe的圖像識別應用出現內存訪問越界
很多深度學習的應用是在圖像和視覺處理領域。我們發現當使用深度學習框架Caffe來進行圖片識別時,Caffe會依賴libjasper等圖像視覺庫來處理輸入。 libjasper對圖像進行識別處理時,如果存在漏洞,例如內存越界,就可能導致整個應用程序出現崩潰,甚至數據流被篡改。下面的例子是用展示的是用Caffe所自帶的例子圖像識別程序來處理我們提供的畸形圖片所出現的崩潰場景。
當利用Caffe來對正常圖片進行分類時,正常的使用情況如下:
classification.bin ./caffe/models/bvlc_reference_caffenet/deploy.prototxt ./caffe/models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel ./caffe/data/ilsvrc12/imagenet_mean.binaryproto ./caffe/data/ilsvrc12/synset_words.txt cat.jpg---------- Prediction for pocs/cat.jpg ----------0.3134 - "n02123045 tabby, tabby cat"0.2380 - "n02123159 tiger cat"0.1235 - "n02124075 Egyptian cat"0.1003 - "n02119022 red fox, Vulpes vulpes"0.0715 - "n02127052 lynx, catamount"
當利用Caffe來對惡意圖片進行分類時,程序出現崩潰:
classification.bin ./caffe/models/bvlc_reference_caffenet/deploy.prototxt ./caffe/models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel ./caffe/data/ilsvrc12/imagenet_mean.binaryproto ./caffe/data/ilsvrc12/synset_words.txt bug.jpg---------- Prediction for pocs/bug.jpg ----------Segmentation faultgdb-peda$ bt#0 0x00007ffff3295f6b in ?? () from /usr/lib/x86_64-linux-gnu/libjasper.so.1#1 0x00007ffff32961e0 in ?? () from /usr/lib/x86_64-linux-gnu/libjasper.so.1#2 0x00007ffff32958ad in jpc_decode () from /usr/lib/x86_64-linux-gnu/libjasper.so.1#3 0x00007ffff328f2f7 in jp2_decode () from /usr/lib/x86_64-linux-gnu/libjasper.so.1#4 0x00007ffff3283eed in jas_image_decode () from /usr/lib/x86_64-linux-gnu/libjasper.so.1#5 0x00007ffff6df4158 in cv::Jpeg2KDecoder::readHeader() () from /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4#6 0x00007ffff6dd74fc in ?? () from /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4#7 0x00007ffff6dd7c56 in cv::imread(std::string const&, int) () from /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4#8 0x0000000000403f2b in main ()#9 0x00007ffff606af45 in __libc_start_main (main=0x403dd0 <main>, argc=0x6, argv=0x7fffffffde28, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffde18) at libc-start.c:287#10 0x000000000040435e in _start ()
以上僅僅是我們發現的眾多問題中的兩個展示。 360 Team Seri0s 團隊已發現並公布了數十個導致深度學習框架出現問題的漏洞,其中包含已對外公開的15個CVE。 在上個月舉行的ISC安全大會上,Team Seri0s成員已經展示了六個攻擊實例。更多細節請參考ISC 2017大會人工智慧與安全論壇所發布的內容。
小結
本章節的目的是介紹被大眾所忽視的人工智慧安全問題,尤其是深度學習軟體實現中的漏洞以及可能造成的隱患。目前在媒體中展示的深度學習應用中,許多並不與外界直接交互,例如AlphaGo;或者是在封閉的環境下工作,例如通過用戶行為日誌對用戶分類畫像並進行異常檢測。這些系統的攻擊面相對較小,它們並不容易受到本文中所提到的漏洞的直接影響。 但是隨著人工智慧應用的普及,安全威脅會不斷增加。 更多的應用會把應用的輸入介面直接或簡介暴露出來。同時封閉系統的攻擊面也會隨著時間和環境而轉化。 另外除了傳統的基於軟體漏洞的攻擊,深度學習還面臨對抗神經元網路以及其它各種逃逸攻擊。
II. 深度學習模型相關的安全問題
深度學習引領著新一輪的人工智慧浪潮。 在受到全社會廣泛關注的同時,人工智慧應用也面臨來自多個方面的威脅:包括深度學習框架中的軟體實現漏洞、對抗機器學習的惡意樣本生成、訓練數據的污染等等。 這些威脅可能導致人工智慧所驅動的識別系統出現混亂,形成漏判或者誤判,甚至導致系統崩潰或被劫持,並可以使智能設備變成殭屍攻擊工具。在推進人工智慧應用的同時,我們迫切需要關注並解決這些安全問題。本文介紹在深度學習逃逸方面的一些實例和研究工作。
逃逸攻擊簡介
逃逸是指攻擊者在不改變目標機器學習系統的情況下,通過構造特定輸入樣本以完成欺騙目標系統的攻擊。例如,攻擊者可以修改一個惡意軟體樣本的非關鍵特徵,使得它被一個反病毒系統判定為良性樣本,從而繞過檢測。攻擊者為實施逃逸攻擊而特意構造的樣本通常被稱為「對抗樣本」。只要一個機器學習模型沒有完美地學到判別規則,攻擊者就有可能構造對抗樣本用以欺騙機器學習系統。例如,研究者一直試圖在計算機上模仿人類視覺功能,但由於人類視覺機理過於複雜,兩個系統在判別物體時依賴的規則存在一定差異。對抗圖片恰好利用這些差異使得機器學習模型得出和人類視覺截然不同的結果,如圖1所示[1]。
圖II-1: 攻擊者生成對抗樣本使系統與人類有不同的判斷
一個著名的逃逸樣本是Ian Goodfellow[2]在2015年ICLR會議上用過的熊貓與長臂猿分類的例子。 被攻擊目標是一個來谷歌的深度學習研究系統。該系統利用卷積神經元網路能夠精確區分熊貓與長臂猿等圖片。但是攻擊者可以對熊貓圖片增加少量干擾,生成的圖片對人來講仍然可以清晰地判斷為熊貓,但深度學習系統會誤認為長臂猿。 圖2顯示了熊貓原圖以及經過擾動生成後的圖片。
圖II-2: 在圖片中添加擾動導致深度學習系統的錯誤識別實例
下面我們從攻擊者的角度介紹如何系統生成對抗樣本來達到穩定的逃逸攻擊。不關心技術細節的讀者可忽略這些內容,直接跳到文章結尾的總結部分。
基於機器學習的對抗樣本生成
基於機器學習的逃逸攻擊可分為白盒攻擊和黑盒攻擊。白盒攻擊需要獲取機器學習模型內部的所有信息,然後直接計算得到對抗樣本;黑盒攻擊則只需要知道模型的輸入和輸出,通過觀察模型輸出的變化來生成對抗樣本。
2.1白盒攻擊
深度神經網路是數學上可微的模型,在訓練過程中通常使用反向傳播演算法得到每層的梯度來調整網路參數。假設神經網路的輸入是X,類別標籤是Y, 網路參數是W,輸出是F(X)=W*X。訓練神經網路時,對於每個確定的輸入樣本X,我們反覆調整網路參數W使得輸出值F(X)趨向於該樣本的類別標籤Y。白盒攻擊使用同樣的方法,區別只是我們固定網路參數W,反覆修改輸入樣本X使得輸出值F(X)趨向於攻擊目標Y』。這意味著我們只需要修改目標函數以及約束條件,就可以使用與訓練神經網路同樣的方法計算得到對抗性樣本。
白盒攻擊的約束條件是一個關鍵部分。從X起始求解X』使得F(X』)=Y』的過程中,我們必須保證X』的標籤不是Y』。例如,對於一個手寫體輸入「1」,如果我們把它改成「2」使得模型判別是「2」,那就不算是攻擊。在計算機視覺領域,我們不太可能使用人力判定攻擊方法生成的每一個樣本X』,因此引入了距離函數Δ(X, X』)。我們假設在一定的距離內,X』的 含義和標籤與X是一致的。距離函數可以選擇不同的Norm來表示,比如L2, L∞, 和L0 。
L-BFGS是第一種攻擊深度學習模型的方法,它使用L2-Norm限制X』的範圍,並使用最優化方法L-BFGS計算得到X』。後來基於模型的線性假設,研究者又提出了Fast Gradient Sign Method (FGSM)[3] 和DeepFool[4]等一些新方法。如果以距離Δ(X, X』)最小為目標,目前最先進的方法是Carlini-Wagner,它分別對多種距離函數做了求解優化。
2.2 黑盒攻擊
黑盒攻擊只依賴於機器學習模型的輸出,而不需要了解模型內部的構造和狀態。遺傳(進化)演算法即是一個有效的黑盒攻擊方法。
遺傳演算法是在計算機上模仿達爾文生物進化論的一種最優化求解方法。它主要分為兩個過程:首先通過基因突變或雜交得到新一代的變種,然後以優勝劣汰的方式選擇優勢變種。這個過程可以周而復始,一代一代地演化,最終得到我們需要的樣本。
把遺傳演算法用於黑盒逃逸攻擊時,我們利用模型的輸出給每一個變種打分,F(X』)越接近目標標籤Y』則得分越高,把高分變種留下來繼續演化,最終可以得到F(X』)=Y』。這種方法已經成功用於欺騙基於機器學習的計算機視覺模型以及惡意軟體檢測器。
基於遺傳演算法的對抗樣本生成
3.1 對Gmail PDF過濾的逃逸攻擊
本文合作者許偉林一年前在NDSS大會上發表了名為Automatically Evading Classifiers的論文[5]。研究工作採用遺傳編程(Genetic Programming)隨機修改惡意軟體的方法,成功攻擊了兩個號稱準確率極高的惡意PDF文件分類器:PDFrate 和Hidost 。這些逃逸檢測的惡意文件都是演算法自動修改出來的,並不需要PDF安全專家介入。圖3顯示了對抗樣本生成的基本流程。
圖II-3: 利用進化演算法生成惡意PDF對抗變種
同樣的演算法可以用來對實際應用的機器學習系統進行逃逸攻擊。上面提到的工作可以對 Gmail內嵌的惡意軟體分類器進行攻擊, 並且只須4行代碼修改已知惡意PDF樣本就可以達到近50%的逃逸率,10億Gmail用戶都受到影響。
3.2 利用Fuzzing測試的對抗樣本生成
除了對模型和演算法的弱點進行分析,黑盒攻擊還可以借鑒模糊測試的方法來實現對抗樣本的生成。下面以手寫數字圖像識別為例,我們的目標是產生對抗圖片,使其看起來是「1」,而人工智慧系統卻識別為「2」。我們的主要思路是將這樣一個對抗樣本生成的問題,轉換為一個漏洞挖掘的問題,如下圖4所示。
圖II-4:針對手寫數字圖像識別的對抗樣本生成
我們主要是利用灰盒fuzzing測試的方法來實現,首先給定數字「1」的圖片作為種子,然後通過對種子圖片進行變異,如果機器學習系統將變異後的圖片識別為「2」,那麼我們認為這樣一個圖片就是對抗樣本。
利用Fuzzing測試的對抗樣本生成是基於AFL來實現的,主要做了以下幾方面的改進:
- 是漏洞注入,我們在機器學習系統中添加一個判斷,當圖片被識別為2時,則人為產生一個crash;
- 是在數據變異的過程中,我們考慮文件格式的內容,優先對一些圖像內容相關的數據進行變異;
- 是在AFL已有的路徑導向的基礎上,增加一些關鍵數據的導向。
下圖5是我們生成的一些對抗樣本的例子。
圖II-5:針對手寫數字圖像的對抗樣本生成結果
基於Fuzzing測試的對抗樣本生成方法也可以快速的應用到其他AI應用系統中,如人臉識別系統。
圖II-6:針對人臉識別系統的對抗樣本生成
基於軟體漏洞進行逃逸攻擊
針對AI系統的對抗性攻擊,就是讓人工智慧系統輸出錯誤的結果。 還是以手寫圖像識別為例,攻擊者可以構造惡意的圖片,使得人工智慧系統在分類識別圖片的過程中觸發相應的安全漏洞, 改變程序正常執行的控制流或數據流,使得人工智慧系統輸出攻擊者指定的結果。 攻擊思路基本分為兩種:
- 基於數據流篡改可以利用任意寫內存漏洞,直接將AI系統中的一些關鍵數據進行修改(如標籤、索引等), 使得AI系統輸出錯誤的結果。
- 另一種則是通過常規的控制流劫持(如堆溢出、棧溢出等漏洞)來完成對抗攻擊,由於控制流劫持漏洞可以通過漏洞實現任意代碼的執行,因此必然可以控制AI系統輸出攻擊者預期的結果。
關於軟體漏洞造成的問題我們在第一章里已有詳細介紹。 這裡只做了一個簡單介紹, 更多細節請參考ISC 2017大會人工智慧與安全論壇所發布的內容。
小結
本文的目的是繼續介紹被大眾所忽視的人工智慧安全問題。雖然深度學習在處理自然生成的語音圖像等以達到相當高的準確率,但是對惡意構造的輸入仍然有巨大的提升空間。雖然深度學習系統經過訓練可以對正常輸入達到很低的誤判率,但是當攻擊者用系統化的方法能夠生成誤判樣本的時候,攻擊的效率就可以接近100%, 從而實現穩定的逃逸攻擊。 隨著人工智慧應用的普及,相信對逃逸攻擊的研究也會越來越深入。
III. 深度學習數據流處理中的安全風險
深度學習在很多領域受到廣泛關注。 尤其在圖形圖像領域裡,人臉識別和自動駕駛等應用正在逐漸進入我們的生活。 深度學習的流行與普及也自然帶來了安全方面的考慮。 目前對深度學習的安全討論包括深度學習平台中發現的漏洞,深度學習模型中隱藏的錯誤,還有對深度學習系統的逃逸攻擊。
360 安全團隊發現在深度學習的數據處理流程中,同樣存在安全風險。攻擊者在不利用平台軟體實現漏洞或機器學習模型弱點的情況下,只利用深度學習數據流中的處理問題,就可以實現逃逸或數據污染攻擊。
- 攻擊實例
以深度學習圖片識別應用為攻擊目標, 我們用幾個例子來介紹降維攻擊的效果。
先從一張圖片開始。下面這個圖應該是羊群的照片吧。 我們把這張圖片送到深度學習圖片識別應用程序里,看看深度學習系統會怎麼說。
這裡我們用的程序來自Caffe平台自帶的經典圖片識別應用例子,識別所用的神經元網路是由谷歌發布的GoogleNet,數據來自著名的ImageNet 比賽,模型是由伯克利用谷歌的模型加上ImageNet的數據培訓的。這個平台的識別能力大家沒有疑問吧。
Caffe的深度學習應用認為上面的圖片是 狼 ! (圖片識別程序輸出如下。 TensorFlow 的例子結果也是狼!)
# sheep.png — MD5: fce6aa3c1b03ca4ae3289f5be22e7e65$ ./classification.bin models/bvlc_googlenet/deploy.prototxt models/bvlc_googlenet/bvlc_googlenet.caffemodel data/ilsvrc12/imagenet_mean.binaryproto data/ilsvrc12/synset_words.txt /tmp/sample/sheep.png---------- Prediction for /tmp/sample/sheep.png ----------0.8890 - "n02114548 white wolf, Arctic wolf, Canis lupus tundrarum」0.0855 - "n02120079 Arctic fox, white fox, Alopex lagopus"
再看一個例子。 下面這張圖,還是羊,人來看應該是一隻小羊。
那麼在機器學習系統里它會被認成什麼呢? Caffe的機器學習應用會把這一張認為是貓,具體講屬於ImageNet里的猞猁貓!其它平台TensorFlow,Torch等流行的圖片識別應用也是這樣。
為什麼會是這樣? 深度學習的訓練模型沒有錯。問題出在深度學習應用的數據流處理上。
降維攻擊原理
我們在前一段時間討論過關於深度學習的逃逸攻擊,主要介紹了各種讓機器學習系統做出錯誤判別的方法。 目前學術界對深度學習逃逸攻擊的研究大多集中在對抗樣本生成的方法,通過各種演算法在圖片上生成擾動,從而導致深度學習系統的誤判。 這篇文章提到的降維攻擊沒有使用傳統的對抗樣本生成策略。 降維攻擊是對深度學習應用的數據流處理進行了攻擊。
深度學習系統的核心是神經元網路。 深度學習所使用的靜態神經元網路往往假定它的輸入是一個固定的維度,這樣便於設計深度神經元網路。 固定的維度帶來的問題是:實際的輸入並不一定與神經元網路模型輸入用相同的維度。 解決這種維度不匹配的方法有兩個,一個是要求所有的輸入都必須是模型使用的維度,其它輸入一概扔掉。 另外一個選擇是對輸入進行維度調整。對於試圖對廣泛圖片進行識別的應用里,大多採用了第二種方法。在具體圖像識別應用里,就是把大的輸入圖片進行維度縮減,小的圖片進行維度放大。
下圖為一個典型的深度學習應用的數據流處理過程。
【 深度學習應用的數據流程圖 】
維度變化的結果是,深度學習模型真正用到的數據是維度變化過的圖片。
維度變化的演算法有很多種,常用的包括最近點抽取,雙線性插值等。這些演算法的目的是在對圖片降維的同時盡量保持圖片原有的樣子。
但是這些常用的降維演算法沒有考慮惡意構造的輸入。上面的兩個攻擊圖片例子都是針對最常用的雙線性插值構造的惡意攻擊樣本。 我們用下面的圖片展示人看到的圖片和深度學習真正看到的圖片 (左邊一列是原始輸入,右邊是深度學習系統後端模型認為的輸入)。
圖片左邊是對深度學習應用的輸入圖片,右邊是降維後的圖片。 羊群圖片經過縮減,就會變成一隻雪地里的白狼。 卡通小羊的圖片也就變成了可愛小貓的圖片。 當然這些輸入圖片是經過特殊處理構造的,專門讓降維函數出現這種異常的結果。
基於這個攻擊思路,我們也對其它深度學習應用進行了測試。 例如著名的深度學習教科書案例 MINST 手寫數字識別,我們可以成功生成對人很清楚的數字,但會被深度學習系統誤識別的圖片。下面顯示了四組圖片。 每一組中,左邊是對應用的輸入,也就是人看到的圖片;右邊是人看不到,但是被機器學習模型最後處理的圖片。 這樣的圖片變化,造成深度學習系統出現錯誤識別應該不難理解。
降維攻擊影響範圍及防範手段
降維攻擊會影響到使用維度調整的深度學習系統。 著名的深度學習平台,包括TensorFlow,Caffe,Torch都提供維度調整函數供深度學習應用程序使用。 下面的表格里展示了常用深度學習框架中使用的維度調整演算法。使用這些演算法的程序都可能受到降維攻擊的影響。
根據我們的初步分析,幾乎所有網上流行的深度學習圖片識別程序都有被降維攻擊的風險。
對於降維攻擊的防範,用戶可以採用對超出異常的圖片進行過濾,對降維前後的圖片進行比對,以及採用更加健壯的降維演算法等。
小結
本文的目的是繼續介紹被大眾所忽視的人工智慧安全問題。降維攻擊是對深度學習的數據流進行攻擊的一種新型攻擊方法,主要影響對任意圖片進行識別的深度學習應用程序。 我們希望通過這些工作提醒公眾,在擁抱人工智慧熱潮的同時,需要持續關注深度學習系統中的安全問題。
參考文獻
[1] Freebuf 機器學習對抗性攻擊報告
[2] Ian Goodfellow and Jonathon Shlens and Christian Szegedy, Explaining and Harnessing Adversarial Examples. International Conference on Learning Representations, 2015.
[3] Guyen, A., J. Yosinski, and J. Clune, Deep neural networks are easily fooled: High confidence predictions for unrecognizable images. 2015: p. 427-436.
[4] Moosavi Dezfooli, Seyed Mohsen and Fawzi, Alhussein and Frossard, Pascal, DeepFool: a simple and accurate method to fool deep neural networks, Proceedings of 2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2016.
[5] Weilin Xu, Yanjun Qi, and David Evans, Automatically Evading Classifiers A Case Study on PDF Malware Classifiers, NDSS, 2016
[6] Qixue Xiao, Kang Li, Deyue Zhang, and Weilin Xu, Security Risks in Deep Learning Implementations, arXiv:1711.11008. https://arxiv.org/abs/1711.11008, 2017
[7] Qixue Xiao, Kang Li, Deyue Zhang, and Yier Jin, The Downscaling Attack Against Deep Learning Applications, arXiv:1711.11008. https://arxiv.org/abs/1712.07805, 2017
[8] Richard Chirgwin, What do TensorFlow, Caffe, and Torch have in Common? Open CVEs. https://www.theregister.co.uk/2017/11/30/machine_learning_vulnerabilities/ 2017
推薦閱讀:
※量子計算正接近現實 早期投資者已看到這些商機
※「癌症殺手」還是「讀心專家」?不充電機器人為我們打開了另一扇窗
※科幻電影中的人工智慧
※TensorFlow 的常用模塊介紹
※人工智慧應用於檢測設備市場潛力巨大——工博會系列之二
TAG:人工智慧 |