黑客大佬:我是如何让50个文件一起骗过AI安防系统的?
全世界只有3.14 %?的人關注了
爆炸吧知識
轉自:大數據文摘
編譯:邢暢、張睿毅、錢天培
你有沒有想過當黑客呢?
破解手機密碼,黑入公司系統,甚至…控制全球電腦。
打住打住!違法犯罪的念頭顯然不能有。再退一步講,咱也不一定有這本事。
尤其是在今天,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的攻擊在這里也會起作用。
論文:
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信息(名稱、大小、熵、屬性)
導入表庫及入口信息
導出函數
一般文件信息(各種文件的大小和數量)
文件頭信息(機器碼、結構、鏈接器、版本號)
字符串信息(文件中字符串的各種統計信息)
數據目錄
數值特征可以直接使用,其他特征(如p的名稱)可用哈希轉換為數值向量。乍一看,Ember似乎難以愚弄,它解析的許多特征都與文件結構,或者與我們無法更改的特征相關。我們必須在維持原功能的同時還要避免被檢測到!
Ember的漏洞是攻擊者可以任意控制某些特征。lightgbm模型在集成樹的多個位置使用這些特征。我們可以利用模型的復雜性,通過操縱特征來推動導致逃避的決策。
前期準備
競賽代碼附帶了一個腳本,用于在一個文件中運行三個模型。我修改了腳本以評估整個惡意軟件目錄,并使用altair添加了一個有趣的可視化記分板:
原始惡意軟件文件的初始掃描。
表情符號骷髏代表模型檢測到惡意軟件,而笑臉則代表一次躲避。有趣的是,49號文件本身就躲過了MalConv,所以我們免費得到1分。
計劃
棘手的部分是,找到同時影響三個模型的有效操作,或者至少影響一個模型,而不挑戰其他模型。我決定專注于有望同時影響三個模型的攻擊。
附加數據(Overlay)
如上所述,PE文件可以附加任意內容。這些額外的字節被稱為Overlay,當Windows執行文件時,它們不會被加載到內存中。因此,在這里添加字節不會改變惡意軟件的功能。
冗余空間(Slack Space)
除了Overlay之外,每個p的末尾還有空間來添加額外的字節。PE p需要與2的冪次方的內存空間對齊。當實際內容沒有填滿整個空間時,該p將被Slack Space填充。這部分內存不會被可執行文件訪問,所以我們也可以自由地改變它。
新的p
我們不僅可以向現有p添加字節,也可以創建新的p。新的p不會破壞文件的功能,因為現有代碼沒有引用它們。這給了我們足夠的空間來添加任何我們想要的任何內容。
重點關注的特征
因為MalConv模型將所有內容都視為字節(不考慮上下文),所以,我們只需要專注于它們歸因良性文件的模式,以壓倒它們的決定。然而,Ember特征的結構要求我們仔細思考可能會阻礙它的細節。
我們可以操作的最明顯的特征是字節直方圖和字節熵。字節直方圖只計算文件中每個字節值的歸一化頻率。因為我們可以添加包含任何內容的p,所以可以很簡單將字節分布強制改為按任何目標的分布。
我們也可以很好地控制Section Info特征。我們可以利用slack space來改變p的熵。我們還可以更改p的名稱,使得我們在Ember的決策樹中可以刪除不同的分支。
最后,處理字符串特征也非常容易。同樣也是因為我們可以添加包含任何內容的新p,所以我們可以自由更改字符串的統計數據。
開始攻擊!
我的計劃是從簡單開始并根據需要增加復雜性。增加新的p似乎是最有希望的攻擊途徑,因為它使我們能夠對Ember的功能以及文件的原始字節進行更大的更改。
我在每個部分添加之后重建了PE,以便lief為我處理所有的尋址,也可以手動分配地址。
作為一個實驗,我在每個文件中添加了一個帶有100000個常量字節的新部分,并在迭代常量(0-255)時監視逃逸率。幾個不同的值已成功,但值169(0xA9)導致最大的逃避:
通過向每個文件添加一個填充100,0000xA9的部分來成功逃避。
這種簡單的攻擊破壞了兩種神經網絡檢測模型。如果我們沒有弄清楚非負模型中的bug,那么這個結果應該會讓我們非常驚訝。照理說,單調分類器不應受這種簡單添加的影響。多虧了這個bug…
Ember很好地防御這種樸素的攻擊。我必須想出一個更聰明的方法來改變它的分數。
加料
接下來,我去了微軟的下載頁面并抓取了一份隨機的良性的可執行文件。我用模型檢測了文件,以確認它的評分非常低。我的計劃是模仿這個文件的功能,希望能夠避免對Ember的躲避。
我在文件上運行了命令行實用程序字符串。該實用程序從二進制文件中解析出所有可打印的字符串。我發現了大量的字符串似乎包含微軟的最終用戶許可協議(EULA)。我抓住這部分并將其保存到文本文件中。
顯然,一些最常見的Windows PE文件碰巧是由微軟制作的。因此,在訓練惡意軟件分類器時,訓練集可能有一堆標記為良性的Microsoft文件。我的想法是通過將我下載的文件中的內容添加到我們的惡意軟件中來利用這種可能性。Microsoft EULA之類的東西可能出現在許多良性文件中。這應該使字符串統計結果,字節分布和信息熵更像是良性文件。
我使用此攻擊為每個文件添加了75個新部分(比賽有一個文件大小限制,我必須保持數量不高)。結果顯示非常好:
Evasion是由“字符串攻擊”和“常規攻擊”組合而成的。
最后一擊
還剩幾個文件沒有逃過檢測。
經過進一步分析,我發現其中一些文件被打包,但是我的操作搞亂了他們的拆包程序,因此破壞了一些功能。
更糟糕的是,至少有一個文件似乎還有特定的代碼來檢測自己是否被操作過:
這個文件有代碼檢測自己是否被動過
我的第一個想法是在調試器中打開文件并修補程序集指令檢查修改。不幸的是,該文件還具有反調試代碼,基本的“反反調試程序”無法繞過。
這個文件也有反除蟲機制
感覺我就像掉進了危險的深坑,所以我決定退一步重新思考。
天無絕人之路,我發現防篡改機制只是檢查加載到內存中的PE部分。所以雖然我無法添加新的部分,但我仍然可以操作疊加層!
我已經發現我的字符串攻擊不夠強大,無法欺騙這些文件。我需要一種不同的方法來確定應該將哪些內容添加到疊加層以逃過檢測。簡單就是王道,所以我編寫了以下代碼來系統地嘗試每個字節值的行,并將它們添加到文件中,如果它們降低了Ember的分數,那么就繼續,直到文件成功躲避或變得太大。
我將Ember替換為其他兩個模型,并使用相同的方法添加所需的字節以避開這些模型。同樣,因為我在疊加層中添加了字節,然后打包,這樣,功能或防篡改檢查都沒有受到影響!我回去對所有文件進行了這次攻擊,發現它能夠很好地躲避檢測。
滿分!全部拿下!
結論
把這些惡意軟件都偽裝起來并不容易。但“幸運”的是,所有模型都存在漏洞,而且可以被利用。如果非負MalConv模型真的實施成功,我可能就無法獲得滿分。
找到一組可以區分良性和惡意文件的功能,同時在對抗性威脅模型下也相對安全,這可能非常具有挑戰性。一個有目共睹的事實是,小細節真的很重要。
最后,希望這些安防軟件也能夠從我的攻擊中吸取教訓,再接再厲,下次別再騙!
相關報道:
https://towardsdatascience.com/evading-machine-learning-malware-classifiers-ce52dabdb713
點「在看」的人都變好看了哦!
總結
以上是生活随笔為你收集整理的黑客大佬:我是如何让50个文件一起骗过AI安防系统的?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这几道挑战极限的烧脑题,烧脑到爽爽爽爽爽
- 下一篇: 智能卡门禁管理系统_汉中停车场智能门禁系