當前位置:
首頁 > 新聞 > 你的深度學習應用可能存在安全風險

你的深度學習應用可能存在安全風險

360安全實驗室(肖奇學 、Deyue Zhang)、喬治亞大學(李康)和弗吉尼亞大學(Weilin Xu)的研究者,他們在論文《Security Risks in Deep Learning Implementations》中,對三個主流的深度學習框架的實現中存在的安全威脅進行了檢查和分析,分別是Caffe, TensorFlow, and Torch。文中,作者提到軟體來說,應用實現的複雜性會導致一些軟體漏洞的產生。深度學習框架面臨同樣的挑戰,經過檢查,研究人員發現了許多實現的漏洞,其中15個漏洞擁有CVE編號。漏洞的類型有堆溢出、數字溢出、Use-After-Free漏洞等。

深度學習應用程序的分層架構

深度學習框架讓開發人員可以快速開發深度學習應用程序。深度學習應用程序採用的是一種三層的分層架構,最底層是框架依賴庫,上層是深度學習的框架,最上層為深度學習的應用程序。有了預先實現的神經網路層,深度學習框架允許開發者重點關注應用程序的實現邏輯。

深度學習應用程序的分層架構

深度學習應用程序的威脅和風險

基於深度學習和人工智慧的應用程序越來越多,但是關於應用程序的安全性卻很少受到關注。

攻擊面分析

MNIST是一個入門級的計算機視覺數據集,它包含各種手寫數字圖片,它也包含每一張圖片對應的標籤,告訴我們這個是數字幾。研究人員認為MNIST這樣的圖像識別應用程序有三個攻擊面:

1、惡意圖像輸入

許多深度學習應用程序,都是經過訓練後根據輸入的數據進行分類和識別。對從文件或網路中讀取輸入的應用程序,攻擊者有構造惡意輸入圖形的能力。從文件中讀取輸入相比,直接從直連的攝像頭中讀取輸入的應用程序的攻擊面更小。雖然攻擊面變小了,但是仍然有從這個入口進行攻擊的可能。

2、惡意訓練數據

圖像識別應用程序需要訓練樣本,而這些樣本可能會被污染,比如來源於外部資源。這就是所謂的數據污染攻擊。數據污染攻擊是不依賴於軟體漏洞的,但是軟體實現中的漏洞會讓數據污染攻擊更易實現。

3、惡意模型

如果深度學習應用程序使用的模型是第三方的,那也有被攻擊的可能。有許多公開的針對沒有很多機器學習知識的開發者使用的深度學習模型。這些模型可能會被攻擊者利用,進行潛在的攻擊。與數據污染攻擊類似,攻擊者可以在不利用其他漏洞的情況下對這些使用外部模型的應用程序產生威脅。代碼中的漏洞可以幫助攻擊者隱藏惡意模型,並使惡意模型更加真實。

威脅種類

從上圖可以看出,其中Caffe的漏洞最多,其次是Torch,最少的是Tensorflow。顯現出最多的安全威脅依次是奔潰, DoS, 堆溢出、數字溢出。

威脅1:DoS攻擊

深度學習框架中最常見的漏洞是那些會引起程序奔潰、進入無線循環、或耗盡內存資源的軟體bug。這樣的漏洞引起的直接威脅就是對運行在框架上的應用程序的DOS攻擊。如TensorFlow框架中的numpy package的漏洞,漏洞存在與pad()函數中,pad()函數中含有一個while循環,如果用戶的輸入不被接受,那麼就會進入循環狀態。

--- a/numpy/lib/arraypad.py

+++ b/numpy/lib/arraypad.py

@@ -1406,7 +1406,10 @@ def pad(array, pad_width, mode, **kwargs):

newmat = _append_min(newmat, pad_after, chunk_after, axis)

elif mode == 』reflect』:

- for axis, (pad_before, pad_after) in enumerate(pad_width):

+ if narray.size == 0:

+ raise ValueError("There aren』t any elements to reflect in 』array』!")

+

+ for axis, (pad_before, pad_after) in enumerate(pad_width):

... ...

method = kwargs[』reflect_type』]

safe_pad = newmat.shape[axis] - 1

while ((pad_before > safe_pad) or (pad_after > safe_pad)):

... ...

Numpy包示例

威脅2:evasion(躲避)攻擊

