全球“黑客大賽”冠軍霸氣講述:我是如何讓50個檔案一起騙過AI安防系統的?

大資料文摘發表於2020-04-06

全球“黑客大賽”冠軍霸氣講述:我是如何讓50個檔案一起騙過AI安防系統的?

大資料文摘出品

來源:medium

編譯:邢暢、張睿毅、錢天培

你有沒有想過當黑客呢?

破解手機密碼,黑入公司系統,甚至…控制全球電腦。

打住打住!違法犯罪的念頭顯然不能有。再退一步講,我們也不一定有這本事。

尤其是在今天,AI安防早已司空見慣,想要當黑客的難度也越來越高了。

有趣的是,網路安全平臺Endgame,MRG-Effitas和VM-Ray在近日聯手發起了一場“黑客徵集”大賽。號召機器學習工程師們一起來攻擊他們的安防系統。

比賽的目標是,讓50個惡意Windows可移植可執行檔案(PE)逃避三個機器學習惡意軟體分類器的檢測。這些檔案不僅需要躲避檢測,而且還能實現它們原來的功能和行為。

在這場比賽中,一位名叫William Fleshman的小哥拔得頭籌——他成功讓所有50個檔案都逃過了AI模型的過濾。

他是怎麼做到的呢?讓我們一起來聽聽他的分享。

知己知彼
這是一場白盒比賽,這意味著我可以訪問所有模型的引數和原始碼。因此,要做的第一件事就是看看模型後臺發生了什麼。
MalConv
第一個模型是基於Windows可執行檔案的原始位元組訓練的神經網路。
表示檔案位元組的整數序列(0-255)被傳遞給MalConv。MalConv中的嵌入層將每個位元組對映到一個數字向量。然後通過另外的神經網路層處理向量序列。該模型輸出兩個數字,分別表示輸入是良性和惡意的概率。
關於MalConv的研究早已層出不窮。最簡單的攻擊就是在可執行檔案的末尾新增一些位元組。這是一個特別好的技巧,因為新增的資料(即Overlay)不會在惡意軟體執行時載入到記憶體中。因此,我們可以在不改變檔案功能的情況下在Overlay中放入任何我們想加的內容。
MalConv同時查詢良性和惡意位元組的不同模式,以便做出決策。Overlay攻擊的目的是用與良性檔案相關的模式包裝它。
非負MalConv
第二個模型實際上與第一個模型相同,但分配給各層的權重不同。
顧名思義,非負MalConv在訓練過程中被限制為具有非負權重矩陣。這樣做是為了防止針對MalConv建立的攻擊。如果處理得當,非負權重使二元分類器單調;這意味著新增新內容只會增加惡意得分。這將使規避模型變得非常困難,因為大多數規避攻擊確實需要向檔案新增內容。
“幸運”的是,非負MalConv的實現有一個微小但關鍵的缺陷。
非負防禦只適用於二分類器,其輸出分數表示樣本的惡意程度。然而,這個版本將輸出分成兩個分數,分別表示惡意和良性。之後,一個softmax函式將每個類的分數轉換為概率。這種結構使得非負權重的訓練變得毫無意義。附加內容仍然可以將良性評分推到任意高。當良性評分越高,即使存在相同數量的惡意內容,softmax函式也會將把惡意評分推得越低。因此所有針對MalConv的攻擊在這裡也會起作用。
全球“黑客大賽”冠軍霸氣講述:我是如何讓50個檔案一起騙過AI安防系統的?


論文:

http://ci.louisville.edu/zurada/publications/chor-zur-tnnls.pdf

Ember
Ember其實是Endgame維護的一個資料集。和資料集一起釋出的還有一個訓練好的基準模型,也稱為Ember。Ember是一個lightgbm模型(增強決策樹的集合),它根據Windows PE檔案解析的幾個特徵訓練得到。
Ember特徵解析的原始碼在GitHub上可以找到。
程式碼連結:

https://github.com/endgameinc/ember/blob/master/ember/features.py

