馮芳梅,邵長庚,劉 丹
(電子科技大學 電子科學技術研究院,四川 成都 611731)
近年來,計算機在人們生產、生活中扮演的角色也越來越關鍵,同時也容易遭受病毒、木馬、惡意代碼等多個方面的威脅[1],造成重大損失。利益趨向導致惡意代碼在數量和種類上呈現出一種爆發性增長趨勢,面對越來越多的惡意代碼變種和新型惡意代碼的出現,傳統的惡意代碼檢測技術(特征碼匹配等)已經顯得力不從心,并且逐漸暴露出越來越多的問題。各個安全公司、研究機構在系統資源占用率與檢測精準率權衡中不斷改進檢測方式,其它領域各種高級技術被應用到惡意代碼檢測技術中[2],并且呈現出日益白熾化趨勢。基于語義方式的惡意代碼檢測技術屬于其中一種,也在近年來得到不斷改進,該方面相關技術研究近年來一度成為眾多安全廠商和研究機構關注的熱點。
本文首先對相關的最新技術進行了調研,在此基礎上提出了一種基于分層語義認知的惡意代碼智能檢測方法,該方法采用了動態靜態分析結合、分層語義歸一化認知以及樸素貝葉斯分類器等技術進行檢測,具有高檢測率,低系統開銷,抗混淆加密等特點。對于目前的絕大多數代碼加殼、混淆方式有很強的抗干擾性,尤其對于常見的惡意代碼檢測繞過方式有非常強的針對性。在檢測效率與精準率的權衡方面,結合了文件結構特征快速檢測技術,有效降低了平均檢測時間。
Christodorescu M 提出了代碼指令級的程序語義抽象方法[3],用于對抗代碼混淆技術。Predaetal M在文獻[4]中提出了形式化的語義框架用于惡意代碼檢測。北京大學的李佳靜,梁知音等人在文獻[5]中提出了一種基于語義的惡意行為分析方法,對基于函數調用的攻擊進行完整刻畫,支持流敏感、上下文敏感且路徑敏感的函數間分析。由于相同語義函數調用具有多樣性,以上方法的普適度不高。
Martignoni L在文獻[6]提出了一種從系統調用的先后順序著手,基于分層調用的檢測框架,由于該方法采用特定的系統調用集合描述行為,因此會被采用多進程技術以及相同語義的系統調用所繞過。
黃茜等在文獻[7]中提出一種層次化的惡意代碼行為分析方法,首先根據程序運行時的系統調用序列獲取行為信息,然后分析其行為意圖并作危害性評估。以上方法的特征均過于粗糙,由于有價值的API序列往往只占API集合的很小一部分,API序列提取的結果只是一些簡易的語法信息,因此可以通過構造相同語義不同順序的API序列繞過檢測。
陶芬等在文獻[8]中提出一種靜態建模、動態建模和混合建模結合的方式對軟件行為進行建模,此種方式可以在一定程度上反映程序的行為特性,但是由于系統開銷過高和實時性較差,無法直接應用于惡意代碼檢測相關技術。
綜上所述,現有的惡意代碼檢測技術所采用的行為描述方法不能從根本上對惡意行為進行快速的抽象和準確的表述[9-10]。因此需要一種具有抽象理解能力,抗混淆能力強,系統開銷盡量低的檢測方式解決此問題,而本文提出的基于分層語認知的檢測方法正滿足了以上要求。
基于分層語義認知的惡意代碼檢測方法吸取了眾多惡意代碼檢測技術的優點,通過虛擬化動態捕獲環境來捕獲行為數據,再對訓練得出的語義認知數據逐層進行行為特征的元歸一化,行為特征向量提取,最后使用樸素貝葉斯(NB,Naive Bayesian)分類器進行惡意代碼的判定,此種方法能夠有效地對抗惡意代碼的混淆、變形技術,具有高檢測率,低誤報率的特點。
檢測框架如圖1所示,所有檢測的原始數據來源于最底層的虛擬化動態捕獲環境,經過歸一化原始特征提取層、行為特征語法向量提取層、NB分類斷言認知層的逐層抽象,最終對程序的惡意行為進行判定。檢測流程主要分為語義行為庫的構建和惡意代碼檢測兩個階段,前者是后者的先行步驟,兩者依賴同樣的檢測框架與檢測算法。語義行為庫的構建階段通過對現有已知的惡意代碼進行特征提取、抽象及NB分類器訓練,最終輸出每種惡意行為的相關檢測指標;惡意代碼的檢測階段從同樣的捕獲環境獲取認知數據,再通過逐層抽象、認知得到相關的認知向量,最后通過NB分類器所檢測程序的惡意性進行判定。