evasion(躲避)攻擊是攻擊者可以構建讓深度學習模型誤分類的輸入。關於這種構造,有很多學者已經證明過了(adversarial learning methods)。當發現有漏洞的深度學習模型,攻擊者可以利用軟體的漏洞達到evasion(躲避)攻擊的目的。研究人員在深度學習模型中發現很多可以造成錯誤分類的內存破壞bug。攻擊者有兩種方式可以利用bug:1)攻擊者利用漏洞改寫內存中的內容,這樣就可以更改分類的結果;2)劫持應用程序的控制流來跳過模型的執行或改變模型執行的順序。

bool BmpDecoder::readData( Mat& img )

{

uchar* data = img.ptr();

....

if( m_origin &=& IPL_ORIGIN_BL )

{

data += (m_height - 1)*(size_t)step; // result an out bound write

step = -step;

}

....

if( color )

WRITE_PIX( data, clr[t] );

else

*data = gray_clr[t];

....

}

index 3b23662..5ee4ca3 100644

--- a/modules/imgcodecs/src/loadsave.cpp

+++ b/modules/imgcodecs/src/loadsave.cpp

+

+static Size validateInputImageSize(const Size& size)

+{

+ CV_Assert(size.width > 0);

+ CV_Assert(size.width

+ CV_Assert(size.height > 0);

+ CV_Assert(size.height

+ uint64 pixels = (uint64)size.width * (uint64)size.height;

+ CV_Assert(pixels

+ return size;

+}

@@ -408,14 +426,26 @@ imread_( const String& filename, int flags, int hdrtype, Mat* mat=0 )

// established the required input image size

- CvSize size;

- size.width = decoder->width();

- size.height = decoder->height();

+ Size size = validateInputImageSize(Size(decoder->width(), decoder->height()));

OpenCV包示例

威脅3:系統破壞

一些軟體bug可以讓攻擊者劫持控制流,這樣攻擊者就可以利用軟體bug來遠程破壞裝有深度學習應用程序的系統。這種情況會發生在深度學習應用程序以雲服務作為來自網路的輸入反饋。

index 86cacd3..257f97c 100644

--- a/modules/imgcodecs/src/grfmt_bmp.cpp

+++ b/modules/imgcodecs/src/grfmt_bmp.cpp

@@ -118,8 +118,9 @@ bool BmpDecoder::readHeader()

if( m_bpp

{

- memset( m_palette, 0, sizeof(m_palette));

- m_strm.getBytes( m_palette, (clrused == 0? 1

+ CV_Assert(clrused

+ memset(m_palette, 0, sizeof(m_palette));

+ m_strm.getBytes(m_palette, (clrused == 0? 1

iscolor = IsColorPalette( m_palette, m_bpp );

}

else if( m_bpp == 16 && m_rle_code == BMP_BITFIELDS )

OpenCV包示例

閉環環境中應用程序的安全風險

許多深度學習應用程序是在閉環環境中運行的,這種情況下,應用程序會從直接相連的感測器上獲取輸入。比如攝像機上的機器學習應用程序只從內置的攝像頭感測器獲取輸入。這樣的話,惡意輸入的風險就會小很多。但是,風險還是存在的,比如感測器和感測器數據真實性相關的風險。如果感測器與深度學習應用程序運行的雲伺服器有數據通信,攻擊者就可以逆向通信協議,並直接攻擊。

深度學習應用程序中的安全漏洞

研究人員用了一些傳統的bug查找方法來尋找軟體中的漏洞,比如模糊測試。但是傳統的模糊測試工具對於深度學習應用程序的檢測效果比較差。

邏輯錯誤和數據操作相關的安全風險

研究人員主要的工作是在導致程序奔潰、控制流劫持和DOS的傳統軟體漏洞。有一個需要考慮的問題是有沒有深度學習框架中獨有的bug,有什麼方法可以檢測這些bug。evasion(躲避)攻擊和數據污染攻擊並不依賴於傳統的軟體漏洞,比如緩存區溢出。如果存在錯誤導致應用程序需要更多的數據進行訓練和分類,那麼就可以發起evasion(躲避)攻擊了。

論文地址:https://arxiv.org/pdf/1711.11008.pdf


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

花式玩轉HackerTarget的SSRF
按了5次shift鍵就能黑掉ATM?俄羅斯驚現真實個案
銀行大劫案:盤點2017年9大銀行木馬趨勢
代碼簽名證書克隆攻擊和防禦

TAG:嘶吼RoarTalk |