劉牧寅,劉 穎 ,張思東
(北京交通大學(xué) 下 一代互聯(lián)網(wǎng)與互聯(lián)設(shè)備國(guó)家工程實(shí)驗(yàn)室,北京 1 00044)
流控制傳輸協(xié)議SCTP(Stream Control Transport Protoco1)是IETF提出的一個(gè)新傳輸層協(xié)議[1]。SCTP結(jié)合了傳輸控制協(xié)議TCP(Transmission Control Protocol)和用戶數(shù)據(jù)報(bào)協(xié)議UDP(User Datagram Protold)的優(yōu)點(diǎn),它是面向連接的可靠的協(xié)議,提供差錯(cuò)控制和流量控制,但又保留了報(bào)文的邊界;同時(shí)提供對(duì)多宿主機(jī)和多重流的支持。這些新特性使SCTP協(xié)議與TCP和UDP相比顯現(xiàn)出較大優(yōu)勢(shì),也使SCTP得到了越來(lái)越廣泛的研究。
基于SCTP的多路徑并行傳輸?shù)玫皆絹?lái)越多的關(guān)注。多路徑建立在多宿主的基礎(chǔ)上,即一臺(tái)主機(jī)具有多個(gè)網(wǎng)絡(luò)接口,可以通過(guò)多個(gè) IP 地址被訪問(wèn)。在TCP中,連接是指兩個(gè)端點(diǎn)之間的一個(gè)通道;而SCTP引入了聯(lián)合的概念[2],也存在于兩臺(tái)主機(jī)之間,但可以使用每臺(tái)主機(jī)上的多個(gè)接口進(jìn)行協(xié)作,即主機(jī)可通過(guò)多個(gè)IP地址建立多條路徑同時(shí)傳輸數(shù)據(jù),極大地提高了傳輸速度和效率以及數(shù)據(jù)傳輸?shù)慕研浴?/p>
目前的網(wǎng)絡(luò)監(jiān)控技術(shù)都是對(duì)單一路徑上的數(shù)據(jù)進(jìn)行分析[3],因而這種同一會(huì)話數(shù)據(jù)通過(guò)不同路徑傳輸?shù)姆绞绞箓鹘y(tǒng)網(wǎng)絡(luò)監(jiān)控技術(shù)無(wú)法發(fā)揮作用。并且當(dāng)前大部分網(wǎng)絡(luò)分析系統(tǒng)均不支持SCTP[4],而協(xié)議分析軟件Wireshark雖然能夠?qū)CTP進(jìn)行分析,但不支持SCTP數(shù)據(jù)流重組,無(wú)法像TCP和UDP一樣還原應(yīng)用層會(huì)話。同時(shí),網(wǎng)絡(luò)上傳遞的信息日益復(fù)雜,急需網(wǎng)絡(luò)管理者對(duì)網(wǎng)絡(luò)上的通信數(shù)據(jù)和會(huì)話內(nèi)容進(jìn)行監(jiān)控。
本文提出一種基于SCTP多路徑傳輸?shù)木W(wǎng)絡(luò)數(shù)據(jù)監(jiān)聽(tīng)還原技術(shù),能夠?qū)νㄟ^(guò)多條路徑并行傳輸?shù)臄?shù)據(jù)進(jìn)行統(tǒng)一捕獲并完整還原,便于網(wǎng)絡(luò)管理者對(duì)網(wǎng)絡(luò)進(jìn)行監(jiān)控,為網(wǎng)絡(luò)安全提供了有效保障。
圖1 系統(tǒng)結(jié)構(gòu)示意圖
傳統(tǒng)網(wǎng)絡(luò)下的數(shù)據(jù)傳輸是基于TCP或UDP的,通信雙方均只有一個(gè)IP地址,一個(gè)連接是通過(guò)通信雙方的源/目的地址和源/目的端口確定的[5]。
這種傳輸方式下的網(wǎng)絡(luò)監(jiān)聽(tīng)還原技術(shù):(1)在路由設(shè)備上進(jìn)行數(shù)據(jù)捕獲,捕獲經(jīng)過(guò)該設(shè)備的所有數(shù)據(jù)包,這些數(shù)據(jù)包均屬于同一網(wǎng)段。(2)對(duì)捕獲的數(shù)據(jù)包依次進(jìn)行協(xié)議分析,其中傳輸層僅支持TCP和UDP協(xié)議。在此基礎(chǔ)上,根據(jù)數(shù)據(jù)包的IP地址和端口號(hào)等進(jìn)行數(shù)據(jù)包分類,然后根據(jù)TCP序號(hào)和確認(rèn)序號(hào)等進(jìn)行數(shù)據(jù)包整理。(3)進(jìn)行還原,將應(yīng)用層會(huì)話完整地再現(xiàn)出來(lái)。
這種數(shù)據(jù)監(jiān)聽(tīng)方式只能截獲單一路徑上的數(shù)據(jù)。對(duì)于多路徑傳輸而言,一個(gè)應(yīng)用層會(huì)話的數(shù)據(jù)被分成多個(gè)數(shù)據(jù)包通過(guò)多條路徑同時(shí)進(jìn)行傳輸,即在單一的路由設(shè)備上只能捕獲到應(yīng)用層會(huì)話的片段,而無(wú)法獲取一個(gè)會(huì)話的完整過(guò)程。因此,需要一種新的網(wǎng)絡(luò)監(jiān)聽(tīng)還原技術(shù)提供對(duì)多路徑傳輸?shù)闹С郑⒛軐?duì)基于SCTP協(xié)議的會(huì)話進(jìn)行還原。
1.2.1 整體設(shè)計(jì)
基于SCTP多路徑傳輸機(jī)制的網(wǎng)絡(luò)監(jiān)聽(tīng)還原技術(shù),主要分為數(shù)據(jù)捕獲模塊和分析還原模塊;其中分析還原模塊又分為協(xié)議分析、會(huì)話重聚和數(shù)據(jù)還原3個(gè)子模塊。
與傳統(tǒng)網(wǎng)絡(luò)監(jiān)聽(tīng)分析技術(shù)不同對(duì)于多路徑的傳輸方式,需要采用一種分布式的數(shù)據(jù)捕獲方式。即在多個(gè)路由設(shè)備上分別進(jìn)行捕包,各捕獲進(jìn)程彼此獨(dú)立,互不干擾,同時(shí)對(duì)多個(gè)路徑上傳輸?shù)臄?shù)據(jù)進(jìn)行抓捕,將捕獲的數(shù)據(jù)包統(tǒng)一存在共享文件系統(tǒng)中。則共享文件系統(tǒng)中存儲(chǔ)了完整的會(huì)話過(guò)程。在此基礎(chǔ)上,分析還原模塊從共享文件系統(tǒng)中讀取捕獲文件并進(jìn)行進(jìn)一步處理,如圖1。
1.2.2 SCTP分析
分析還原模塊讀取的不再是單個(gè)捕獲文件,而是需要將多個(gè)捕獲文件讀取并統(tǒng)一寫入同一數(shù)據(jù)結(jié)構(gòu)conv中,則該結(jié)構(gòu)包含完整的通信數(shù)據(jù)。因此引入多線程技術(shù),并行讀取多個(gè)文件并對(duì)文件中每個(gè)包依次進(jìn)行協(xié)議分析。算法描述如下:
file[ ]:捕獲文件列表;
*conv:存放所有捕獲數(shù)據(jù)包的關(guān)鍵信息及其數(shù)據(jù);
*packet:包鏈表結(jié)構(gòu),存儲(chǔ)所有捕獲數(shù)據(jù)包;
int main() //主函數(shù)
{ 創(chuàng)建n個(gè)讀包分析線程;
while(file!=NULL)
{ 將file分配給一個(gè)讀包分析線程;
file=file->next;}
......}
int process_file_i() //讀包分析線程
{ packet=read_from_file(); //從捕獲的文件中讀包
while(packet!=NULL)
{ dissect_packet(); //解析當(dāng)前數(shù)據(jù)包
conv_add_packet(); //加入conv結(jié)構(gòu)
packet=packet->next;}
......}
在這一過(guò)程中需要協(xié)調(diào)線程間的同步與互斥,每個(gè)線程在向conv寫入數(shù)據(jù)時(shí)要加互斥鎖保證緩沖區(qū)和全局變量的正確性,并通過(guò)信號(hào)實(shí)現(xiàn)線程間同步。
對(duì)于每個(gè)數(shù)據(jù)包的協(xié)議分析dissect_packet(),采用模擬協(xié)議棧的方式[6],從物理層開(kāi)始依次向上逐層分析直至應(yīng)用層。其中,關(guān)鍵是對(duì)傳輸層SCTP的解析。
根據(jù)SCTP報(bào)文格式,讀取12 byte的公共首部,提取并存儲(chǔ)其中的源端口和目的端口字段,根據(jù)端口號(hào)判定數(shù)據(jù)包傳送方向和應(yīng)用層協(xié)議類型。
與TCP和UDP傳輸不同的是,一個(gè)SCTP報(bào)文中可能綁定多個(gè)數(shù)據(jù)塊,對(duì)于這種情況,則不能像傳統(tǒng)分析方法將SCTP首部之后的數(shù)據(jù)默認(rèn)為應(yīng)用層數(shù)據(jù)。而應(yīng)首先比較該數(shù)據(jù)包IP報(bào)文長(zhǎng)度Lp和SCTP數(shù)據(jù)塊長(zhǎng)度Ls:(Lp-Lip=Ls+Lc) single:multi,其中Lip為20 byte的IP首部長(zhǎng)度,Lc為12 byte的SCTP公共首部長(zhǎng)度。運(yùn)算結(jié)果為single則說(shuō)明該SCTP報(bào)文中只有一個(gè)數(shù)據(jù)塊,即SCTP首部解封后的數(shù)據(jù)就是應(yīng)用層數(shù)據(jù);否則說(shuō)明該SCTP報(bào)文中包含多個(gè)數(shù)據(jù)塊,需要分別處理。
依次讀取每一個(gè)數(shù)據(jù)塊,先提取類型和長(zhǎng)度字段。通過(guò)對(duì)INIT、INIT ACK消息及其所包含參數(shù)的分析,分別提取出客戶端和服務(wù)器的接口信息,得到源和目的IP地址列表。對(duì)于DATA數(shù)據(jù)塊,根據(jù)SCTP規(guī)范中的DATA數(shù)據(jù)塊結(jié)構(gòu),依次提取TSN、流標(biāo)識(shí)和流序號(hào)并保存在相應(yīng)數(shù)據(jù)結(jié)構(gòu)中,以便后續(xù)進(jìn)行分片重組和會(huì)話重聚;并將各DATA數(shù)據(jù)塊中承載的用戶數(shù)據(jù)提取聚合,存儲(chǔ)在相應(yīng)結(jié)構(gòu)中。
1.2.3 SCTP會(huì)話重聚
會(huì)話重聚子模塊對(duì)SCTP數(shù)據(jù)流進(jìn)行重組,工作過(guò)程主要分為兩個(gè)步驟:分類和整理。
分類建立在已經(jīng)對(duì)每一個(gè)數(shù)據(jù)包進(jìn)行協(xié)議分析的基礎(chǔ)上。由于SCTP的多宿主特性,一個(gè)資源可通過(guò)不同路徑在網(wǎng)絡(luò)中傳輸,因此與傳統(tǒng)技術(shù)不同,單一的IP地址不再作為確定會(huì)話的標(biāo)志,而是通過(guò)四元組sign:
其中,Φ(aij)和?(aij)可以分別表示為:
aij代表了數(shù)據(jù)文件中,屬于第i個(gè)會(huì)話的第j個(gè)數(shù)據(jù)包;?(aij)代表數(shù)據(jù)文件中,會(huì)話未分類整理之前數(shù)據(jù)包雜亂無(wú)章的排列;Φ(aij)代表會(huì)話分類整理后,數(shù)據(jù)包在數(shù)據(jù)結(jié)構(gòu)鏈表中有規(guī)律的排列,其每一行表達(dá)了一個(gè)完整的會(huì)話;class(sing)表達(dá)以四元組為參數(shù)的分類運(yùn)算;sort(ssn)表達(dá)以SSN為參數(shù)的排序運(yùn)算。
最終經(jīng)過(guò)分類整理后形成的數(shù)據(jù)結(jié)構(gòu)如圖2。
圖2 數(shù)據(jù)結(jié)構(gòu)示意圖
1.2.4 數(shù)據(jù)還原
在此基礎(chǔ)之上,還原子模塊讀取協(xié)議分析和會(huì)話重聚的結(jié)果,根據(jù)應(yīng)用層協(xié)議類型提供不同方法對(duì)整理好的會(huì)話進(jìn)行還原。
為了提高數(shù)據(jù)還原的效率,在應(yīng)用數(shù)據(jù)還原階段采用多線程并行處理的方式。每一個(gè)應(yīng)用協(xié)議創(chuàng)建一個(gè)獨(dú)立線程來(lái)完成其相應(yīng)的分析與還原,如圖3。
圖3 多線程并發(fā)還原過(guò)程示意圖
將會(huì)話的交互過(guò)程以及其中傳遞的具體數(shù)據(jù)內(nèi)容部分,如訪問(wèn)網(wǎng)頁(yè)資源、下載文件等,寫入結(jié)果文件與數(shù)據(jù)庫(kù)。從而對(duì)網(wǎng)絡(luò)傳輸數(shù)據(jù)和用戶行為進(jìn)行監(jiān)聽(tīng),確定可疑對(duì)象身份及位置,及時(shí)發(fā)現(xiàn)并阻止非法數(shù)據(jù)的傳播,還原結(jié)果可作為取證依據(jù)。
實(shí)驗(yàn)拓?fù)洵h(huán)境如圖4,包括以下網(wǎng)絡(luò)設(shè)備:Apache服務(wù)器(軟件基于Apache2.0.55、系統(tǒng)為L(zhǎng)inux 2.6)、客戶端網(wǎng)頁(yè)瀏覽器(軟件基于Firefox1.6、系統(tǒng)為L(zhǎng)inux 2.6)、網(wǎng)絡(luò)監(jiān)聽(tīng)還原設(shè)備(系統(tǒng)為L(zhǎng)inux 2.6)和路由器。
服務(wù)器和客戶端都配置兩塊網(wǎng)卡,各形成兩個(gè)接口,提供兩條路徑傳輸,通過(guò)局域網(wǎng)連接。網(wǎng)絡(luò)監(jiān)聽(tīng)還原設(shè)備作為第3方監(jiān)聽(tīng)設(shè)備,分別連接在兩個(gè)路由器上,進(jìn)行數(shù)據(jù)捕獲和分析。
基于以上環(huán)境進(jìn)行以下實(shí)驗(yàn):
(1)啟動(dòng)數(shù)據(jù)捕獲程序,分別在兩個(gè)路由器上抓包。
(2)在客戶端主機(jī)上通過(guò)網(wǎng)頁(yè)瀏覽器訪問(wèn)服務(wù)器,下載文檔、圖片、音樂(lè)等文件。
(3)停止抓包,啟動(dòng)分析還原程序,并進(jìn)行解析。
經(jīng)測(cè)試,該技術(shù)能夠獲取通過(guò)雙路徑傳輸?shù)耐暾麜?huì)話過(guò)程,并對(duì)其進(jìn)行分析和還原,將結(jié)果予以顯示和保存。其中,協(xié)議分析結(jié)果包括:數(shù)據(jù)包序號(hào)、時(shí)間、IP地址、端口、協(xié)議名稱和摘要等關(guān)鍵信息。數(shù)據(jù)還原結(jié)果為客戶端從服務(wù)器上訪問(wèn)獲取的文件,保存在監(jiān)聽(tīng)還原設(shè)備的本地目錄下。
為了測(cè)試本監(jiān)聽(tīng)還原技術(shù)的執(zhí)行效率,設(shè)計(jì)一種不引入多線程技術(shù),僅采用單線程順序讀包分析和單線程順序還原的監(jiān)聽(tīng)還原技術(shù)。兩者進(jìn)行執(zhí)行效率的比較,測(cè)試結(jié)果如圖5。其中,文件大小(Size)為通過(guò)兩條路徑捕獲文件大小之和。
由于捕獲會(huì)話數(shù)量和每條路徑傳輸數(shù)據(jù)量等因素的影響,實(shí)際測(cè)量結(jié)果不完全符合線性增長(zhǎng),但不影響結(jié)果驗(yàn)證和性能分析。由圖可知,在數(shù)據(jù)包文件比較小的情況下,兩者執(zhí)行效率相差不大;而在數(shù)據(jù)包文件比較大的情況下,本監(jiān)聽(tīng)還原技術(shù)的還原時(shí)間明顯少于未引入多線程技術(shù)的監(jiān)聽(tīng)還原技術(shù)的執(zhí)行時(shí)間,分析效率和性能相對(duì)較高。
本文提出的網(wǎng)絡(luò)監(jiān)聽(tīng)與還原技術(shù)支持多宿主機(jī)制和多路徑傳輸方式,并且支持對(duì)SCTP的分析以及SCTP數(shù)據(jù)流重聚,能夠捕獲完整的應(yīng)用層會(huì)話過(guò)程并還原出具體的傳輸數(shù)據(jù)。從而實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)通信內(nèi)容的監(jiān)測(cè),進(jìn)而實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)用戶的可控可管,為網(wǎng)絡(luò)安全提供有效保證。
[1] Morneault K. Sharp C. Schwarzbauer H. etc. Stream Control Transmission Protocol[S]. RFC2960. Oct 2000.
[2]王雪琛,周建林,季新生. SCTP協(xié)議的研究與分析[J]. 網(wǎng)絡(luò)技術(shù). 2004,34(2):18-20,23.
[3]史永豐,趙燕平,許榕生. 高速網(wǎng)絡(luò)內(nèi)容監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)科學(xué),2004,31(B09):87-89.
[4]萬(wàn)國(guó)根. 面向內(nèi)容的網(wǎng)絡(luò)安全監(jiān)控模型及關(guān)鍵技術(shù)研究[D].成都:電子科技大學(xué),2005.
[5] 劉文昭. 網(wǎng)絡(luò)信息內(nèi)容監(jiān)測(cè)系統(tǒng)研究與實(shí)現(xiàn)[D]. 北京:北京交通大學(xué)電子信息工程學(xué)院,2008.
[6] W.Richard Stevens. TCP/IP詳解 卷1:協(xié)議[M]. 范建華. 北京:機(jī)械工業(yè)出版社, 2004.