近日,360 AI安全研究院(AIVUL團隊)對Google Tensorflow進行了安全測試,在不到一個月的時間內發現多個安全問題,最終獲得谷歌分配的24個CVE編號,其中危險等級嚴重的漏洞(critical severity)2個,高危(high severity)8個,中危(moderate severity)12個,低危(low severity)2個,影響上千萬開發者及使用者。
0x01 機器學習框架安全問題
近年來,谷歌(Google)、臉書(Facebook)、微軟(Microsoft)等公司釋出了一系列開源的人工智慧框架,如Tensorflow、PyTorch、MXNet、CNTK、Caffe等,並已經被工業界和學術界廣泛採用。這些框架可以幫助開發者高效、快速的構建網路模型進行訓練和推理,而無需關心底層實現的細節。由於機器學習框架高效、便捷的特性,越來越多的開發者加入到AI應用研發的行列。如谷歌推出的Tensorflow是目前最流行的機器學習框架之一,深受廣大開發者的喜愛,其下載量已達上千萬級,特別是在2.0版本釋出後,其在簡單和易用性方面有了大幅度提升,極大地方便了開發者。
然而,在機器學習框架研發的時候,更多關注其功能、效能以及面向開發者的易用性,對框架軟體本身實現層面的安全性缺乏充分考慮。一旦這些框架中存在安全問題,將會影響數以千萬計的開發者以及使用者。
早在2017年,360 AIVUL團隊便對機器學習框架所依賴的第三方庫進行了全面安全測試,最終發現了諸多安全問題。隨著機器學習框架的不斷完善、發展,三年後的今天,機器學習框架的安全性是否已經得到改善呢?
帶著這個疑問,360 AIVUL團隊再次對機器學習框架Tensorflow進行了安全測試,在不到一個月的時間內發現多個安全問題,最終獲得谷歌分配的24個CVE編號,其中危險等級嚴重的漏洞(critical severity)2個,高危(high severity)8個,中危(moderate severity)12個,低危(low severity)2個,影響上千萬開發者及使用者。
360 AIVUL團隊提交的Tensorflow漏洞列表
0x02 Tensorflow雲端模組漏洞分析
TensorFlow雲端模組主要執行在PC機或者伺服器上,用於機器學習模型的訓練以及推理。雲端模組在訓練模型時需要處理海量資料,在推理時主要完成模型最佳化、模型部署以及推斷計算等工作,以上工作強依賴於密集型、並行化計算能力。
Tensorflow雲端模組在2.4版本中修復了數十個由360 AIVUL團隊提交的漏洞,漏洞型別包含:記憶體越界訪問、記憶體越界寫、堆崩潰、格式化字串、空指標解引用等。這些漏洞可能導致任意程式碼執行、資訊洩露以及拒絕服務等,進而影響機器學習應用的訓練、推理結果。
以下我們介紹Tensorflow 2.3中存在的兩個嚴重漏洞以及這些漏洞對使用者的影響。
案例一:CVE-2020-15205 StringNGrams資訊洩露(危險等級:嚴重)
漏洞POC如下,從程式碼中可以看到,其中只有一行簡短的函式呼叫,正常使用了Tensorflow提供的函式StringNGrams來進行片語的組合。
然而程式執行結束後,在第六個結果中,“AIVul”之後包含了一串未知的16進位制資料,經過分析發現,這些資料來自於記憶體空間,其中包含一些敏感資訊,如返回地址等。
當受害者執行以上簡單的函式後,便洩露了記憶體資料資訊,方便攻擊者進行下一步的攻擊,比如透過洩露的資訊構造攻擊向量,繞過地址隨機化,進而控制受害者的機器。
案例二:CVE-2020-15202 random.gamma越界寫(危險等級:嚴重)
在這個案例中,當執行以下POC時,Tensorflow便會產生越界寫的問題。
此時的崩潰棧如下,可以發現崩潰點在_pywrap_tensorflow_internal.so庫的RandomGammaOp<float>::Compute函式中。
此時檢視造成崩潰時的指令:
可以看到程式將xmm3中的資料儲存在rdi+rax*4的地址空間中,透過檢視暫存器rdi與rax資料:
並結合記憶體空間佈局,最終可以發現,崩潰地址的指令向非法的記憶體寫資料。
如果攻擊者構造特殊的引數數值,控制寫資料的地址,那麼當受害者執行看似“人畜無害”的指令碼或者函式後,將會影響模型的訓練、推理結果,或者導致在受害者的機器中執行惡意指令,導致命令執行的後果。
0x03 Tensorflow終端模組漏洞分析
隨著終端裝置算力的增強,AI推理能力逐漸向端側遷移,為了充分利用終端晶片,特別是AI晶片的計算能力,許多廠商都推出了可整合硬體(如CPU,GPU,DSP,NPU等)和軟體算力的終端機器學習框架或模組,讓搭載了AI晶片的終端裝置具有更強的AI處理能力。
Tensorflow Lite是Tensorflow中的終端模組,主要面向移動端裝置與IoT裝置等終端裝置。由於終端裝置功耗、晶片等諸多限制,開發者首先需要透過轉換工具將雲端模組訓練好的模型轉換為終端裝置適用的模型格式,然後藉助Tensorflow終端模組TFLite,在終端裝置上進行模型的載入、推理。
360 AIVUL團隊在TFLite中同樣發現了多個高危漏洞,這裡以CVE-2020-15214為例詳細的介紹終端框架漏洞可能導致的安全問題。
案例一:CVE-2020-15214 segment_sum函式越界寫(危險等級:高危)
在TFLite中,segment_sum運算元的功能是將一個tensor進行切割,分成多個segments,並且將同一segment下的資料進行求和。當TFLite載入我們構造的惡意模型進行推理時,便會產生越界寫的效果。
在TFLite的實現中,預設傳入的segment_ids是遞增排序的,並且使用segment_ids的最後一個元素來為output tensor分配記憶體空間。
但是,如果segments_ids不滿足遞增排序,在向output tensor寫入資料時,便會產生問題。
在TFLite中,使用BuildFromBuffer和Interpreter::Invoke函式來載入和推理TFLite模型,儘管TFLite提供了Verify API來對模型檔案的欄位進行合法性檢查,但是依舊可以透過精心構造惡意模型檔案來繞過檢查。所以當使用者載入和推理精心構造的惡意模型檔案時,就會觸發漏洞,導致越界寫資料的後果,進而可能在使用者的終端裝置中執行惡意程式碼。
0x04 總結
360 集團董事長兼CEO周鴻禕曾說過:“安全是基礎,只有在安全的基礎上,我們才有可能考慮舒適、便捷的人工智慧式生活。”機器學習框架作為重要的人工智慧基礎設施,其安全性直接影響到廣大AI應用開發者和使用者。然而,目前開源機器學習框架往往缺乏嚴格的安全測試管理和認證,可能存在嚴重的安全
風險,一旦被攻擊者惡意利用,就會危及整個人工智慧產品和應用的可用性和可靠性,甚至有可能導致重大的財產損失與惡劣的社會影響。
360 AIVUL團隊建議,未來各廠商應加強在框架安全方面的重視和投入,特別是要對涉及框架外部環境互動的模組、軟體供應鏈等環節進行重點安全性檢測。另外,框架安全應協同硬體安全、演算法安全、資料安全等軟硬體各維度的安全防禦技術,建立一體化安全防禦體系。
【AI安全研究院(AIVUL團隊)】
360 AI安全研究院隸屬於360未來安全研究院,專注於人工智慧與安全前沿技術研究,在全球範圍內率先發現了眾多的人工智慧安全問題,並開展人工智慧賦能安全的研究工作;具體研究領域涉及AI基礎設施安全、AI演算法與資料安全、新一代智慧化漏洞挖掘、基於AI的未知威脅檢測等。團隊在相關研究領域有豐富的成果積累:
- 是全球首個從系統實現角度對AI關鍵基礎設施進行攻擊的團隊;
- 研製完成多款先進的漏洞挖掘工具,累計發現主流機器學習框架及依賴元件漏洞100+個,影響範圍包括Tensorflow、Caffe、PyTorch、OpenVINO等;
- 發現常用軟體漏洞200+個,智慧裝置漏洞20+個;
- 聯合清華大學、西安交大的研究人員提出一種新型的資料流降維攻擊方法,其危害性影響國內外主流廠商的AI雲服務;
- 發現多款人臉識別裝置的安全風險,可實現任意物體透過驗證;
- 研製AI演算法與資料安全攻防對抗平臺,發現新型的具備對物理世界造成威脅的對抗攻擊、後門攻擊方法,並提出對應的安全防禦技術;
- 在USENIX Security、S&P等國際頂尖資訊保安學術會議上發表論文,在HITB、ISC、CNCC、POC、Defcon China、Syscan360等國內外知名安全會議上發表大量議題。
歡迎更多對AI與安全研究感興趣的同學加入我們!(Email: zhangdeyue@360.cn)
Reference:
https://www.anquanke.com/post/id/86989
https://github.com/tensorflow/tensorflow/blob/master/RELEASE.md
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/security/README.md
https://github.com/tensorflow/tensorflow/security/advisories
https://www.anquanke.com/post/id/209852