(武漢大學 計算機學院, 湖北 武漢 430072)
摘 要:提前對特定漏洞可能出現的攻擊數據包進行特征提取,并以此特征為基礎描述了一種可以阻斷未來針對特定漏洞惡意攻擊的蠕蟲防范方法,最后提出一種新的蠕蟲防范模式和存在的一些問題。
關鍵詞:攻擊數據包; 蠕蟲防范; 特征提取; 異常檢測
中圖法分類號:TP393.08文獻標識碼:A
文章編號:1001-3695(2006)08-0123-03
New Method to Prevent Worms
PENG Guo jun, ZHANG Huan guo
(School of Computer, Wuhan University, Wuhan Hubei 430072, China)
Abstract:Basing on creating the signature of the possible attacking packets on specifically vulnerability in advance, this paper describes a new method to prevent the worms, which can be used to hold back the fast propagation of the new worms. At the end, a new model to keep away the worms is pointed out, and some problems about it are discussed
Key words:Attacking Packets; Worm Defence; Signature Generation; Anomaly Detection
1引言
在目標上采用隨機搜索算法的Slammer蠕蟲在30min內感染全球,它已經讓反病毒公司現有的常規對抗流程(捕獲樣本,分析并提取特征碼,測試,分發到反病毒軟件特征庫)收效甚微。據研究表明,未來Flash蠕蟲能夠在數十秒內感染全球網絡中所有存在相應漏洞的計算機[1]。無疑,合理使用和優化各種傳播技術之后,未來蠕蟲的傳播速度將越來越快,蠕蟲對抗將成為全球共同面對的一大難題。
在針對蠕蟲的防范上,目前各方都積極開展研究。事實表明,在蠕蟲發作之后進行蠕蟲防治特別被動,有些防治方案(如“蠕蟲對抗蠕蟲”的思路[2~4])甚至可能會給網絡帶來更大的災難,并且這類方案最多也只是一種亡羊補牢的做法。在蠕蟲發作之前進行有效防范才是防治蠕蟲的明智之舉。但對一個還未出現的蠕蟲來說,要找到一個有效的方案并非易事。目前,為了尋求蠕蟲傳播的共性,國內外專家學者在蠕蟲的編制、傳播技術和傳播途徑等方面開始展開研究,并取得了一些滿意的研究成果,但通過蠕蟲共性而形成的過濾條件對于蠕蟲檢測來說還是顯得寬松,從而使得檢測效果不盡人意。
計算機病毒具有不可預測性,所以病毒特征庫需要在病毒爆發之后實時更新,而爆發之前只能依靠病毒的共性并通過啟發式掃描或行為監測技術進行檢測。
每一次重大漏洞的出現,必將導致一次重大蠕蟲事件的爆發。事實已證明,蠕蟲的爆發具有可預測性:每次蠕蟲爆發都有充分的前兆——漏洞公開,目前用未公開漏洞來編寫蠕蟲的例子并不多見。另外,蠕蟲必須用到針對性的Exploit技術來獲取目標計算機的權限。例如,對于占絕大多數的緩沖區溢出類漏洞來說,蠕蟲發出的數據包中的相關數據必須能夠導致目標計算機中相關程序的緩沖區溢出而獲得控制權,而這些數據包具備一些蠕蟲作者無法改變的特征,這可以作為我們對未來蠕蟲進行有效檢測的依據。
預防蠕蟲需檢測的關鍵數據是網絡數據包,而不是反病毒技術主要針對的文件。Symantec的Carey Nachenberg在Worm 2004會議特邀報告中提供了一種新的檢測思路[2]。
2特征從何而來
特定漏洞出現之后,所有相關的網絡攻擊都將以網絡數據包為載體。那么,哪些元素能夠作為判斷蠕蟲攻擊的特征呢?目前數據捕獲和攔截技術已經比較成熟,因而問題的關鍵是要確定發生蠕蟲攻擊時數據包所具備的嚴格條件,這些條件可以包括服務端口號,協議、服務類型、數據長度限制、具體數據匹配模式等。
(1)服務端口號
對于大多數被發現的漏洞來說,蠕蟲攻擊的服務或程序都具有明確的服務端口號。如RedCode,Nimda針對Web服務器進行攻擊時為80端口,Slammer的攻擊數據包指向1434端口,Blaster指向135端口等。
(2)協議類型
對于特定程序的特定漏洞來說,其接收到的數據包同樣具有明確的協議類型。例如,RedCode,Nimda發出的攻擊數據包都為HTTP類型,Slammer采用UDP數據包,Blaster采用TCP或UDP類型。
以上是兩個基本的限制條件。在針對具體漏洞細節時,還需要加入其他一些更加嚴格的條件。
(3)服務類型
對于某些協議來說,其具備更加明確的指定服務類型,如ICMP報文中具備八位類型和八位代碼字段。對于某些程序的特定漏洞來說,其可能具有嚴格的指定服務類型。
(4)數據長度
對于特定漏洞來說,攻擊數據包中的數據長度必須足以觸發漏洞。例如,針對緩沖區溢出類漏洞,數據需要能夠覆蓋緩沖區中的返回地址,并且還需要包括一段ShellCode,這些都對數據包的長度提出了要求。
(5)具體數據匹配模式
數據匹配模式是檢測蠕蟲攻擊因素中的關鍵。在這部分特征提取上,我們應該從蠕蟲作者編寫蠕蟲的角度來充分進行分析。蠕蟲作者首先必須使得攻擊數據包符合服務或程序本身所要求的請求數據包的具體格式,同時為了觸發相關漏洞,還必須精心構造數據包,使得符合特定的規律和模式。例如,很多攻擊數據包的關鍵數據中在一定長度之內不能出現字符串結束符,在溢出后的返回地址位置必須放入處于某通用DLL中類似于“JMP ESP”,“JMP EBP”,“RET”之類指令的返回地址(并且這些地址一般都比較通用),另外攻擊包中還需要存放ShellCode來獲取控制權等。
具體數據匹配模式特征可以通過以下兩個因素來制定:偏移和特征匹配模式。
為了方便對特征進行描述,最終可以將上述特征擴充并表示如下:
begin
description: 漏洞公布編號
name: 漏洞具體名稱
transit type: 協議類型
trigger:源、目標IP和端口
offset:詳細特征偏移位置
sig begin
具體特征數據匹配模式
sig end
end
從上可知,漏洞攻擊的特征碼提取與現有反病毒技術中的特征碼提取非常類似,但提取時間和對象不同。前者是在漏洞公布之后蠕蟲爆發之前提取,而后者是在病毒爆發之后提取;前者提取的對象是可能出現的網絡攻擊數據包,而后者則來自病毒樣本文件。
3針對具體蠕蟲所利用的漏洞的具體特征
這里,以Slammer,Blaster利用的漏洞為例進行具體分析,提取它們所利用漏洞的具體特征。
(1)MS02 039
該漏洞描述如下:當SQL Server Resolution服務在UDP1434端口接收到第一個字節設置為0x04的UDP包時,SQL監視線程會獲取UDP包中的數據,并使用此用戶提供的信息來嘗試打開注冊表中的某一鍵值。如發送\\x04\\x41\\x41\\x41\\x41類似的UDP包,SQL服務程序就會打開如下注冊表鍵:HKLM\\Software\\Microsoft\\Microsoft SQL Server\\AAAA\\MSSQLServer\\CurrentVersion。攻擊者可以通過在這個UDP包后追加大量字符串數據,當嘗試打開這個字符串相對應的鍵值時,會發生基于棧的緩沖區溢出。
從上面可以得知,該漏洞攻擊數據包應該具備如下基本特征:端口號為1434,協議類型為UDP,UDP數據單元(PDU)的第一個字節為\\x04。
由于攻擊數據包要觸發基于棧的緩沖區溢出,進一步對漏洞分析可以得知其需要填充的返回地址在UDP包數據中的大致位置。另外,在UDP包數據的第一個字節必須為04H,且返回地址處的四個字節不包含字節0。
Symantec的Carey Nachenberg給出了其具體特征定義[2]:
begin
description: MS02 039
name: MS SQL Vuln
transit type: UDP
trigger: ANY:ANY->ANY:1434
offset: 0, PACKET
sig begin
"¥x04<getpacketsize(r0)>
<inrange(r0,61,1000000)>
<reportid()>"
sig end
end
可見,只要在網絡關鍵節點過濾掉發往UDP1434端口的非法查詢包,就可以阻止類似于Slammer的蠕蟲爆發。我們所捕獲到的一個Slammer蠕蟲發出的數據包前部分數據[5]如下:
其中,前面兩個框中內容分別為以太幀頭和UDP頭,它們之間的為IP頭,從04開始為UDP數據內容,DC C9 B0 42為返回地址。
可見,通過上面設置的特征可以過濾掉Slammer的攻擊數據包。
(2)MS03 026
要利用這個漏洞,攻擊者需要發送特殊形式的請求到遠程機器上的135端口。在這個漏洞中,CoGetInstanceFromFile函數調用的文件名參數(第五個參數)會引起溢出,當這個文件名超長的時候,會導致客戶端的本地溢出(在RPCSS中的GetPathForServer函數里只給了0x20堆棧的空間,但是用Lstrcpyw進行拷貝的)。
通過對該漏洞的分析,最終可以得到其具體特征,Symantec的Carey Nachenberg給出的具體特征[2]如下:
begin
description: MS03 026
name: RPC Vulnerability
transit type: TCP, UDP
trigger: ANY:ANY->ANY:135
sig begin
"¥x05¥x00¥x0B¥x03¥x10¥x00¥x00(about 50 more bytes...)
¥x00¥x00.*¥x05¥x00
<forward(5)><getbeword(r0)>
<inrange(r0,63,20000)>
<reportid()>"
sig end
end
4一種新的蠕蟲預防模式及一些問題
從上面分析可知,事先對特定漏洞可能出現的攻擊制定相關的攻擊特征,可以對未知蠕蟲進行有效防范。
只要反蠕蟲工作者在特定漏洞公布之后、蠕蟲爆發之前盡快提取特定漏洞攻擊的特征代碼,并將其分發到網絡中心節點的蠕蟲客戶端檢測程序進行實時檢測,那么完全可以事先針對特定漏洞的所有蠕蟲攻擊進行有效的防范。下面給出一種蠕蟲預防模式:
(1)在各種網絡中心節點和各單位網關或各服務器及用戶客戶端部署蠕蟲檢測客戶端。
(2)在CERT或相關網絡管理部門設置多個特征庫升級服務器。
首先,反蠕蟲工作人員在漏洞公布之后分析具體漏洞細節,對各種可能出現的攻擊思路進行分析,提煉漏洞攻擊數據包的匹配模式并制定特征碼,然后進行實際測試。測試完畢之后將具體特征放入特征庫升級服務器,然后特征庫升級服務器立刻向各客戶端特征庫進行升級,確保各客戶端能夠及時進行防護。
這種蠕蟲防范模式和目前反病毒軟件工作模式極為類似,但防范蠕蟲的效果會大大提高,并且這種方法可以過濾掉網絡中心節點經過的針對該漏洞的黑客攻擊包,大大避免了針對該漏洞的黑客攻擊事件。
不過還可能會遇到其他一些問題:
(1)最大的挑戰是反蠕蟲工作者必須在蠕蟲作者發布蠕蟲之前對新漏洞有足夠快的反應。
(2)因為有些漏洞本身比較復雜,數據包中數據本身可能含有復雜的邏輯關系,因而難以及時找到適合客戶端使用的合理漏洞攻擊特征,相信這也將成為未來針對該項研究的重要內容之一。
(3)網絡數據包轉發效率問題。在大部分關鍵節點部署蠕蟲檢測客戶端之后,它需要對流經的所有數據包進行檢測,并且有時候要深入高層協議,這對網絡速度會產生一些影響。隨著漏洞的逐漸增多,這個問題可能會更加嚴重。
(4)針對升級服務器和蠕蟲檢測客戶端的惡意攻擊。
對于問題(3)來說,由于蠕蟲爆發的危險時期處于大部分用戶沒有打好補丁之前,當漏洞出現一段時間之后,有關部門可以采取各種措施促使廣大用戶及時打好補丁,等網絡中的安全隱患消除后再關閉各中心節點的蠕蟲檢測客戶端。當有新的漏洞出現之后,繼續啟動個中心節點的客戶端檢測程序,同時各中心節點可以選擇忽略以往的漏洞攻擊特征。這在一定程度上可以將該系統對網絡產生的副作用降到最低。
5結束語
在特定漏洞公布后,盡快提取可能出現的針對該漏洞的各種攻擊代碼的特征,然后通過升級服務器對各網絡中心節點和用戶客戶端的檢測程序進行升級并進行有效檢測。這樣可以在蠕蟲爆發之前對各種蠕蟲和針對該漏洞的黑客攻擊進行有效防范,盡量減少蠕蟲所帶來的巨大損失。這是一種值得推薦的蠕蟲防范方法,可以預見,這將成為未來一段時間內預防蠕蟲的主要方法。
參考文獻:
[1]Stuart Staniford, David Moore, Vern Paxson,et al.The Top Speed of Flash Worms[C]. Proceedings of the ACM Workshop on Rapid Malcode, 2004.
[2]Carey Nachenberg. From Anti Virus to Anti Worm: A New Strategy for a New Threat Landscape[C]. Proceedings of the ACM Workshop on Rapid Malcode, 2004.
[3]鄭輝. Internet蠕蟲研究[D]. 天津:南開大學, 2003.121 122.
[4]楊峰, 段海新, 李星. 網絡蠕蟲擴散中蠕蟲和良性蠕蟲交互過程建模與分析[J]. 中國科學E輯, 2004,34(8):841-856.
[5]傅建明,彭國軍,張煥國. 計算機病毒分析與對抗[M]. 武漢:武漢大學出版社, 2004.251-252.
作者簡介:彭國軍(1979-),男,博士研究生,主要研究方向為網絡安全;張煥國(1945-),男,教授,博導,主要研究方向為信息安全、容錯計算。
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。