瞭解如何解析特徵對製造攻擊非常有用。提取的特徵包括:
  • 位元組直方圖

  • 位元組熵

  • Section資訊(名稱、大小、熵、屬性)

  • 匯入表庫及入口資訊

  • 匯出函式

  • 一般檔案資訊(各種檔案的大小和數量)

  • 檔案頭資訊(機器碼、結構、連結器、版本號)

  • 字串資訊(檔案中字串的各種統計資訊)

  • 資料目錄

數值特徵可以直接使用,其他特徵(如section的名稱)可用雜湊轉換為數值向量。乍一看,Ember似乎難以愚弄,它解析的許多特徵都與檔案結構,或者與我們無法更改的特徵相關。我們必須在維持原功能的同時還要避免被檢測到!
Ember的漏洞是攻擊者可以任意控制某些特徵。lightgbm模型在整合樹的多個位置使用這些特徵。我們可以利用模型的複雜性,通過操縱特徵來推動導致逃避的決策。
前期準備
競賽程式碼附帶了一個指令碼,用於在一個檔案中執行三個模型。我修改了指令碼以評估整個惡意軟體目錄,並使用altair新增了一個有趣的視覺化記分板:
全球“黑客大賽”冠軍霸氣講述:我是如何讓50個檔案一起騙過AI安防系統的?

原始惡意軟體檔案的初始掃描。

表情符號骷髏代表模型檢測到惡意軟體,而笑臉則代表一次躲避。有趣的是,49號檔案本身就躲過了MalConv,所以我們免費得到1分。
計劃
棘手的部分是,找到同時影響三個模型的有效操作,或者至少影響一個模型,而不挑戰其他模型。我決定專注於有望同時影響三個模型的攻擊。
附加資料(Overlay)
如上所述,PE檔案可以附加任意內容。這些額外的位元組被稱為Overlay,當Windows執行檔案時,它們不會被載入到記憶體中。因此,在這裡新增位元組不會改變惡意軟體的功能。
冗餘空間(Slack Space)
除了Overlay之外,每個section的末尾還有空間來新增額外的位元組。PE section需要與2的冪次方的記憶體空間對齊。當實際內容沒有填滿整個空間時,該section將被Slack Space填充。這部分記憶體不會被可執行檔案訪問,所以我們也可以自由地改變它。
新的section
我們不僅可以向現有section新增位元組,也可以建立新的section。新的section不會破壞檔案的功能,因為現有程式碼沒有引用它們。這給了我們足夠的空間來新增任何我們想要的任何內容。
重點關注的特徵
因為MalConv模型將所有內容都視為位元組(不考慮上下文),所以,我們只需要專注於它們歸因良性檔案的模式,以壓倒它們的決定。然而,Ember特徵的結構要求我們仔細思考可能會阻礙它的細節。
我們可以操作的最明顯的特徵是位元組直方圖和位元組熵。位元組直方圖只計算檔案中每個位元組值的歸一化頻率。因為我們可以新增包含任何內容的section,所以可以很簡單將位元組分佈強制改為按任何目標的分佈。
我們也可以很好地控制Section Info特徵。我們可以利用slack space來改變section的熵。我們還可以更改section的名稱,使得我們在Ember的決策樹中可以刪除不同的分支。
最後,處理字串特徵也非常容易。同樣也是因為我們可以新增包含任何內容的新section,所以我們可以自由更改字串的統計資料。
開始攻擊!
我的計劃是從簡單開始並根據需要增加複雜性。增加新的section似乎是最有希望的攻擊途徑,因為它使我們能夠對Ember的功能以及檔案的原始位元組進行更大的更改。
我在每個部分新增之後重建了PE,以便lief為我處理所有的定址,也可以手動分配地址。
作為一個實驗,我在每個檔案中新增了一個帶有100000個常量位元組的新部分,並在迭代常量(0-255)時監視逃逸率。幾個不同的值已成功,但值169(0xA9)導致最大的逃避:
全球“黑客大賽”冠軍霸氣講述:我是如何讓50個檔案一起騙過AI安防系統的?

通過向每個檔案新增一個填充100,0000xA9的部分來成功逃避。