圖1 基于分層語義認知的惡意代碼檢測框架
虛擬化捕獲環境的總體結構可以用圖 2來表示,該捕獲環境通過用戶態系統調用掛鉤實現了用戶態系統調用的捕獲,通過內核態驅動實現了系統底層資源訪問的捕獲與重定向。
借助以上2種方法,我們建立了一個與主機真實環境隔離的捕獲環境,該捕獲環境為后期分析檢測提供了豐富、可靠的數據來源。

圖2 虛擬化捕獲環境框架
歸一化元特征提取層作為捕獲到數據的第一層,主要完成對原始數據的歸一化分類操作,原始數據在本層經過的處理方式分為3種:對于系統API調用的歸一化元特征提取、對于中斷調用的歸一化元特征提取以及對于文件結構異常的歸一化元特征提取。
2.2.1 系統調用和中斷的歸一化
系統調用和中斷調用的歸一化是提取行為的關鍵,相同功能的系統調用和中斷在此層被合并歸一,以降低后期檢測的復雜性以及向量維度。
針對同一種系統調用,操作系統通常會提供幾組不同的調用方式,以便于用戶使用。在基于行為語義的檢測中,此類調用往往具有相同的含義,因此,將原始系統調用歸一化,能有效降低后期檢測運算的復雜度。如下面一組系統調用:若該組調用對系統資源造成的改變相同,該組系統調用可以歸一化為:


2.2.2 文件結構異常的歸一化
文件結構異常歸一化的目的在于提高檢測效率的同時降低系統開銷,通過文件異常特征檢查判斷惡意性,盡量減少開銷較大的行為分析。
正常情況下,各種編譯器編譯出的文件具有相同的特征,并且會嚴格遵守標準的文件結構規范,但是,一些惡意程序會通過修改文件結構來隱藏其惡意特征,如常見的通過修改PE文件導入表進行系統API調用的隱藏,以及向可執行文件末尾附加其它可執行文件進行文件的捆綁等。這些情況,實現效果相同,但是實現方式不同,所以要提取其行為特征,必然要進行歸一化處理。特征使用以下形式定義:

捆綁型文件可以用歸一化的方式抽象:

利用文件異常特征的歸一化提取,能有效提高檢測效率,對使用常見黑客工具所產生的變種,具有很高的識別率。
行為特征向量語法特征提取層利用提取的歸一化元特征,通過抽象與認知形成行為語法向量。抽象與認知過程包括兩部分,元特征路徑匹配與正負向量集差運算。
元特征路徑匹配可以用圖3表示。
元特征利用語義認知器,通過對照行為的匹配規則,對已經獲取的元數據進行行為認知,通過類似于堆棧的結構暫存匹配信息,遇到與規則相符的歸一化元特征則將其壓入匹配堆棧,其余元特征則簡單的跳過,經過行為認知器的匹配,將形成目標程序的N元行為特征向量Behavior[N],該行為向量除了包括所關心的行為特征元之外,還存有對應特征的頻率統計信息。此時得到的行為特征向量無法區分一些與惡意行為類似的軟件,若將惡意代碼的特征向量定義為正向量(P set),將易混淆正常程序行為特征向量定義為負向量(N set),進行P-N 差集運算之后便可以得到低誤報率的相對行為向量集(R set)。

圖 3 元特征路徑匹配示意
NB分類器屬于貝葉斯分類器的一種,是一種簡單有效的概率分類方法,在某些領域中表現優秀。貝葉斯分類器是提供推理的一種概率手段,它的基石是貝葉斯公式:

假設惡意樣本按照家族分為C1,C2,…,Cn幾類,n為分類總數,待測程序的某種可疑行為集合用向量 F表示F=(F1,F2,…,Fn),其中每個元素代表特征庫中對應的特征在待測程序中是否存在(0不存在,1存在)。對給定樣本特征集進行分類,即計算出 P(C/F)。按照貝葉斯分類方法,首先統計:

因為特征向量F中又包含有分量F1,F2,…, Fn,故上式可以寫成:

最后根據P(C/F)的最大值來確定F最大可能的類。即待測樣本S的類別CS為:

實際應用中斷言認知層要判斷多種可疑行為,因此使用了多個貝葉斯分類器,把樣本的特征向量分成多個子集分別計算,然后用一個多重貝葉斯算法(MNB)對多個樸素貝葉斯分類器獲得的結果進行綜合求值,通過訓練樣本得出標準語義向量特征庫,檢測時再通過特征庫對目標程序進行匹配,判定程序是否為惡意程序。其主要依據為以下公式:

