劉牧寅,劉 穎 ,張思東
(北京交通大學 下 一代互聯網與互聯設備國家工程實驗室,北京 1 00044)
流控制傳輸協議SCTP(Stream Control Transport Protoco1)是IETF提出的一個新傳輸層協議[1]。SCTP結合了傳輸控制協議TCP(Transmission Control Protocol)和用戶數據報協議UDP(User Datagram Protold)的優點,它是面向連接的可靠的協議,提供差錯控制和流量控制,但又保留了報文的邊界;同時提供對多宿主機和多重流的支持。這些新特性使SCTP協議與TCP和UDP相比顯現出較大優勢,也使SCTP得到了越來越廣泛的研究。
基于SCTP的多路徑并行傳輸得到越來越多的關注。多路徑建立在多宿主的基礎上,即一臺主機具有多個網絡接口,可以通過多個 IP 地址被訪問。在TCP中,連接是指兩個端點之間的一個通道;而SCTP引入了聯合的概念[2],也存在于兩臺主機之間,但可以使用每臺主機上的多個接口進行協作,即主機可通過多個IP地址建立多條路徑同時傳輸數據,極大地提高了傳輸速度和效率以及數據傳輸的健壯性。
目前的網絡監控技術都是對單一路徑上的數據進行分析[3],因而這種同一會話數據通過不同路徑傳輸的方式使傳統網絡監控技術無法發揮作用。并且當前大部分網絡分析系統均不支持SCTP[4],而協議分析軟件Wireshark雖然能夠對SCTP進行分析,但不支持SCTP數據流重組,無法像TCP和UDP一樣還原應用層會話。同時,網絡上傳遞的信息日益復雜,急需網絡管理者對網絡上的通信數據和會話內容進行監控。
本文提出一種基于SCTP多路徑傳輸的網絡數據監聽還原技術,能夠對通過多條路徑并行傳輸的數據進行統一捕獲并完整還原,便于網絡管理者對網絡進行監控,為網絡安全提供了有效保障。

圖1 系統結構示意圖
傳統網絡下的數據傳輸是基于TCP或UDP的,通信雙方均只有一個IP地址,一個連接是通過通信雙方的源/目的地址和源/目的端口確定的[5]。
這種傳輸方式下的網絡監聽還原技術:(1)在路由設備上進行數據捕獲,捕獲經過該設備的所有數據包,這些數據包均屬于同一網段。(2)對捕獲的數據包依次進行協議分析,其中傳輸層僅支持TCP和UDP協議。在此基礎上,根據數據包的IP地址和端口號等進行數據包分類,然后根據TCP序號和確認序號等進行數據包整理。(3)進行還原,將應用層會話完整地再現出來。
這種數據監聽方式只能截獲單一路徑上的數據。對于多路徑傳輸而言,一個應用層會話的數據被分成多個數據包通過多條路徑同時進行傳輸,即在單一的路由設備上只能捕獲到應用層會話的片段,而無法獲取一個會話的完整過程。因此,需要一種新的網絡監聽還原技術提供對多路徑傳輸的支持,并能對基于SCTP協議的會話進行還原。
1.2.1 整體設計
基于SCTP多路徑傳輸機制的網絡監聽還原技術,主要分為數據捕獲模塊和分析還原模塊;其中分析還原模塊又分為協議分析、會話重聚和數據還原3個子模塊。
與傳統網絡監聽分析技術不同對于多路徑的傳輸方式,需要采用一種分布式的數據捕獲方式。即在多個路由設備上分別進行捕包,各捕獲進程彼此獨立,互不干擾,同時對多個路徑上傳輸的數據進行抓捕,將捕獲的數據包統一存在共享文件系統中。則共享文件系統中存儲了完整的會話過程。在此基礎上,分析還原模塊從共享文件系統中讀取捕獲文件并進行進一步處理,如圖1。
1.2.2 SCTP分析
分析還原模塊讀取的不再是單個捕獲文件,而是需要將多個捕獲文件讀取并統一寫入同一數據結構conv中,則該結構包含完整的通信數據。因此引入多線程技術,并行讀取多個文件并對文件中每個包依次進行協議分析。算法描述如下:
file[ ]:捕獲文件列表;
*conv:存放所有捕獲數據包的關鍵信息及其數據;
*packet:包鏈表結構,存儲所有捕獲數據包;
int main() //主函數
{ 創建n個讀包分析線程;
while(file!=NULL)
{ 將file分配給一個讀包分析線程;
file=file->next;}
......}
int process_file_i() //讀包分析線程
{ packet=read_from_file(); //從捕獲的文件中讀包
while(packet!=NULL)
{ dissect_packet(); //解析當前數據包
conv_add_packet(); //加入conv結構
packet=packet->next;}
......}
在這一過程中需要協調線程間的同步與互斥,每個線程在向conv寫入數據時要加互斥鎖保證緩沖區和全局變量的正確性,并通過信號實現線程間同步。
對于每個數據包的協議分析dissect_packet(),采用模擬協議棧的方式[6],從物理層開始依次向上逐層分析直至應用層。其中,關鍵是對傳輸層SCTP的解析。
根據SCTP報文格式,讀取12 byte的公共首部,提取并存儲其中的源端口和目的端口字段,根據端口號判定數據包傳送方向和應用層協議類型。
與TCP和UDP傳輸不同的是,一個SCTP報文中可能綁定多個數據塊,對于這種情況,則不能像傳統分析方法將SCTP首部之后的數據默認為應用層數據。而應首先比較該數據包IP報文長度Lp和SCTP數據塊長度Ls:(Lp-Lip=Ls+Lc) single:multi,其中Lip為20 byte的IP首部長度,Lc為12 byte的SCTP公共首部長度。運算結果為single則說明該SCTP報文中只有一個數據塊,即SCTP首部解封后的數據就是應用層數據;否則說明該SCTP報文中包含多個數據塊,需要分別處理。
依次讀取每一個數據塊,先提取類型和長度字段。通過對INIT、INIT ACK消息及其所包含參數的分析,分別提取出客戶端和服務器的接口信息,得到源和目的IP地址列表。對于DATA數據塊,根據SCTP規范中的DATA數據塊結構,依次提取TSN、流標識和流序號并保存在相應數據結構中,以便后續進行分片重組和會話重聚;并將各DATA數據塊中承載的用戶數據提取聚合,存儲在相應結構中。
1.2.3 SCTP會話重聚
會話重聚子模塊對SCTP數據流進行重組,工作過程主要分為兩個步驟:分類和整理。
分類建立在已經對每一個數據包進行協議分析的基礎上。由于SCTP的多宿主特性,一個資源可通過不同路徑在網絡中傳輸,因此與傳統技術不同,單一的IP地址不再作為確定會話的標志,而是通過四元組sign:

