一種專門偵測惡意程式變種的機器學習模型

惡意程式要能發揮作用,首先要能躲過資安防禦的偵測成功滲透到系統內部。它要能包裝並偽裝自己,讓自己看起來像一般正常的程式,等到通過資安關卡之後,再顯現出本性。針對不易偵測的惡意程式,或是樣本不足,無法提供有效分析的惡意程式,我們提出了一種採用對抗自動編碼器 (adversarial autoencoder) 並搭配語意雜湊碼 (semantic hashing) 的機器學習(Machine learning,ML)模型來加以偵測。趨勢科技與澳洲聯邦大學 (Federation University Australia) 研究人員共同發表過一篇名為「生成式惡意程式擴散偵測」(Generative Malware Outbreak Detection) 的研究論文。

透視加密編碼的惡意程式

惡意程式作者知道,惡意程式必須不被發現才有機會入侵裝置或網路。所以,他們會運用各種不同工具和技巧來躲避偵測,此外,更會用盡方法來提高惡意程式的偵測難度,包括躲避沙盒模擬分析、反解譯、反除錯、躲避防毒軟體以及變形或多形等技巧。例如先前曾出現在針對性攻擊與網路間諜行動當中的 RETADUP 蠕蟲,後來也演化出變形能力。其新的變種是以 AutoHotKey 程式碼來撰寫,且與其先前的 AutoIt 變種一樣,都是用來發動虛擬加密貨幣挖礦攻擊。

惡意程式一旦經過加密編碼,一般傳統的防毒系統就很難加以偵測。我們曾在一篇文章當中指出,加密編碼的問題可藉由發掘同一惡意程式家族當中不論任何變種都大致維持一致的特徵來加以偵測,例如程式指令序列。本文將延續先前那篇文章,更進一步深入探討對抗自動編碼器如何處理程式指令序列,以及語意雜湊碼在我們提出的模型當中有何用途。

更深層的學習:對抗自動編碼器和語意雜湊碼

我們採用的機器學習模型 (我們稱之為 aae-sh) 是由兩個獨立的模組所組成。第一個模組使用對抗自動編碼器來擷取程式指令序列的潛在表示 (latent representation),如此可用來對抗惡意程式的加密編碼。第二個模組負責產生前述潛在表示的類別編號 (class number),此編號是經由 HDBSCAN 叢集演算法根據預先定義的門檻值所計算出來。

對抗自動編碼器

針對僅有少數樣本的惡意程式擴散偵測,對抗自動編碼器的效果顯著,因為即使只有少數的訓練樣本,它還是可以產生分布平順的鄰近樣本。事實上,在我們提出的機器學習模型中,每個惡意程式類別僅使用了單一惡意程式樣本來搭配對抗自動編碼器進行訓練。

該研究中,惡意程式擴散偵測的核心架構是來自於原始的對抗自動編碼器。

FIGURE 1

圖 1:惡意程式擴散偵測所使用的對抗自動編碼器架構。

註:輸入 x 與重構後的輸入 p(x) 都維持著指令序列的特徵。

對抗自動編碼器結合了自動編碼器與生成對抗網路 (Generative Adversarial Network,簡稱 GAN)。GAN 負責利用一個緊密競爭迴圈來訓練生成器 (generator) 與鑑別器 (discriminator) 。自動編碼器要在此模型中運作,必須具備以下屬性:

  • 其堆疊加權 (stacked weights) 並須對稱且由編碼器與解碼器共有。
  • 必須具備 GAN 的產生器屬性。由於編碼器具備雙重功能,因此它必須具備生成器的訓練技巧,同時又維持其自動編碼器的屬性。

即使應用程式內的函式變換位置也能加以偵測的能力,對於偵測惡意程式擴散來說,是一項有利的特性。而一個堆疊卷積自動編碼器 (stacked convolutional autoencoder),其目標是要運用該架構的平移不變性 (translation invariant)[1] 來讓機器學習模型自行找出程式碼序列,不論程式碼如何改變位置或整合變形[2]。根據 Alireza Makhzani 等人的研究指出,對抗網路與自動編碼器兩者皆需採用隨機梯度下降法 (stochastic gradient descent) 彼此進行兩階段 (重構階段與正規化階段) 的相互訓練,之後再讓它們跑個別小批次 (mini-batch) 樣本。