其中 NBi是樸素貝葉斯分類器,|NB|是數目,MNB代表多重聯合貝葉斯分類器。PNBi(V|F)和 PNBi(V)是給定分類的先驗概率。
為檢驗上述理論的正確性與可行性,驗證階段進行了大量的實驗與修正,實驗所涉及的30 000個真實病毒樣本絕大部分來自VX Heavens(http://vx.netlux.org/),剩余部分來自于實驗室前期相關項目的實驗樣本積累。實驗在30 000個樣本中采用隨機抽取樣本集的方式進行交叉驗證,然后使用訓練結果對一個隨機的樣本集進行檢測,該樣本集包括了隨機抽取的惡意程序和隨機抽取的正常程序。
行為庫中各項行為標準的制定主要來源于實驗室前期對于惡意代碼檢測的研究基礎,以及互聯網現有資源的利用,貝葉斯分類器中對于每種類型惡意代碼檢測參數,通過對每種類別選取 300到 500個典型惡意程序樣本訓練所得出。
實驗采取對樣本庫隨機抽樣獲取樣本,分別進行了不同種類惡意樣本檢測實驗、變種檢測實驗和正常程序檢測實驗3種實驗。惡意樣本檢測實驗直接從在惡意代碼樣本庫中進行隨機抽樣,目的在于測試對惡意程序的檢測能力;變種檢測實驗抽樣范圍限定在同一惡意程序家族中,目的在于測試對變種惡意程序的檢測能力;最后的正常程序測試,采樣限定在非惡意程序,目的在于測試此方案的誤報率。抽樣情況參見表1所示。
從檢測結果對分層語義認知的惡意代碼檢測方法可以得出以下結論:①該方法對于惡意代碼具有較高的檢測正確率;②該方法對于變種惡意代碼檢測更為有效;③該方法對于正常程序還存在少量的錯誤檢測。

表1 測試樣本隨機抽取結果
測試結果如圖4所示,測試結果中對于隨機抽取的2 000個惡意樣本檢測率為96.85%,對于變種樣本的檢測率為98.00%,對于1 000個正常程序的誤報率為0.50%。
經過對樣本監測出錯原因的分析,得出了未檢測到惡意程序是由于規則庫的提取不全造成的,規則庫有待于完善,另外雖然P-N差集運算大幅降低了正常程序的誤報率,但是仍然對部分與惡意程序有相同行為的正常程序缺乏辨別能力。

圖4 抽樣測試結果
本文提出了一種歸一化的分層語義惡意代碼檢測方法,并通過實驗證明了此種檢測方式具有高檢測率,低誤報率,并且能夠有效對抗惡意代碼的混淆、加密技術,尤其對惡意代碼變種具有很高的檢測率。實驗同時也暴露出本系統行為庫規則的不全面性,在今后的研究中為了提高檢測準確率需要對行為規則庫進一步完善與維護。
[1] 陳頌,王光偉,劉欣宇,等.信息系統安全風險評估研究[J]. 通信技術,2012,45(01):128-130.
[2] 許學輝,吳靜. 基于流的流媒體語義提取技術研究[J].通信技術,2010,43(12):140-143.
[3] MIHAI C, SOMESH J, SANJIT S.A Semantics-Aware Malware Detection[C].USA: Proceedings - IEEE Symposium on Security and Privacy, 2005: 32-46.
[4] DALLA P M, MIHAI CHRISTODORESCU, SAUMYA DEBRAY. A Semantics-Based Approach to Malware Detection[C].[s.l.]:POPL,2007:17-19.
[5] 李佳靜,梁知音,韋韜,等. 一種基于語義的惡意行為分析方法[J]. 北京大學學報:自然科學版, 2008,44(04):537-542.
[6] MARTIGNONI, LORENZO. A Layered Architecture for Detecting Malicious Behaviors.USA Springer-varlay,2008: 78-97.
[7] 黃茜,武東英,孫曉妍. 一種層次化的惡意代碼行為分析方法[J]. 計算機應用, 2010,(04):1048-1052.
[8] 陶芬,尹芷儀,傅建明. 基于系統調用的軟件行為模型[J]. 計算機科學, 2010,(04):151-157.
[9] 陳志云,薛質. 基于 Win32 API調用監控的惡意代碼檢測技術研究[J]. 信息安全與通信保密, 2009,(07):73-75.
[10] 周瑞麗,潘劍鋒,譚小彬,等. 應用專家系統開發Windows惡意代碼檢測系統的研究[J]. 信息安全與通信保密, 2009(09):77-79,82.