其中,Φ(aij)和?(aij)可以分別表示為:


aij代表了數據文件中,屬于第i個會話的第j個數據包;?(aij)代表數據文件中,會話未分類整理之前數據包雜亂無章的排列;Φ(aij)代表會話分類整理后,數據包在數據結構鏈表中有規律的排列,其每一行表達了一個完整的會話;class(sing)表達以四元組為參數的分類運算;sort(ssn)表達以SSN為參數的排序運算。
最終經過分類整理后形成的數據結構如圖2。

圖2 數據結構示意圖
1.2.4 數據還原
在此基礎之上,還原子模塊讀取協議分析和會話重聚的結果,根據應用層協議類型提供不同方法對整理好的會話進行還原。
為了提高數據還原的效率,在應用數據還原階段采用多線程并行處理的方式。每一個應用協議創建一個獨立線程來完成其相應的分析與還原,如圖3。

圖3 多線程并發還原過程示意圖
將會話的交互過程以及其中傳遞的具體數據內容部分,如訪問網頁資源、下載文件等,寫入結果文件與數據庫。從而對網絡傳輸數據和用戶行為進行監聽,確定可疑對象身份及位置,及時發現并阻止非法數據的傳播,還原結果可作為取證依據。
實驗拓撲環境如圖4,包括以下網絡設備:Apache服務器(軟件基于Apache2.0.55、系統為Linux 2.6)、客戶端網頁瀏覽器(軟件基于Firefox1.6、系統為Linux 2.6)、網絡監聽還原設備(系統為Linux 2.6)和路由器。
服務器和客戶端都配置兩塊網卡,各形成兩個接口,提供兩條路徑傳輸,通過局域網連接。網絡監聽還原設備作為第3方監聽設備,分別連接在兩個路由器上,進行數據捕獲和分析。

基于以上環境進行以下實驗:
(1)啟動數據捕獲程序,分別在兩個路由器上抓包。
(2)在客戶端主機上通過網頁瀏覽器訪問服務器,下載文檔、圖片、音樂等文件。
(3)停止抓包,啟動分析還原程序,并進行解析。
經測試,該技術能夠獲取通過雙路徑傳輸的完整會話過程,并對其進行分析和還原,將結果予以顯示和保存。其中,協議分析結果包括:數據包序號、時間、IP地址、端口、協議名稱和摘要等關鍵信息。數據還原結果為客戶端從服務器上訪問獲取的文件,保存在監聽還原設備的本地目錄下。
為了測試本監聽還原技術的執行效率,設計一種不引入多線程技術,僅采用單線程順序讀包分析和單線程順序還原的監聽還原技術。兩者進行執行效率的比較,測試結果如圖5。其中,文件大小(Size)為通過兩條路徑捕獲文件大小之和。
由于捕獲會話數量和每條路徑傳輸數據量等因素的影響,實際測量結果不完全符合線性增長,但不影響結果驗證和性能分析。由圖可知,在數據包文件比較小的情況下,兩者執行效率相差不大;而在數據包文件比較大的情況下,本監聽還原技術的還原時間明顯少于未引入多線程技術的監聽還原技術的執行時間,分析效率和性能相對較高。

本文提出的網絡監聽與還原技術支持多宿主機制和多路徑傳輸方式,并且支持對SCTP的分析以及SCTP數據流重聚,能夠捕獲完整的應用層會話過程并還原出具體的傳輸數據。從而實現對網絡通信內容的監測,進而實現對網絡用戶的可控可管,為網絡安全提供有效保證。
[1] Morneault K. Sharp C. Schwarzbauer H. etc. Stream Control Transmission Protocol[S]. RFC2960. Oct 2000.
[2]王雪琛,周建林,季新生. SCTP協議的研究與分析[J]. 網絡技術. 2004,34(2):18-20,23.
[3]史永豐,趙燕平,許榕生. 高速網絡內容監控系統的設計與實現[J]. 計算機科學,2004,31(B09):87-89.
[4]萬國根. 面向內容的網絡安全監控模型及關鍵技術研究[D].成都:電子科技大學,2005.
[5] 劉文昭. 網絡信息內容監測系統研究與實現[D]. 北京:北京交通大學電子信息工程學院,2008.
[6] W.Richard Stevens. TCP/IP詳解 卷1:協議[M]. 范建華. 北京:機械工業出版社, 2004.