近日,360 AI安全研究院(AIVUL團隊)對Google tensorflow進行了安全測試,在不到一個月的時間內發現多個安全問題,最終獲得谷歌分配的24個CVE編號,其中危險等級嚴重的漏洞(critical severity)2個,高危(high severity)8個,中危(moderate severity)12個,低危(low severity)2個,影響上千萬開發者及用戶。
近年來,谷歌(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個,影響上千萬開發者及用戶。
TensorFlow雲端模塊主要運行在PC機或者伺服器上,用於機器學習模型的訓練以及推理。雲端模塊在訓練模型時需要處理海量數據,在推理時主要完成模型優化、模型部署以及推斷計算等工作,以上工作強依賴於密集型、並行化計算能力。
Tensorflow雲端模塊在2.4版本中修復了數十個由360 AIVUL團隊提交的漏洞,漏洞類型包含:內存越界訪問、內存越界寫、堆崩潰、格式化字符串、空指針解引用等。這些漏洞可能導致任意代碼執行、信息洩露以及拒絕服務等,進而影響機器學習應用的訓練、推理結果。
以下我們介紹Tensorflow 2.3中存在的兩個嚴重漏洞以及這些漏洞對用戶的影響。
漏洞POC如下,從代碼中可以看到,其中只有一行簡短的函數調用,正常使用了Tensorflow提供的函數StringNGrams來進行詞組的組合。
然而程序運行結束後,在第六個結果中,「AIVul」之後包含了一串未知的16進位數據,經過分析發現,這些數據來自於內存空間,其中包含一些敏感信息,如返回地址等。
當受害者運行以上簡單的函數後,便洩露了內存數據信息,方便攻擊者進行下一步的攻擊,比如通過洩露的信息構造攻擊向量,繞過地址隨機化,進而控制受害者的機器。
在這個案例中,當運行以下POC時,Tensorflow便會產生越界寫的問題。
此時的崩潰棧如下,可以發現崩潰點在_pywrap_tensorflow_internal.so庫的
RandomGammaOp::Compute
函數中。
此時查看造成崩潰時的指令:
此時查看造成崩潰時的指令:
可以看到程序將xmm3中的數據保存在rdi+rax*4的地址空間中,通過查看寄存器rdi與rax數據:
並結合內存空間布局,最終可以發現,崩潰地址的指令向非法的內存寫數據。
如果攻擊者構造特殊的參數數值,控制寫數據的地址,那麼當受害者運行看似「人畜無害」的腳本或者函數後,將會影響模型的訓練、推理結果,或者導致在受害者的機器中執行惡意指令,導致命令執行的後果。
隨著終端設備算力的增強,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來對模型文件的欄位進行合法性檢查,但是依舊可以通過精心構造惡意模型文件來繞過檢查。所以當用戶加載和推理精心構造的惡意模型文件時,就會觸發漏洞,導致越界寫數據的後果,進而可能在用戶的終端設備中執行惡意代碼。
360 集團董事長兼CEO周鴻禕曾說過:「安全是基礎,只有在安全的基礎上,我們才有可能考慮舒適、便捷的人工智慧式生活。」機器學習框架作為重要的人工智慧基礎設施,其安全性直接影響到廣大AI應用開發者和用戶。然而,目前開源機器學習框架往往缺乏嚴格的安全測試管理和認證,可能存在嚴重的安全風險,一旦被攻擊者惡意利用,就會危及整個人工智慧產品和應用的可用性和可靠性,甚至有可能導致重大的財產損失與惡劣的社會影響。
360 AIVUL團隊建議,未來各廠商應加強在框架安全方面的重視和投入,特別是要對涉及框架外部環境交互的模塊、軟體供應鏈等環節進行重點安全性檢測。另外,框架安全應協同硬體安全、算法安全、數據安全等軟硬體各維度的安全防禦技術,建立一體化安全防禦體系。
360 AI安全研究院隸屬於360未來安全研究院,專注於人工智慧與安全前沿技術研究,在全球範圍內率先發現了眾多的人工智慧安全問題,並開展人工智慧賦能安全的研究工作;具體研究領域涉及AI基礎設施安全、AI算法與數據安全、新一代智能化漏洞挖掘、基於AI的未知威脅檢測等。團隊在相關研究領域有豐富的成果積累:
歡迎更多對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