工作來源

ASIA CCS 2022

工作背景

惡意軟件變種間在代碼重用方面的復雜關系為惡意軟件分析帶來了挑戰,包括標簽、分類、家族與作者歸因。反病毒引擎給出的標簽通常不一致且粒度較粗,無法捕獲 IoT 惡意軟件間的代碼重用。與此同時,舊的惡意軟件通常會在新惡意軟件出現時退場。機器學習模型對這種變化稱為概念漂移,使用舊數據訓練的模型在處理前所未見的新樣本時挑戰極大。為了構建有效且穩健的分類器,必須能夠檢測同一惡意軟件家族中漂移的 IoT 變種,并解釋漂移的成因。

檢查 Mirai 家族樣本在一年內的類內進化,如下所示。由于概念漂移,分類效果越來越差,一年后已經不足 50%。傳統意義上解決概念漂移的方式,可能并不適用于安全領域。

樣本數量與 IoT 文件普遍缺乏復雜的混淆,使得基于代碼的分析成為可能。識別不斷發展的惡意軟件的變種幾乎可以等同于二進制文件相似,只是在 IoT 領域內有一些挑戰:

  • 針對不同體系結構的二進制文件,即使源代碼相同,編譯出來指令也不相同。
  • 函數級代碼相似被證實無法解決代碼相似判斷問題
  • 分析工具對函數的識別不可靠,但指令與基本塊的識別仍然有效

工作準備

收集了從 2018 年到 2021 年超過 90000 個 IoT 惡意樣本,過濾掉不可執行文件以及損壞的文件還剩下 74429 個。通過 VirusTotal 的分析報告,使用 AVClass 對其進行處理聚合家族歸屬。如下所示:

34% 的樣本未能通過 AVClass 給出歸屬,其中 2664 個樣本沒有引擎給出與已知家族有關的標簽、24271 個樣本就沒有對應的分析報告。

工作設計

整體方式如下所示:

特征提取與預處理

利用 IDA Pro 進行處理:將指令當作單詞,將基本塊當作句子。既不完全去掉立即數,也不完全保留立即數。而是:

  • 區分跳轉/調用目標、字符串之與內存引用
  • 考慮 32 位寄存器的不同大小
  • 保持堆棧指針或基址指針完整,并通過保留指針表達式維護內存訪問信息

指令嵌入

采用 BERT 原始掩碼語言模型(MLM)對規范化后的匯編指令進行編碼,并且不使用 BERT 的下一句預測(NSP)任務。

對比學習

從傳入的未標記惡意軟件數據,轉換成特征向量并學習如何比較向量以識別相同家族的樣本。舊樣本序列的特征將在新樣本中得到保留,通過訓練對比編碼器將其投射到潛在空間的附近位置。這樣即使沒有明確的標簽,也可以確保接近相似。

語義代碼搜索引擎

評估跨體系結構代碼嵌入的質量,可以用于查找變種:

工作評估

使用 Silhouette 指數衡量一個對象與自身簇和其他簇相比的相似程度,計算方式為:

比較了六千個隨機選擇的樣本,對已識別的聚類總體來說十分優秀。

與開源的 CADE 進行比較,結果如下:

CADE 盡管在大多數情況下表現良好,但對 IoT 惡意軟件時表現不佳。這也是 CADE 自身的局限,因為其主要關注 A 類概念漂移。

一共確定了 44 個 Mirai 的變種與 11 個 Gafgyt 的變種。抽取 10000 個 Mirai 樣本與 3000 個 Gafgyt 樣本構建連接圖,如下所示:

較舊的 Mirai 變種具有更高的相似性,出現在密集與中心的區域。較新的 Mirai 變種相對分離且出現在更遠的邊緣區域。相比 Gafgyt 來說,Mirai 的連接更為緊密。在三個最密集的 Mirai 簇里,一共包含 7124 個樣本文件。研究人員詳細介紹了多個簇的情況,以顯示能夠以細粒度特征識別樣本間的相似與區別。但此處不加以一一說明,感興趣查看原文吧。

抽取 6 個變種(Omni、Apep、Yowai、Satori、Dark 與 Josho)的 587 個 Mirai 樣本,構建語義搜索引擎的數據集。基于前文提到的代碼嵌入,還使用 FAISS 與近似最近鄰。基于 4 種基線(Word2vec、Doc2vec、Code2vec 與 Bi-LSTM)比較變種情況,如下所示:

此外,還使用 16 個手動選擇的特征將基于基本塊的機器學習分類(SVM)進行比較:

使用的具體特征為:

跨架構的樣本也被正確分到了一起:

經過預處理后,Vocabulary 所受影響也更小。

工作思考

Mirai 作為一個大類,實際上早就已經泛化地超出了大家在傳統意義表述上的“家族”的概念。研究人員實際上是通過更細的分類方法,來把共用源代碼的 Mirai 進行細分,盡可能地劃分成研究人員披露分析報告時的更細的分類。該工作盡管樣本集不能開源,但工作代碼本身已經開源,感興趣的讀者可以自行查閱。

EVOLIoT
https://github.com/IoTMalw/EVOLIoT