摘要: 木馬是目前計算機網絡面臨的主要安全威脅之一。針對現有木馬檢測方法的不足,提出了行為分析與ID3決策樹相結合的木馬動態檢測技術,對其原理、算法、實現和性能進行了詳細介紹。利用ID3算法對樣本進行學習建立的木馬判定決策樹,根據程序運行時的行為判定其是否為木馬。在Windows系統下的實現和測試顯示該技術具有較高的準確率。
關鍵詞:
中圖分類號: TP393 文獻標識碼:A 文章編號:2095-2163(2011)01-0032-03
0引言
隨著計算機網絡的普及與廣泛應用,計算機網絡信息系統已成為企業、院校、政府等各部門最重要的基礎設施和信息交流工具。然而,目前的網絡信息系統還存在嚴重的安全問題,木馬、病毒等各種網絡攻擊行為正嚴重威脅著廣大用戶的數據和信息的安全。
木馬是一種由攻擊者秘密安裝在受害者計算機上的竊聽及控制的后門程序。
根據國家互聯網應急中心(CNCERT/CC)自2011-01到2011-03以來發布的《網絡安全信息與動態周報》,統計境內被木馬控制的IP地址數量如下:1月份12萬個,2月份13萬個,3月份41.4萬個。
由上述數據可知木馬事件愈發猖獗,網絡安全迫切需要快速有效的木馬檢測技術。
目前,主流的木馬檢測方法包括:端口識別[1]、注冊表監控[2]、特征碼檢測[1]、靜態文件信息檢測[3]和內存完整性檢測[4]等。但是上述方法都存在不足。端口識別的方法可以在一定程度上檢測到木馬,但高級木馬程序都有在植入到目標系統前定制新的通信端口的能力,從而逃過這種方法的檢測[1]。注冊表監控方法很難發現諸如采用文件關聯方法實現自動運行的木馬,而對于只運行一次的木馬,因其無需設置自動運行信息,無法使用該方法進行檢測[2]。由于木馬的種類日益增多,很難全面、準確地提取所有木馬的特征碼,所以基于特征碼檢測的方法存在明顯的漏檢問題[1]。靜態文件信息檢測是指在Windows環境下,根據從PE可執行文件中提取的靜態信息判斷文件是否為木馬文件[3]。與特征碼檢測方法類似,該方法只有在擁有大量具有代表性的樣本的情況下才能作為檢測木馬的有效方法,對新出現的木馬容易出現漏檢問題。內存完整性檢測多是通過檢測代碼區塊的完整性來判斷木馬的存在,但無法檢測到改變內存其他區域的木馬[4]。
針對上述檢測方法的不足,現提出木馬動態檢測方法。該方法將行為分析與ID3算法產生的決策樹相結合,將程序運行時的行為作為判定依據。
本文在Windows系統下實現了基于ID3決策樹的木馬動態檢測系統。經測試,該決策樹的準確率達到97.2%,錯檢率2.8%,漏檢率0.0%,證明采用ID3決策樹進行木馬動態檢測是可行的。
1ID3決策樹
1.1ID3算法與木馬動態檢測
ID3算法的優點是實現簡單,判定速度快。ID3算法的缺點主要是傾向于取值較多的屬性,對噪聲敏感[5]。但在本文的木馬動態檢測中,所有的判定屬性均只有兩個值:0和1;另外,木馬文件跟正常文件相比,會出現正常文件所不會有的行為特點,即“噪聲”,ID3算法對噪聲敏感的特性有利于木馬的檢測。
選擇使用行為分析進行木馬動態檢測是為了從根本上判斷出文件是否合法。根據文件運行時的行為進行判斷更有說服力。
將ID3算法與行為分析相結合就是為了能夠快速、準確地進行木馬動態檢測。
1.2ID3決策樹生成公式
下面介紹ID3算法公式的定義[6-7]。
定義1:若有n個消息,其給定的概率分布為p=(p1,…,pn),則該分布傳遞的信息量稱為p的熵,記為
定義4:信息增益度的公式為:
Gain(X,T)=Info(T)-Info(X,T) (3)
1.3ID3決策樹生成算法
通過學習ID3算法[8-9],現給出ID3決策樹的生成算法。
算法:Generate_decision_tree(samples, attribute)。由給定的訓練數據產生一棵判定樹。
輸入:訓練樣本samples,離散值;候選屬性的集合attribute_list。
輸出:一棵決策樹。
算法偽代碼:
Generate_decision_tree(samples, attribute_list)
(1)創建結點 N;
(2)ifsamples 都在同一個類C
thenreturn N 作為葉結點,以類C 標記;
endif
(3)ifattribute_list 為空
thenreturn N 作為葉結點,標記為 samples 中最普通的類;
else
(4)選擇attribute_list 中具有最高信息增益的屬性best_attr-ibute;
(5)標記結點 N 為best_attribute;
endif
(6)forbest_attribute 的每個屬性值aiDo
(7)由結點 N 長出一個條件為 best_attribute = ai 的分枝;
(8)設si 是samples 中best_attribute =ai 的樣本的集合;
(9)ifsi 中樣本為同一類
then加上一個樹葉,標記為 si中樣本的類;
(10)else
加上一個由 Generate_decision_tree(si,attribute_list-best_attribute)返回的結點;
endif
endfor
2基于ID3決策樹的木馬動態檢測系統的實現
2.1ID3算法訓練數據的獲取
本文主要研究Windows系統下的木馬動態檢測。所提到的木馬文件均由國家互聯網應急中心提供,類型有文本,文檔,圖片,音頻文件,視頻文件和郵件等,這些文件均嵌有不同類型的木馬程序。
ID3決策樹的建立需要訓練樣本和候選屬性。本文中,將含有木馬文件和正常文件作為訓練樣本,候選屬性則是指樣本運行時調用的API集合。
利用微軟公司提供的開源Detours庫對底層API進行攔截,就可以獲知哪些API被調用,哪些API沒有被調用,被攔截的API集合就是程序運行時的行為屬性集合。為了便于利用樣本運行后的行為數據計算出決策樹的決策屬性節點,用0和1代表API是否被調用:0代表沒有調用,1代表被調用。樣本運行前,所有被設置攔截的API都對應0;樣本運行后,被攔截到的API對應的數值變成1。如100101代表API1、API4和API6被調用,API2、API3和API5沒有被調用。
訓練樣本是有類別標識的,將所有樣本文件運行結束后,就得到了建立決策樹所需要的訓練數據。
ID3算法需要的候選屬性即所有被調用的API,這些屬性均只有兩個值:0和1。
2.2ID3決策樹的建立
本文中,使用了300個木馬文件,300個正常文件作為訓練樣本。設置攔截的API分為文件操作、網絡通信、注冊表操作、系統服務操作和進程線程操作五部分。
編程實現ID3算法,將樣本文件運行后得到的訓練數據經ID3算法的計算后,得到了有決定性意義的API,建立的決策樹如下圖1所示。
說明:單線箭頭表示該API被調用,雙線箭頭表示該API未被調用。
盡管在使用Detours庫時設置了對25個API的攔截(CopyFile、DeleteFile、MoveFile、CreateFile、WriteFile、Create-Process、CreateThread、TerminateProcess、RegSetValue、RegCr-eateKey、RegReplaceKey、ExitWindowsEx、ChangeSeric-eConfig、ClearEventLog、CreateService、DeleteService、socket、bind、send、sendto、connect、listen、recv、recvfrom、accept), 但由于每種API都不是獨立出現的,如可能bind、connect和socket同時出現,RegSetValue、RegCreateKey和DeleteFile同時出現,CreateProcess和CreateThread同時出現,所以并不是所有的API在最終的決策樹中都作為判定過程的一部分而出現。
2.3ID3決策樹判定規則的應用
本文中,木馬動態檢測系統的判定規則就是圖1中的決策樹。通過Detours庫對底層API進行攔截,攔截后得到的API通過該決策樹的規則進行判定。
如:一個文件調用的API有Socket、CreateFile、WriteFile、 RegSetValue和RegCreateKey,判定過程就是:
第一步:DeleteFile為0,到Socket;
第二步:Socket為1,判定該文件是木馬文件。
結束。
3基于ID3決策樹的木馬動態檢測系統的測試
及結果
為了獲得該決策樹的性能,進行了測試,測試文件沒有參加決策樹的建立。參加測試的有250個木馬文件,250個正常文件。木馬文件的類型如2.1節所述。
測試環境是樣本文件和木馬動態檢測程序。測試過程如下:檢測程序依次自動運行樣本文件,獲得樣本調用的API集合,將API集合利用決策樹的判定規則進行判定。由于測試樣本的類型是已知的,將判定結果與已知的樣本類型進行比對,就可以得知判定結果是否正確。測試結果如表1所示。
雖然該決策樹的準確率比較高,但也存在錯檢問題。分析錯檢原因主要有兩個。一個原因是對于壓縮包文件,打開時會調用CreateFile、WriteFile和DeleteFile,就導致了正常的壓縮包文件被判定為了木馬文件;另一個原因可能在于ID3算法是一種單變量決策樹算法,忽略了屬性間的相互聯系[9]。另外還可能用于建立決策樹的訓練樣本的種類不是足夠多,可以使用更多種類的木馬文件進行訓練以得到更完善的決策樹。
4結束語
本文總結了常用的木馬檢測方法的弊端,提出了行為分析與數據挖掘中的ID3決策樹相結合的動態檢測方法。首先得到包含木馬文件和正常文件的訓練樣本的行為數據;編碼實現了ID3算法;通過ID3算法對行為數據進行計算,得到了用于木馬動態檢測的決策樹;將該決策樹的判定規則嵌入到木馬動態檢測系統中,對未知的程序進行動態判定。最后,為了驗證該決策樹的判定能力,進行了驗證測試。測試結果表明該決策樹能有效地檢測到木馬文件。
下一步的研究重點是考慮各屬性間的關聯性,盡可能地減少相關度小的候選屬性;收集更多的木馬樣本來進行決策樹的訓練和建立,進一步完善決策樹。
參考文獻:
[1] 陳桂清,伍乃騏,滕少華. 通過進程監視檢測木馬攻擊[J]. 計算 機應用,2003,23(ll):130-133.
[2] 李偉斌,王華勇,羅平. 通過注冊表監控實現木馬檢測[J]. 計算 機工程與設計,2006,27(l2):2220-2222.
[3] 戴敏,黃亞樓,王維. 基于文件靜態信息的木馬檢測[J]. 計算機 工程,2006,32(6):198-200.
[4] 齊琪. 基于內存完整性的木馬檢測[D]. 武漢:華中科技大學,2006.
[5] 欒麗華,吉根林. 決策樹分類技術研究[J]. 計算機工程,2004, 30(9):94-97.
[6] 黃曉芳. 數據挖掘中決策樹算法及其應用[J]. 網絡信息技術, 2005,24(2):36.
[7] 張維東,張凱,董青,等. 利用決策樹進行數據挖掘中的信息熵 計算[J]. 計算機工程,27(3):71-72.
[8] 楊學兵,張俊. 決策樹算法及其核心技術[J]. 計算機技術與發 展,2007,17(1):44-45.
[9] 王莉. ID3算法的研究與應用[J]. 福建電腦,2010,1:11-12.