劉留,尹顏朋,王玉偉,丁祝祥
(四川大學計算機學院,成都 610065)
Linux系統(tǒng)的開源特點使得其能快速發(fā)展,許多的不同的發(fā)行版出現(xiàn),越來越多的人也開始使用Linux系統(tǒng)滿足工作需要。隨著惡意代碼的快速增長,Linux平臺的安全性也在逐漸降低。
目前,有許多的惡意代碼檢測方法,這些方法可以分為靜態(tài)分析和動態(tài)分析兩類。靜態(tài)分析通過分析指令序列的二進制代碼來判斷可執(zhí)行文件是否是惡意的[1]。最基本的靜態(tài)分析方法是基于簽名的檢測方法,也是應用最廣泛的方法。簽名是一段能夠標識特定惡意軟件的字節(jié)序列。通過分析大量的惡意軟件,我們能夠創(chuàng)建一個簽名庫。依靠模式匹配,如果一個未知文件包含了簽名庫的一個簽名,則可將該文件標識為惡意軟件,這種方法對大多數(shù)惡意軟件有很好的識別效果。一般來說,基于簽名的方法可以檢測已知的惡意軟件,但不能檢測未知的惡意軟件或變種,因為沒有可用的簽名[2]。同時也存在很多的代碼混淆手段可以隱藏可執(zhí)行的惡意代碼,包括垃圾代碼插入、寄存器重命名、子程序重排、等價指令替換等[3]?;诨煜夹g,黑客可以方便地開發(fā)一個新的惡意軟件變種來繞過檢測[4]?;谛袨榈膼阂獯a檢測方法是普遍應用的動態(tài)分析方法。行為分析關注軟件執(zhí)行時的信息獲取。這些信息必須精確可靠,這意味著必須在一個仿真環(huán)境中運行程序[5]。然而惡意軟件可能僅在和用戶交互時才表現(xiàn)出惡意行為,或者在觸發(fā)特定事件時表現(xiàn)出惡意行為,如到達特定時間。通過分析、收集惡意軟件的行為模式,可以建立一個數(shù)據(jù)庫。在檢測階段,將未知軟件的行為模式與數(shù)據(jù)庫中的模式作比較即可以檢測惡意軟件。
近年來,機器學習和數(shù)據(jù)挖掘算法逐漸應用于惡意代碼檢測領域,取得了不錯的效果。為了解決以上問題,本文提出了一種基于軟件控制流圖特征的惡意代碼檢測方法。通過對軟件進行靜態(tài)分析得到匯編代碼,進而分析匯編代碼構建控制流圖。提取控制流圖的屬性作為特征向量,將這些特征向量送入機器學習算法進行訓練,得出分類器,使用分類器來檢測惡意軟件。
基本塊:一段有序指令序列,從第一條指令順序執(zhí)行到序列的最后一條指令。除了最后一條指令外,序列中的其他指令不會是分支或者跳轉指令[6]。
控制流圖:定義V={VI,V2,...,Vn}為代表基本塊的頂點集,E={brijl brij表示Vi到Vj的控制流}為指示基本塊之間的控制流的邊集,P={V,E}即可表示一個程序的控制流圖[7]。
ELF(Executable and Linkable Format):是一種用于二進制文件、可執(zhí)行文件、目標代碼、共享庫和核心轉儲格式文件,是Linux的主要可執(zhí)行文件格式。
控制流圖構建基于匯編代碼,因此要先對軟件進行反匯編。本文采用了Linux系統(tǒng)提供的反匯編工具“objdump”對軟件進行反匯編,“objdump-D”命令會反匯編ELF文件中所有的段。在得到的匯編代碼中,“text”段包含了程序運行所需的主要指令,“plt”段包含了程序所調用的庫函數(shù)信息,之后通過分析這兩個段的內容來構建控制流圖。遍歷“text”段中的匯編指令,將其劃分為不同的基本塊,即控制流圖的頂點;分析控制流指令來建立基本塊之間的聯(lián)系,即控制流圖的邊。邊無權重,且為有向邊,邊的方向表明了控制流轉移方向。
圖1 構建的控制流圖
對控制流圖中的各類信息進行指標化,是特征選擇的一種常用方法。我們通過統(tǒng)計方法建立了22個指標,每項指標都可以作為軟件的一個特征,由此可以產生基于控制流圖的軟件特征集。表1描述了圖特征的定義和說明。
表1 基于圖指標的軟件特征描述
實驗數(shù)據(jù)集包含了202個惡意軟件樣本和305個良性樣本。良性軟件樣本取自Linux系統(tǒng)“/bin”、“/sbin”、“/usr/bin”等目錄下的 ELF文件,惡意軟件樣本通過在Linux系統(tǒng)上編譯源代碼得來,源代碼可從網站https://www.exploit-db.com下載。使用WEKA平臺來訓練分類器,主要使用了四種機器學習算法:J48、Ran?domforest、NaiveBays、IBK,采用 10-fold 交叉驗證檢驗分類器的效果。
表2 四種分類器的分類效果
四種分類器都取得了高于98%的準確率,且FPR均低于2%,說明這四種分類器均可有效檢測Linux平臺的惡意軟件。其中,RandomForest算法的TPR達到了100%,F(xiàn)PR為0.7%,且準確率達到99.6%,說明該分類器的檢測效果最好。
參考文獻:
[1]Natani P,Vidyarthi D.An Overview of Detection Techniques for Metamorphic Malware[M].Intelligent Computing,Networking,and Informatics.Springer India,2014:637-643.
[2]Yin H,Song D,Egele M,et al.Panorama:Capturing System-wide Information Flow for Malware Detection and Analysis[C].Proceedings of the 14th ACM conference on Computer and Communications Security.ACM,2007:116-127.
[3]Pluskal O.Behavioural Malware Detection Using Efficient SVM Implementation[C].Proceedings of the 2015 Conference on Research in Adaptive and Convergent Systems.ACM,2015:296-301.
[4]Yan L K,Yin H.Droidscope:Seamlessly Reconstructing the OS and Dalvik Semantic Views for Dynamic Android Malware Analysis[C].Presented as part of the 21st USENIX Security Symposium(USENIX Security 12),2012:569-584.
[5]Shabtai A,Kanonov U,Elovici Y,et al.“Andromaly”:a Behavioral Malware Detection framework for Android Devices[J].Journal of Intelligent Information Systems,2012,38(1):161-190.
[6]Oh N,Shirvani P P,McCluskey E J.Control-Flow Checking by Software Signatures[J].IEEE transactions on Reliability,2002,51(1):111-122.
[7]Li J,Tan Q,Xu J.Reconstructing Control Flow Graph for Control Flow Checking[C].Progress in Informatics and Computing(PIC),2010 IEEE International Conference on.IEEE,2010,1:527-531.