沈佳威
(杭州師范大學(xué)錢江學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù)系,浙江 杭州 310012)
隨著蠕蟲技術(shù)的不斷友展,關(guān)于蠕蟲的定義也在不斷發(fā)展,下面給出了一個就目前而言比較全而的定義:“網(wǎng)絡(luò)蠕蟲是一種智能化、自動化,綜合網(wǎng)絡(luò)攻擊、密碼學(xué)和計(jì)算機(jī)病毒技術(shù),不需要計(jì)算機(jī)使用者干預(yù)即可運(yùn)行的攻擊程序或代碼。它會掃描和攻擊網(wǎng)絡(luò)上存在系統(tǒng)漏洞的節(jié)點(diǎn)主機(jī),通過局域網(wǎng)或者國際互聯(lián)網(wǎng)從一個節(jié)點(diǎn)傳播到另外一個節(jié)點(diǎn)?!痹摱x體現(xiàn)了新一代網(wǎng)絡(luò)蠕蟲智能化、自動化和高枯術(shù)化的特征。
蠕蟲進(jìn)行漏洞攻擊和復(fù)制感染之前首先需要進(jìn)行主機(jī)掃描。TCPSYN,ACK,RST,FIN 以及IcmP PING 包都可實(shí)現(xiàn)對主機(jī)的掃描。良好的掃描策略能夠加速蠕蟲的傳播,理想化的掃描策略能夠使蠕蟲在最短時間內(nèi)發(fā)現(xiàn)網(wǎng)絡(luò)中全部可以感染的主機(jī)。按照蠕蟲對目標(biāo)地址空間的選擇方式進(jìn)行分類,掃描策略可分為:隨機(jī)掃描和順序掃描等。
隨機(jī)掃描會對整個地址空間的IP 隨機(jī)抽取進(jìn)行掃描,所選的目標(biāo)地址按照一定的算法隨機(jī)生成,互聯(lián)網(wǎng)地址空間中未分配的或者保留的地址塊不在掃描之列。例如,Bogon 列表中包含近32個地址塊,這些地址塊對網(wǎng)絡(luò)中不可能出現(xiàn)的一些地址進(jìn)行了標(biāo)識。隨機(jī)掃描具有算法簡單、易實(shí)現(xiàn)的特點(diǎn),若與本地優(yōu)先原則結(jié)合,則能達(dá)到更好的傳播效果。但選擇性隨機(jī)掃描容易引起網(wǎng)絡(luò)阻塞,使得網(wǎng)絡(luò)蠕蟲在爆發(fā)之前易被發(fā)現(xiàn),隱蔽性差。CodeRed,Slapper 和Slammer 的傳播采用了選擇性隨機(jī)掃描策略。
順序掃描是指被感染主機(jī)上蠕蟲會隨機(jī)選擇一個C 類網(wǎng)絡(luò)地址進(jìn)行傳播。根據(jù)本地優(yōu)先原則,蠕蟲一般會選擇它所在網(wǎng)絡(luò)內(nèi)的IP 地址。若蠕蟲掃描的目標(biāo)地址IP 為A,則掃描的下一個地址IP 為A+1。一旦掃描到具有很多漏洞主機(jī)的網(wǎng)絡(luò)時就會達(dá)到很好的傳播效果。該策略的不足是對同一臺主機(jī)可能重復(fù)掃描,引起網(wǎng)絡(luò)擁塞。W32.Blaster 是典型的順序掃描蠕蟲。
在基于P2P 的分布式蠕蟲檢測系統(tǒng)中,各節(jié)點(diǎn)采用旁路偵聽的方式監(jiān)控各自對應(yīng)的邊界網(wǎng)絡(luò),需要對出入該網(wǎng)絡(luò)的所有網(wǎng)絡(luò)報文進(jìn)行報文還原,即進(jìn)行IP 分片重組和TCP 數(shù)據(jù)流還原,才能進(jìn)一步進(jìn)行蠕蟲的檢測和分析。但是,隨著網(wǎng)絡(luò)規(guī)模的擴(kuò)大、帶寬的增長、技術(shù)的進(jìn)步、用戶數(shù)量的急劇暴漲,高速網(wǎng)絡(luò)環(huán)境越來越多,當(dāng)前旁路偵聽遇到的一個突出問題是數(shù)據(jù)處理速度受到極大的挑戰(zhàn)。所以,如何解決蠕蟲檢測系統(tǒng)的數(shù)據(jù)處理能力是急需解決的問題。
報文捕獲就是將某個網(wǎng)絡(luò)設(shè)備看到的數(shù)據(jù)報文完整的收集起來,不管這些報文是發(fā)往哪個地址,哪個端口,然后對其進(jìn)行進(jìn)一步的處理和分析。報文一般不通過操作系統(tǒng)的協(xié)議棧進(jìn)行處理。而是直接由應(yīng)用程序進(jìn)行直接處理。因?yàn)閳笪牟东@程序處理的一般都不是發(fā)往本機(jī)的數(shù)據(jù)報文,而是根據(jù)應(yīng)用有特殊要求的,所以不能通過系統(tǒng)的協(xié)議棧進(jìn)行處理,需要應(yīng)用程序?qū)笪牟东@井實(shí)現(xiàn)用戶態(tài)下的協(xié)議棧,以實(shí)現(xiàn)IP 分片重組和TCP 數(shù)據(jù)流的還原,再送至上一層進(jìn)行處理和分析。
隨著百兆以太網(wǎng)、ATM、千兆以太網(wǎng)廣泛應(yīng)用,主機(jī)對網(wǎng)絡(luò)報文的處理性能逐漸成為一個瓶頸。而同時,SMP 體系結(jié)構(gòu)的計(jì)算機(jī)的應(yīng)用,大大提高了硬件系統(tǒng)的處理能力,但是單線程的程序卻無法充分發(fā)揮SMP 體系結(jié)構(gòu)計(jì)算機(jī)的性能,這是因?yàn)楫?dāng)前的操作系統(tǒng)無法將單線程的程序同時在多個CPU 上運(yùn)行。
3.3.1 多線程協(xié)議棧處理技術(shù)
為了充分發(fā)揮SMP 計(jì)算機(jī)的性能,只有將單線程的程序進(jìn)行多線程化。因此,我們將傳統(tǒng)的單線程協(xié)議棧改造成多線程并行TCP/IP 協(xié)議棧,也就是在系統(tǒng)中同時運(yùn)行多個TCP/IP 協(xié)議棧處理線程,讓它們在多個CPU 上并行操作,來充分利用硬件系統(tǒng)的計(jì)算能力。
3.3.2 抵御蠕蟲掃描的協(xié)議棧優(yōu)化
蠕蟲進(jìn)行漏洞攻擊和復(fù)制感染之前首先需要進(jìn)行主機(jī)掃描。TCPSYN,ACK,RST,FIN 以及IcmP PING 包都可實(shí)現(xiàn)對主機(jī)的掃描,其中利用TCP SYN 報文進(jìn)行掃描占主要部分。因此一旦蠕蟲爆發(fā)后網(wǎng)絡(luò)中將出現(xiàn)大量的無用TCP SYN 包,即只完成TCP 三次握手連接過程中的第一次握手。通常報文捕獲系統(tǒng)會以TCP SYN包的出現(xiàn)作為一個TCP 連接建立的開始而為這個TCP 連接分配一個TCP 描述符,以記錄該連接的上下文信息。而一旦網(wǎng)絡(luò)中出現(xiàn)大量的無用TCP SYN 包后,系統(tǒng)將會為這些大量的實(shí)際不存在的TCP 連接分配描述符,而系統(tǒng)所具備的TCP 連接描述符的數(shù)量是有限的,因此真正建立連接的TCP 連接將會因?yàn)門CP 連接描述符被占盡而無法被處理。這個現(xiàn)象類似于針對服務(wù)器的SYN Flood 攻擊。對此,我們修改目前協(xié)議棧對TCP 連接的處理過程:系統(tǒng)預(yù)先分配一個輕量級描述符LWD(lightweight descriptor)緩沖池。在這個LWD 中,只保存源地址、目的地址、源端口、目的端口、TCP 序號以及TCP 應(yīng)答序號,這個輕量級描述符相對于TCP 連接描述符來說代價非常小。當(dāng)系統(tǒng)捕獲一個TCP SYN包即三次握手中的第一次握手后,不會立即分配一個TCP 連接描述符,而是分配一個LWD,而等到系統(tǒng)捕獲后續(xù)的第二次握手和第三次握手后,說明當(dāng)前TCP 連接已經(jīng)建立成功,此時才給當(dāng)前TCP 連接分配一個TCP 連接描述符,并將對應(yīng)的LWD 釋放。為了提高杳找相應(yīng)連接對應(yīng)的LWD 的速度,采用可以唯一確定一個TCP連接的四元組(源地址,源端口,目的地址,目的端口)信息作為散列值,創(chuàng)建散列表。把散列值相同的LWD 了中用鏈表表聯(lián)系起來。對此,我們修改目前協(xié)議棧對TCP 連接的處理過程,系統(tǒng)先分配一個輕量級描述符LWD(lightweight descriptor)緩沖池。在這個LWD 中,只保存源地址、目的地址、源端口、目的端口、TCP 序號以及TCP 應(yīng)答序號,這個輕量級描述符相對于TCP連接描述符來說代價非常小。當(dāng)系統(tǒng)捕獲一個TCP SYN 包即三次握手中的第一次握手后,不會立即分配一個TCP 連接描述符,而是分配一個LWD,而等到系統(tǒng)捕獲后續(xù)的第二次握手和第三次握手后,說明當(dāng)前TCP 連接已經(jīng)建立成功,此時才給當(dāng)前TCP 連接分配一個TCP 連接描述符,將對應(yīng)的LWD 釋放。為了提高查找相應(yīng)連接對應(yīng)的LWD 的速度,采用可以唯一確定一個TCP 連接的四元組(源地址,源端口,目的地址,目的端口)信息作為散列值,創(chuàng)建散列表。把散列值相同的LWD 使用鏈表聯(lián)系起來。
我們在曙光服務(wù)器上以小同的線程數(shù)啟動報文還原程序處理同樣的數(shù)據(jù)樣本,其中測試環(huán)境為Intel Xeon 3.06GHz X 4CPU} 4G 內(nèi)存,操作系統(tǒng)為Redhat9.0SMP。從測試結(jié)果可以看出:在單線程的情況下,程序只能串行執(zhí)行,因而無法發(fā)揮多處理器的能力,隨著線程數(shù)的增長,協(xié)議棧的吞吐量也隨之升高。另外從測試結(jié)果也可以看出,協(xié)議棧線程數(shù)大于CPU 的數(shù)目的時候,提高線程數(shù)仍然可以提高吞吐量,這是因?yàn)長inux 采用的是時間片輪轉(zhuǎn)的調(diào)度算法,當(dāng)協(xié)議棧的井發(fā)線程數(shù)增加的時候,單位時間內(nèi)協(xié)議棧程序分配到的時間片就會相應(yīng)增加,因而吞吐量也會相應(yīng)增加。
我們設(shè)定協(xié)議棧井發(fā)線程數(shù)目為8個線程,分別運(yùn)行優(yōu)化了TCP 連接處理的報文還原程序和沒有優(yōu)化TCP 連接處理的報文還原程序,采用SmartBits 產(chǎn)生測試的100000pps 的TCP 流量,其中1%的數(shù)據(jù)包是無用的,TCP SYN 包以模擬蠕蟲掃描過程產(chǎn)生的大量TCP SYN 包,運(yùn)行30分鐘后分別記錄兩個協(xié)議棧所處理的應(yīng)用層數(shù)據(jù)量,有測試結(jié)果可以看出優(yōu)化前由于對每個TCP SYN 報都分配描述符,導(dǎo)致協(xié)議棧實(shí)際處理的數(shù)據(jù)僅為54570MBytes,而優(yōu)化后的協(xié)議棧處理的數(shù)據(jù)為76475Mbytes,大大提高了協(xié)議棧所處理的實(shí)際數(shù)據(jù)量。
[1]文偉平,卿斯?jié)h,蔣建春,王業(yè)君.網(wǎng)絡(luò)蠕蟲研究與進(jìn)展,軟件學(xué)報,2004年.
[2]卿斯?jié)h,文偉平,蔣建春等.一種基于網(wǎng)狀關(guān)聯(lián)分析的網(wǎng)絡(luò)蠕蟲預(yù)警新方法,軟件學(xué)報,2004年.