網路架構當中有一些超參數 (hyperparameter) 可以調校,包括多樣化惡意程式叢集應該偵測到什麼程度,或是批次的大小。要在這模型下訓練惡意程式樣本,GAN 生成器的批次正規化 (batch normalization) 有其必要,這有助於針對每一個叢集生成一個一致的潛在表示。要確實達成這項目標,我們在重構與正規化階段皆使用Adam optimizer 來進行隨機梯度下降法最佳化。此外,我們也使用 RMSProp 來進行共識最佳化 (consensus optimization),以減少標準對抗自動編碼器訓練所造成的不穩定性 (RMSProp 是一種深度神經網路最佳化演算法),最後再找出模型的超參數。

訓練一旦完成,即可擷取編碼器的輸出當成潛在向量以做為輸入樣本,然後利用此輸入樣本來產生語意雜湊碼。

語意雜湊碼

語意雜湊碼的作用是要將對抗自動編碼器產生的潛在表示轉換成一個類別編號,作為預判用途。要計算類別編號,以實數表示的潛在向量需先使用訓練樣本的位元平均值 (bitwise mean value) 進行二元化 (binarize)。接著,再計算兩個潛在向量的漢明距離 (Hamming Distance,代表兩個相同長度的字串中,有幾個對應位置上的字符不同)[3]。最後再將測試樣本分派到與其距離最近的訓練樣本所屬類別。

分析:Flashback 變種

利用這個 aae-sh 模型,我們就能準確發掘同一叢集內主要特徵質量 (feature mass) 相同的所有惡意程式變種,即使是經過變形或修改亦然。如果對 aae-sh 模型可偵測的家族進行視覺分析,可發現同一家族內的變種即使有些差異,仍然可發現一些類似的指令序列。我們發現,某些惡意程式家族 (如 Flashback) 即使是不同的變種也會有一些重複使用的程式碼,這樣 aae-sh 模型就能有效加以偵測。該研究中,我們偵測到一個含有許多 Flashback 變種的叢集 (第 49 號叢集)。請注意,aae-sh 也有辦法偵測長度不同的樣本,只要有樣本當中含有相似的指令序列即可。

FIGURE 2

圖 2:將 aae-sh 模型在第 49 號叢集中發現的惡意程式樣本指令序列視覺化後所呈現的圖形。

註:X 軸代表特徵,Y 軸代表樣本編號。

此外,由於 aae-sh 能根據指令序列的樣貌來偵測惡意程式變種,我們也因此發現了 447 個原本並未歸類在 Flashback 家族的變種,因為 VirusTotal 的分析師是根據其自己的經驗分析來歸類。

FIGURE 3

圖 3:圖 2 中的第 49 號叢集中樣本根據 VirusTotal 的歸類方式。

我們的研究也指出,aae-sh 模型除了能夠準確偵測惡意程式樣本之外,在良性樣本判斷方面的準確率也高達 91%,相形之下,傳統分類模型則會 100% 發生誤判。

請參閱我們的研究論文「生成式惡意程式擴散偵測」(Generative Malware Outbreak Detection) 來了解有關我們機器學習模型在有限樣本條件下偵測惡意程式擴散的方法、結果與分析。

[1] Jonathan Masci, Ueli Meier, Dan Cireşan, Jürgen Schmidhuber.“Stacked Convolutional Auto-encoders for Hierarchical Feature

Extraction.”In Artificial Neural Networks and Machine LearningICANN 2011, pages 52-59, September 2014.

[2] Ilsun You and Kangbin Yim.“Malware Obfuscation Techniques: A Brief Survey.”In 2010 International Conference on Broadband, Wireless Computing, Communication and Application, pages 297-300, 4 November 2010.

[3] Ruslan Salakhutdinov and Geoffrey Hinton.“Semantic Hashing.”In International Journal of Approximate Reasoning, pages 969-978, 7 July, 2009.

原文出處:A Machine Learning Model to Detect Malware Variants