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