[摘要]本文研究并總結出木馬攻擊行為的規律,通過靜態分析PE文件提取出程序運行時調用的API,用木馬攻擊中常見的危險系統調用序列來建模一個動態攻擊樹,將分析PE文件得到的API調用集合與建立的攻擊樹進行匹配,有效的區分木馬文件和正常文件,并能根據檢測結果對攻擊樹進行動態的調整,以不斷提高攻擊樹對未知病毒的檢測能力。
[關鍵詞]木馬檢測;攻擊樹;PE文件
[中圖分類號]TP309.5[文獻標識碼] A
1引言
文獻[1]將通過用危險API序列來構建攻擊樹來檢測木馬文件,但該模型不能動態調整。本文在此研究的基礎上,提出了一種基于自適應攻擊樹模型的檢測木馬的方案。挑選木馬使用頻率高的API函數來對攻擊樹進行建模,通過靜態地分析PE文件獲得程序運行時可能調用的API集合,將其和攻擊樹作匹配,用靜態危險指數來量化木馬的與已經模型的匹配程度。如果一個可執行程序匹配程度高到預定程度,則可以判斷該文件為木馬,并且可以根據檢測結果集,在攻擊樹中添加新的結點,以此方式可以提高對未知木馬的檢測能力。
2PE文件結構分析
PE文件有9個預定義段,可執行代碼段.text、數據段.bss、.rdata、.data.、資源段. rsrc、導出數據段.edata、導入數據段.idata、調試信息段.debug。可執行文件運行時,將本身和導入函數表里保存的庫函數一并調入到內存里。
按一定的方式來遍歷可執行文件的IAT,就可以此可執行文件需的全部鏈接庫和庫函數,包括該可執行程序需要的API。可執行文件F所需是人的API集合記為A(F),則A(F)={A1,A2,…An},本文把A(F)作為檢測文件F是不是木馬程序的數據源。
3擴展攻擊樹模型
本文沿用了文獻[1]中的有關擴展攻擊樹、與結點、或結點、最大擴展攻擊樹及靜態危險指數的定義。并且針對一些典型的木馬程序進行了分析,然后歸納出了木馬攻擊中經常使用的危險API調用序列。并且用擴展攻擊樹表示及存儲API調用序列。用OR關系把這些最大攻擊樹的根結點連接到根結點ROOT上,此方式可以把森林變為樹RT。在RT中,所始的全部結
本文分析API函數后,針對有可能被木馬調用的API函數定義了危險度,如表1所示。沒有出現在表1中的函數在動態調整攻擊樹時可用到。樹中葉結點的stv值則是根據這些危險度設置的。
在擴展攻擊樹中,原始樹中非葉子結點的stv值等于0。文獻[1]中的weight樹值是1且不變且OR結點比AND結點的權重低。通過分析可知,以上的設置并不是太合理:因為對于OR結點一個從屬它的子目標實現,此攻擊目標就實現,面只有子目標都達到后AND攻擊目標才實現。所以針對實現條件來講,AND結點的危險性比OR結點要低的。因此本文中設置OR結點的Weight值為從屬它的子結點的個數,而AND結點的Weight值設定為1。
4基于自適應攻擊樹的木馬檢測方法
本文對于PE文件進行靜態分析,獲得程序需要調用的API函數集合作為檢測的數據源。然后通過去RT對匹配處理數據源,檢測是否為木馬。
4.1基于攻擊樹的匹配過程
A(F)與RT的匹配算法過程是:第一,針對A(F)中出現過的葉子結點,將其在RT對應位置作出高亮標記,即將state值設為1;沒有出現過的結點存入表中,動態調整時可用。第二,按照AND或者OR的規則對RT中的非葉子結點進行高亮標記。后序遍歷子樹可得到為實現攻擊目標而需要執行的API函數調用的序列。
對于一個可執行PE文件F定義一個靜態危險指數,表示為STV(F)。STV(F)量化地標明了F和木馬的匹配程度。本文的重點在于對于擴展攻擊的動態調整。例如圖1所描述的擴展攻擊樹。G2和G3表示匹配到兩棵最大高亮子樹根結點。
本文根據STV(F)判斷F是否為木馬,并設置報警閾值D。如果一個可執行文件的STV(F)值此大于D的值,則判定F是木馬文件。D值設置非常重要,過高時會造成漏報率的升高;而過低則會造成誤報率升高。本文經過大量分析及多次實驗后,D值設置為40。
4.2擴展攻擊樹自適應調整過程
在4.1節中曾指出提取PE文件的API集合,跟擴展攻擊樹匹配后把沒有出現在攻擊樹中的API存放在一個表中。本文設置正常PE調用的API函數存放到表NormalAPI中;木馬PE調用的API函數存放到表TrojanAPI中。表中的對應的API出現一次,記錄次數的變量值加1。
在實施木馬檢測過程中,每過規定的時間,計算TrojanAPI表中所有API的互信息值,以此來找出危險度已經上升到可以加入擴展攻擊樹的程度的API函數。
互信息用來度量一個消息中兩個信號之間的相互依賴程度[2]。本文將互信息用于衡量API和類別屬性之間的統計關聯程度,其定義為:
當MID(ak)超過預設的值時,判定ak可以添加到擴展攻擊樹。經過批量的實驗及分析,MID(ak)取0.3。
本文提出自動實現把API函數添加到擴展攻擊樹方案。即,如果選定添加到擴展攻擊樹的API以后,在確定此函數在攻擊樹的加入位置時,選用詞匯分析的方法。
經過分析,所有的API函數名是由若干肯人固定含義的詞匯組成,如同英語中的合成單詞一樣。文獻[3]中對810個樣本文件統計,發現文件調用函數總數為59 010,其中不重復的API總數量是3 680個。本文通過分析,共得到詞匯量為2 281個。因此本文建立一個表存儲常用的API函數詞匯,如表2所示。表中每個API函數還有詞性、含義和優先級等屬性。
本文用詞匯分析對確定添加到擴展攻擊樹的API函數分割成若干詞匯。分割時按照如下的方法:大寫字母為詞匯的開始,大寫字一與之后面小寫字母一起構成一個詞匯。后通過查詢表2得到詞的屬性。我們可以依據這些屬性把API譯成所需的形式。比如:API函數“GetSystem Window Directory”可分解為Get、System、Window、Directory四個詞匯,查表后詞匯的屬性為分別為v、n、n、n。
優先級為1、3、2、2。如表中所示動詞的優先級最高,而名詞的優先詞最低。我們可按照優先級把4個詞匯排序且翻譯為:獲取windows系統目錄的路徑名。假如
G2的表示目標是獲取系統文件,此API可能會成為G2的子結點。加入一個分支的關鍵原則是操作對象一致。
對于加入位置的確定本文設計的方案:假設現在確定要把API函數Ai加入擴展攻擊樹中。第一步:在樹中遍歷并尋找與Ai的作操對象一樣的分支;第二步:判斷找到的分支是與關系則以OR的形式添加;當是關系為OR時直接添加。在算法實現上,通過遍歷存儲結構的雙親鏈孩子鏈確定插入點,后生成新結點插入。
5實驗
我們對“武漢男生”分析,如果此木馬升級,添加一個攻擊目標:獲取其他用戶主機上的.exe可執行文件并刪除功能。我們提出的方法能對攻擊樹進行自適應調整后發現該木馬。
我們提取此木馬的API調用集合匹配RT。匹配后得到的部分高亮子樹。
此文件可能達到如下的攻擊目標:訪問網絡、加載動態庫、獲取系統信息、安裝鉤子、等。如果有黑客針對此木馬要添加獲取該主機上的.exe文件將之刪除的功能演變為一個功能進一步的木馬。經過分析,完成此攻擊目標所需要的函數序列如表3所示。
以上的API函數將被按表3中的排列順序編號A101、A102、A103、A104、A105、A106、A107。其中A101、A106、A107為OR關系,因為操作對象不同但動作相同,生成G11搜索文件。A102、A103、A104、A105為and關系因為動作不一樣,但對象一樣,生成G12獲取并刪除文件。API函數添加后,RT如圖2所示:
6總結
本文在前人研究的基礎上提出一種自適應攻擊樹檢測方案。利用該動態模型對木馬使用頻率較高的及新出現的API函數調用序列進行建模,可執行文件的API集合與攻擊樹進行匹配。實驗證明,該方法能有效地區分木馬與正常文件,對新木馬也能有效的檢測。下一步的工作,對調整過程進行優化。
參考文獻
[1]楊彥,黃皓等.基于攻擊樹的木馬檢測方法[J].計算機工程與設計,2008,11(29):2711-2714.
[2]王衛玲,劉培玉,初建崇.一種改進的基于條件互信息的特征選擇算法[J].計算機應用,2007,27(2):433-435.
[3]戴敏,黃亞樓,王維.基于文件靜態信息的木馬檢測模型[J].計算機工程,2006,32(6):198-200.
作者簡介:王曉燕(1984-),女,鄭州電力高等??茖W校電子信息系教師,助教,碩士研究生,主要研究方向:計算機信息安全。
王鵬飛(1980-),男,鄭州供電公司,本科,主要研究方向:電力系統自動化和信息安全。