杜建斌 陳傲晗


摘要:應對惡意軟件帶來的威脅需要準確的檢測和分類技術。傳統的檢測策略如簽名掃描,依賴于對惡意軟件進行手動分析以提取相關特征,這是一項工作繁重且需要專業知識的任務。函數調用圖包括一組程序函數及其過程間調用,提供了豐富的信息源,可以用于對惡意軟件進行分類,而無須進行繁重的特征提取步驟,這是傳統技術的一大優勢。在這項研究中,我們將惡意軟件分類視為圖分類問題。基于局部度量特征,我們訓練了一系列圖神經網絡架構來生成嵌入向量,然后進行分類。我們發現,我們的最佳GNN模型在分類上表現優于以往類似研究。
關鍵詞:圖神經網絡;函數調用圖;局部度量特征;最佳GNN模型;惡意軟件分類
引言
在移動設備領域,Android惡意軟件已逐漸成為一個廣泛的問題,對系統安全造成了嚴重威脅。根據2021年的數據,每天都有近25000個新的惡意軟件樣本被發現,其中大約350萬個是針對Android系統的。雖然Android作為一個開源平臺,為開發者提供了很大的應用開發自由度,但這也為惡意開發者創造了便利,制作并分發有害應用。因此,有效地檢測和分類惡意軟件對于確保Android用戶安全顯得尤為關鍵。先前的研究表明,很多新出現的惡意應用實際上是已知惡意軟件的變種,因此它們在行為上有許多相似之處。例如,GinMaster和DroidKungFu兩款惡意軟件均可能盜取并傳輸用戶機密信息。基于這些惡意軟件的特征,我們可以對它們進行分類。
雖然基于簽名的惡意軟件檢測方法在某些場合中運行得相對迅速且有效,但它們在應對0-day惡意軟件時可能會束手無策,相反,基于機器學習的技術有潛力更好地檢測和分類新型惡意軟件。從另一方面看,靜態惡意軟件分析可能受到代碼混淆技術的干擾,而動態分析在這方面表現得更為穩健,盡管需要更多的資源和時間進行分析。
與先前的研究相似,許多方法都使用了靜態分析來提取惡意軟件的特征,如用戶權限、API調用等,并采用機器學習對其進行分類,但這些機器學習算法在模擬函數之間的復雜交互上可能有所不足。與此相反,基于圖的方法能夠更自然地捕獲這些交互,并能學習特征之間的關系。此外,基于圖的方法無須深入代碼分析即可迅速提取特征,因此與傳統方法相比具有明顯優勢。本研究的核心目標是深入研究基于圖的惡意軟件分類方法,這些方法主要依賴從軟件源代碼中提取的圖結構數據。
1. 背景和相關工作
1.1 傳統的基于學習的分類方法
傳統的基于學習的分類方法主要是利用特征數來訓練貝葉斯分類器,用以檢測惡意軟件[1]。另外,2014年提出Drebin數據集的論文同時也詳述了如何從Android的apk文件中提取特點,例如權限和API調用,并隨后采用支持向量機(SVM)對其分類。接下來,一種被稱為“顯著權限識別”(SIGPID)的方法被提出,該方法通過三層篩選過程對惡意應用的權限數據進行深度挖掘,識別出22個關鍵權限,并以此為特征來訓練SVM分類器。
隨著深度學習的興起,有研究采用了將權限序列轉化為詞嵌入,并作為長短時記憶網絡(LSTM)模型的輸入特征。同樣地,基于API調用的特征是根據其出現頻率選取的,并將它們映射到一個圖像類結構,再采用卷積神經網絡(CNN)進行分類[2]。研究結果突顯API調用和權限作為Android惡意軟件檢測的有力特征,但如何選擇這些特征最好是基于具體的數據集來定。
操作碼序列的n-gram特征在惡意軟件檢測方面也得到了有效應用,有的研究則采用了將原始操作碼序列編碼為獨熱向量,并使用CNN模型對其分類。值得注意的是,依賴操作碼特征的技術可能受到某些基礎混淆技巧的干擾,因為操作碼序列可以直接被修改。另一種流行策略是將文件轉化為灰度圖形,利用CNN在惡意軟件檢測和分類上的能力。關于惡意軟件分類的其他探索還包括一系列創新方法,如有研究者從代碼中提取了基于組件間通信的模式。
1.2 基于圖學習的分類方法
傳統學習技術依賴于特征和分類器的種類,而基于圖的學習則重視圖結構的種類以及節點特征的嵌入策略。例如,有的論文涉及API調用圖的應用。具體地說,應用程序和API之間的關系被以結構化的異構信息網絡(HIN)呈現,API間的關系則通過元路徑來映射[3]。研究者進一步采用基于元路徑的方法來表述應用程序和API的語義關聯,并通過多核學習來匯集相似度。異構圖使用多種類型的關系來連接不同的節點。
對API調用序列圖進行了多重嵌入表示,這些表示被成功用于惡意軟件的檢測和分類。此研究采用遞歸神經網絡來解碼深層次的語義信息,并通過一種圖卷積網絡(GCN)的變種來提取和建模高級的圖形語義信息[4]。研究者基于API序列使用skip-gram模型來提取圖的節點特征,這些特征構成了一個異構圖,這個圖基于應用程序-API和API-API的關系。另一種在惡意軟件分析中常見的圖類型是基于操作碼的函數調用圖。操作碼序列被視作文本特征,并利用傳統機器學習方法(如隨機森林和SVM)進行分類。相對的,有的研究者選擇基于LSTM的神經網絡進行分類,創建了被稱為co-opcode圖的創新圖結構,通過提取特定的操作碼模式構建,并采用隱馬爾可夫模型(HMM)進行分類[5]。
就像處理文本特征那樣,操作碼級的圖也可以被處理,而不僅是作為圖形數據。例如,有的研究者使用動態生成的網絡流圖創建了一個名為Network Flow Graph Neural Network(NF-GNN)的新模型。這個模型使用基于邊特征的圖神經網絡(GNN)進行分類。上述圖的方法大都是靜態的,意味著它們可能并不適用于未見過的0-day惡意軟件的檢測。我們的研究目標之一是分析基于圖的歸納性模型,即那些能夠預測0-day惡意軟件的模型。我們計劃構建基于控制流圖(CFG)的模型。CFG中,節點代表程序語句,而邊則代表程序的流向。基于CFG的內部映射流程極可能適合于0-day惡意軟件的分類,因為它僅僅依賴于APK代碼的特征。深度圖卷積神經網絡(DGCNN)被用來嵌入CFG的結構信息,從而實現惡意軟件的高效分類。
與CFG相對應的是函數調用圖(FCG),節點表示子程序,而邊表示子程序間的調用關系。研究者通過對惡意軟件進行靜態分析來獲取操作碼級別的函數調用圖。而使用自然語言處理(NLP)啟發的圖嵌入方法將Android應用的圖結構轉為向量。在另一篇相關論文中,研究者介紹了MalNet數據集一個從apk文件中提取了FCG數據的大型Android惡意軟件數據集。他們考慮了多種圖表示學習方法,如GraphSAGE和圖同構網絡(GIN),并發現FEATHER和GIN提供了最好的分類性能。同樣使用MalNet數據集,作者利用節點特征,如頁面排名和度數,使用Jumping Knowledge GNNs (JK-GNN),并發現JK-GraphSAGE表現最出色。
2. 方法
2.1 節點特征提取
在本文的模型中,使用LocalDegree Profile方法來初始化圖中節點的特征。LDP的計算比較簡單,僅依賴某個節點及其一階鄰居。對于一個圖,令表示節點的度,那么的LDP計算為
式中,表示均值,表示標準差。直觀上,LDP反映了G中某一節點和其一階鄰居的統計信息。對于本文的研究目標來說,LDP所帶來的一個潛在優勢是其他深度學習技術也能夠利用其特征進行訓練。
2.2 圖神經網絡
2.2.1 GraphConvolutionalNetwork
GraphConvolutionalNetwork(GCN)通過不斷聚合多層鄰居信息來完成節點特征的更新。具體地,令為圖G的鄰接矩陣,其中且當且僅當存在邊,否則為圖G的增加了節點自環的鄰接矩陣。那么如果GCN有L層,那么從層到層的計算可以表示為
式中,表示第層的輸入(即為模型原始輸入),每個節點使用D維向量表示特征。為圖G中節點的度矩陣。為可訓練參數,為非線性激活函數,例如。
2.2.2 GraphSage網絡
GraphSage發表于[Inductive representation learning on large graphs]。與GCN不同,GraphSAGE隨機抽樣了一個固定大小的節點鄰居子集。這有助于限制算法的空間和時間復雜度,僅節點的局部鄰域相關的信息被收集并用于計算和更新節點嵌入。在每次迭代中,首先對節點的鄰域進行采樣,然后將來自采樣節點的信息,按照某種計算方法,聚合到該節點中。具體地,圖G中的節點的一階鄰居表示為。對于節點,第層到層(+1)的計算可以表示為
式中,和分別表示節點和其一階鄰居的特征向量,Agg (·)即為某種聚合規則,比如,使用Agg (·)=MEAN (·)則表示對節點和其一階鄰居的特征向量做平均聚合。Comb (·)是表示將聚合出來的特征向量與進行組合,并通過非線性激活函數進行最終的計算。
3. 實驗
3.1 數據集
本文使用MalNet-Tiny數據集,該數據集包含了5000個從Android APK文件中提取的函數調用圖。MalNet-Tiny數據集是類別平衡的,每個類別都有1000個樣本。我們在表1中顯示了這些圖的一些基本特征。
3.2 基線模型與結果
多層感知機器(multi-layer perceptron,MLP):本文使MLP作為基準,以便將其與深度學習模型進行比較。在這種情況下,我們使用了LDP特征進行分類。從表2中可以看出,我們在訓練50個epochs、使用5層、且dropout率設置為0.5的情況下獲得了0.8054的最佳準確率結果。
WL-Kernel:本文使用WL-Kernel作為基線模型,以便將其與傳統機器學習模型進行比較。另外,我們額外使用節點度和PageRank值作為特征向量,以生成WL-Kernel方法所需的特征。然后,使用WL-Kernel方法計算一個核矩陣并應用隨機森林進行分類。該模型使用表中提到的超參數進行調優,最終獲得的最佳準確率為0.7053。
3.3 GNN結果
在本節中,我們對第3.2節中介紹的每個GNN模型(GCN與GraphSage)進行了實驗。每個模型的輸入圖形是由Pytorch中的GraphDataLoader生成的批次圖,且都進行了200個epoch的訓練,每個卷積層都使用PyTorch Torch Geometric庫中的卷積算子計算新的節點表示,并且使用了Adam優化器。每個模型都使用下表中列出的超參數進行調優。
從表3中可以看出,GCN在所有被比較的模型中表現最佳,準確率達到了0.9582。相比之下,GraphSAGE的準確率為0.8913,在分類準確率上比GCN低4%左右。聯系4.2中的結果可以看到,GraphSage模型在惡意軟件分類問題上,仍強于MLP代表的非基于圖的深度學習模型和WL-Kernel代表的傳統的機器學習模型。
結論
在研究中,我們使用基于圖的學習方法對MalNet-Tiny數據集中的五種不同類型的Android惡意軟件進行了分類。使用局部度量特征(LDP)對節點特征進行編碼,并在這些特征上訓練了多種基于GNN的模型。具體來說,我們嘗試了GCN、GraphSAGE。作為對比,在同樣的數據集上還進行了多層感知機和WL-Kernel方法的實驗,實驗結果顯示,基于圖的深度學習方法在惡意軟件分類準確率上強于非基于圖的深度學習和傳統的機器學習算法。最后,本研究考慮的模型僅基于圖結構,如果將這些基于圖的模型與更傳統的特征相結合(人工定制的特征),可能會產生比這里考慮的模型或僅基于更傳統特征的學習模型更強大的模型。
參考文獻:
[1]郎大鵬,丁巍,姜昊辰,等.基于多特征融合的惡意代碼分類算法[J].計算機應用,2019,39(8):2333-2338.
[2]吳月明,齊蒙,鄒德清,等.圖卷積網絡的抗混淆安卓惡意軟件檢測[J].軟件學報,2023,34(6):2526-2542.
[3]岳子巍,方勇,張磊.基于圖注意力網絡的安卓惡意軟件檢測[J].四川大學學報(自然科學版),2022,59(5):88-95.
[4]鄒長寬,田小平,張曉燕等.基于GraphSage節點度重要性聚合的網絡節點分類研究[J].科學技術與工程,2022,22(32): 14306-14312.
[5]徐立祥,葛偉,陳恩紅,等.基于圖核同構網絡的圖分類方法[EB/OL].(2023-7-20)[2023-8-20].http://kns.cnki.net/kcms/detail/11.1777.TP.20230719.1829.006.html.
作者簡介:杜建斌,本科,電子信息工程,研究方向:計算機網絡安全;陳傲晗,本科,研究方向:物聯網網絡安全。