這種簡單的攻擊破壞了兩種神經網路檢測模型。如果我們沒有弄清楚非負模型中的bug,那麼這個結果應該會讓我們非常驚訝。照理說,單調分類器不應受這種簡單新增的影響。多虧了這個bug…
Ember很好地防禦這種樸素的攻擊。我必須想出一個更聰明的方法來改變它的分數。
加料
接下來,我去了微軟的下載頁面並抓取了一份隨機的良性的可執行檔案。我用模型檢測了檔案,以確認它的評分非常低。我的計劃是模仿這個檔案的功能,希望能夠避免對Ember的躲避。
我在檔案上執行了命令列實用程式字串。該實用程式從二進位制檔案中解析出所有可列印的字串。我發現了大量的字串似乎包含微軟的終端使用者許可協議(EULA)。我抓住這部分並將其儲存到文字檔案中。
顯然,一些最常見的Windows PE檔案碰巧是由微軟製作的。因此,在訓練惡意軟體分類器時,訓練集可能有一堆標記為良性的Microsoft檔案。我的想法是通過將我下載的檔案中的內容新增到我們的惡意軟體中來利用這種可能性。Microsoft EULA之類的東西可能出現在許多良性檔案中。這應該使字串統計結果,位元組分佈和資訊熵更像是良性檔案。
我使用此攻擊為每個檔案新增了75個新部分(比賽有一個檔案大小限制,我必須保持數量不高)。結果顯示非常好
全球“黑客大賽”冠軍霸氣講述:我是如何讓50個檔案一起騙過AI安防系統的?
Evasion是由“字串攻擊”和“常規攻擊”組合而成的。
最後一擊
還剩幾個檔案沒有逃過檢測。
經過進一步分析,我發現其中一些檔案被打包,但是我的操作搞亂了他們的拆包程式,因此破壞了一些功能。
更糟糕的是,至少有一個檔案似乎還有特定的程式碼來檢測自己是否被操作過:
全球“黑客大賽”冠軍霸氣講述:我是如何讓50個檔案一起騙過AI安防系統的?

這個檔案有程式碼檢測自己是否被動過

我的第一個想法是在偵錯程式中開啟檔案並修補程式集指令檢查修改。不幸的是,該檔案還具有反除錯程式碼,基本的“反反除錯程式”無法繞過。
全球“黑客大賽”冠軍霸氣講述:我是如何讓50個檔案一起騙過AI安防系統的?

這個檔案也有反除蟲機制

感覺我就像掉進了危險的深坑,所以我決定退一步重新思考。
天無絕人之路,我發現防篡改機制只是檢查載入到記憶體中的PE部分。所以雖然我無法新增新的部分,但我仍然可以操作疊加層!
我已經發現我的字串攻擊不夠強大,無法欺騙這些檔案。我需要一種不同的方法來確定應該將哪些內容新增到疊加層以逃過檢測。簡單就是王道,所以我編寫了以下程式碼來系統地嘗試每個位元組值的行,並將它們新增到檔案中,如果它們降低了Ember的分數,那麼就繼續,直到檔案成功躲避或變得太大。
我將Ember替換為其他兩個模型,並使用相同的方法新增所需的位元組以避開這些模型。同樣,因為我在疊加層中新增了位元組,然後打包,這樣,功能或防篡改檢查都沒有受到影響!我回去對所有檔案進行了這次攻擊,發現它能夠很好地躲避檢測。
全球“黑客大賽”冠軍霸氣講述:我是如何讓50個檔案一起騙過AI安防系統的?
滿分!全部拿下!
結論
把這些惡意軟體都偽裝起來並不容易。但“幸運”的是,所有模型都存在漏洞,而且可以被利用。如果非負MalConv模型真的實施成功,我可能就無法獲得滿分。
找到一組可以區分良性和惡意檔案的功能,同時在對抗性威脅模型下也相對安全,這可能非常具有挑戰性。一個有目共睹的事實是,小細節真的很重要。
最後,希望這些安防軟體也能夠從我的攻擊中吸取教訓,再接再厲,下次別再騙!
相關報導:
https://towardsdatascience.com/evading-machine-learning-malware-classifiers-ce52dabdb713

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31562039/viewspace-2658401/,如需轉載,請註明出處,否則將追究法律責任。

相關文章