閱讀160 返回首頁    go 阿裏雲 go 技術社區[雲棲]


深度學習框架中的魔鬼:探究人工智能係統中的安全問題

ISC 2017中國互聯網安全大會舉辦了人工智能安全論壇。 我們把論壇總結成為一係列文章,本文為係列中的第一篇。

深度學習引領著新一輪的人工智能浪潮,受到工業界以及全社會的廣泛關注。 雖然大家對人工智能有很多美好的憧憬,但是現實是殘酷的 — 隨著一批深度學習應用逐漸開始變成現實,安全問題也漸漸顯現出來。

人工智能應用麵臨來自多個方麵的威脅:包括深度學習框架中的軟件實現漏洞、對抗機器學習的惡意樣本生成、訓練數據的汙染等等。這些威脅可能導致人工智能所驅動的識別係統出現混亂,形成漏判或者誤判,甚至導致係統崩潰或被劫持,並可以使智能設備變成僵屍攻擊工具。

在推進人工智能應用的同時,我們迫切需要關注並解決這些安全問題。本文作為人工智能與安全的係列文章之一,首先介紹我們在深度學習框架中發現的安全問題。

一、人工智能討論中的安全盲點

目前公眾對人工智能的關注,尤其是深度學習方麵, 缺少對安全的考慮。我們把這個現象稱為人工智能的安全盲點。導致這個盲點的主要原因是由於算法與實現的距離。 近期對於深度學習的討論主要停留在算法和前景展望的層麵,對應用場景和程序輸入有很多假設。受到關注的應用往往假定處於善意的或封閉的場景。例如高準確率的語音識別中的輸入都是自然采集而成,圖片識別中的輸入也都來自正常拍攝的照片。這些討論沒有考慮人為惡意構造或合成的場景。

人工智能討論中的安全盲點可以通過最典型的手寫數字識別案例來說明。基於MNIST數據集的手寫數字識別應用是深度學習的一個非常典型的例子, 最新的深度學習教程幾乎都采用這個應用作為實例演示。在這些教程中(如下圖所示)算法層的討論所考慮的分類結果隻關心特定類別的近似度和置信概率區間。算法層的討論沒有考慮輸入會導致程序崩潰甚至被攻擊者劫持控製流。這其中被忽略掉的輸出結果反映出算法和實現上考慮問題的差距,也就是目前人工智能討論中的安全盲點。

深度學習算法與安全所考慮的不同輸出場景

圖1. 深度學習算法與安全所考慮的不同輸出場景

現實中的開放應用需要處理的輸入不僅來源於正常用戶,也可以是來自黑產等惡意用戶。 人工智能的應用必須考慮到應用所麵臨的現實威脅。程序設計人員需要考慮輸入數據是否可控,監測程序是否正常執行,並驗證程序執行結果是否真實反映應用的本來目的。

二、深度學習係統的實現及依賴複雜度

深度學習軟件很多是實現在深度學習框架上。目前基於深度學習係統框架非常多,主流的包括TensorFlow、Torch,以及Caffe 等。

深度學習框架的使用可以讓應用開發人員無需關心神經元網絡分層以及培訓分類的實現細節,更多關注應用本身的業務邏輯。開發人員可以在框架上直接構建自己的神經元網絡模型,並利用框架提供的接口對模型進行訓練。這些框架簡化了深度學習應用的設計和開發難度,一個深度學習的模型可以用幾十行代碼就可以寫出來。

深度學習框架以及框架組件依賴

圖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 拒絕服務攻擊漏洞及官方補丁

圖3. Numpy 拒絕服務攻擊漏洞及官方補丁

我們選擇了基於TensorFlow的語音識別應用來演示基於這個漏洞觸發的攻擊。攻擊者通過構造語音文件,會導致上圖中顯示的循環無法結束,使應用程序長時間占用CPU而不返回結果,從而導致拒絕服務攻擊。

我們選取了一個基於TensoFlow進行聲音分類的應用來演示這個問題。這個應用是一個 TensorFlow程序演示,應用腳本源碼可以從以下網站下載:“Urban SoundClassification”。

當給定一個正常的狗叫的音頻文件,應用可以識別聲音內容為 “dog bark”,其過程如下:

圖4

當給定一個畸形的聲音文件可導致拒絕服務, 程序無法正常結束:

圖5

在前麵關於模塊依賴複雜導致漏洞的討論中,我們提到過對模塊接口的理解不一致會導致問題。值得一提的是Numpy這個漏洞的修複過程正好反映了這個問題。在我們最初通知Numpy開發者的時候,他們認為問題是由於調用者librosa庫的開發人員沒有對數據進行嚴格檢測,導致空列表的使用。所以盡管有應用會因為此問題受到拒絕服務攻擊, Numpy開發者最初認為不需要修複這個問題。但後來發現有多個其它庫對numpy的相關函數也有頻繁的類似調用,所以最終對這個漏洞進行了修複。同時librosa 開發者也對相關調用添加了輸入檢查。

案例2:惡意圖片導致基於Caffe的圖像識別應用出現內存訪問越界

很多深度學習的應用是在圖像和視覺處理領域。我們發現當使用深度學習框架Caffe來進行圖片識別時,Caffe會依賴libjasper等圖像視覺庫來處理輸入。 libjasper對圖像進行識別處理時,如果存在漏洞,例如內存越界,就可能導致整個應用程序出現崩潰,甚至數據流被篡改。下麵的例子是用展示的是用Caffe所自帶的例子圖像識別程序來處理我們提供的畸形圖片所出現的崩潰場景。

當利用Caffe來對正常圖片進行分類時,正常的使用情況如下:

圖6

圖7

以上僅僅是我們發現的眾多問題中的兩個展示。 360Team Seri0s 團隊已發現並公布了數十個導致深度學習框架出現問題的漏洞,其中包含已對外公開的15個CVE。在上個月舉行的ISC安全大會上,Team Seri0s成員已經展示了六個攻擊實例。更多細節請參考ISC 2017大會人工智能與安全論壇所發布的內容。

四、小結

本文的目的是介紹被大眾所忽視的人工智能安全問題,尤其是深度學習軟件實現中的漏洞以及可能造成的隱患。目前在媒體中展示的深度學習應用中,許多並不與外界直接交互,例如AlphaGo;或者是在封閉的環境下工作,例如通過用戶行為日誌對用戶分類畫像並進行異常檢測。這些係統的攻擊麵相對較小,它們並不容易受到本文中所提到的漏洞的直接影響。但是隨著人工智能應用的普及,安全威脅會不斷增加,更多的應用會把應用的輸入接口直接或間接暴露出來,同時封閉係統的攻擊麵也會隨著時間和環境而轉化。另外除了傳統的基於軟件漏洞的攻擊,深度學習還麵臨對抗神經元網絡以及其它各種逃逸攻擊。 我們會在後續文章裏對這方麵的工作進行更新。


本文作者:肖奇學 李康

來源:51CTO

最後更新:2017-11-02 16:04:08

  上一篇:go  披著羊皮的“狼”來了:假冒20億用戶的瀏覽器!
  下一篇:go  有人提了一個問題:一定要RESTful嗎?