袁澤宇 肖慶正
摘要:針對(duì)網(wǎng)絡(luò)數(shù)據(jù)包的捕獲,分析了基于libpcpap的網(wǎng)絡(luò)數(shù)據(jù)包捕獲應(yīng)用流程,研究了網(wǎng)絡(luò)數(shù)據(jù)分解與重構(gòu)的工作流程:通過對(duì)實(shí)時(shí)/離線數(shù)據(jù)的分析,對(duì)各個(gè)應(yīng)用層協(xié)議進(jìn)行還原,并基于還原出的信息進(jìn)行數(shù)據(jù)挖掘和行為回放。
關(guān)鍵詞:libpcap;數(shù)據(jù)分析;協(xié)議還原1引言
當(dāng)前的社會(huì)是一個(gè)信息的社會(huì),網(wǎng)絡(luò)信息是社會(huì)活動(dòng)的重要資源,對(duì)政治、經(jīng)濟(jì)和文化有著深遠(yuǎn)影響。由于移動(dòng)通信技術(shù)的不斷發(fā)展,探索無線網(wǎng)絡(luò)信息監(jiān)聽與還原技術(shù)有助于信息安全體系的發(fā)展,對(duì)于維護(hù)社會(huì)政治穩(wěn)定和國家信息安全具有重要的現(xiàn)實(shí)意義。
無線網(wǎng)絡(luò)數(shù)據(jù)分解與重構(gòu)主要基于捕獲到的無線局域網(wǎng)數(shù)據(jù)幀,采用分層協(xié)議還原技術(shù),并基于各層的信息實(shí)現(xiàn)重點(diǎn)目標(biāo)識(shí)別和網(wǎng)絡(luò)行為威脅等級(jí)分析。在無線局域網(wǎng)中采用靜默偵聽和存儲(chǔ)轉(zhuǎn)發(fā)兩種工作模式,實(shí)現(xiàn)監(jiān)聽、存儲(chǔ)并自動(dòng)準(zhǔn)實(shí)時(shí)持續(xù)恢復(fù)網(wǎng)絡(luò)用戶的傳輸信息。
2libpcap應(yīng)用流程
libpcap主要由兩部分組成:網(wǎng)絡(luò)分接頭(Network Tap)和數(shù)據(jù)過濾器(Packet Filter)。網(wǎng)絡(luò)分接頭從網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序中收集數(shù)據(jù)拷貝,過濾器決定是否接收該數(shù)據(jù)包。Libpcap利用BSD Packet Filter(BPF)算法對(duì)網(wǎng)卡接收到的鏈路層數(shù)據(jù)包進(jìn)行過濾。BPF算法的基本思想是在有BPF監(jiān)聽的網(wǎng)絡(luò)中,網(wǎng)卡驅(qū)動(dòng)將接收到的數(shù)據(jù)包復(fù)制一份交給BPF過濾器,過濾器根據(jù)用戶定義的規(guī)則決定是否接收此數(shù)據(jù)包以及需要拷貝該數(shù)據(jù)包的那些內(nèi)容,然后將過濾后的數(shù)據(jù)給與過濾器相關(guān)聯(lián)的上層應(yīng)用程序。
libpcap的包捕獲機(jī)制就是在數(shù)據(jù)鏈路層加一個(gè)旁路處理。當(dāng)一個(gè)數(shù)據(jù)包到達(dá)網(wǎng)絡(luò)接口時(shí),libpcap首先利用已經(jīng)創(chuàng)建的Socket從鏈路層驅(qū)動(dòng)程序中獲得該數(shù)據(jù)包的拷貝,再通過Tap函數(shù)將數(shù)據(jù)包發(fā)給BPF過濾器。BPF過濾器根據(jù)用戶已經(jīng)定義好的過濾規(guī)則對(duì)數(shù)據(jù)包進(jìn)行逐一匹配,匹配成功則放入內(nèi)核緩沖區(qū),并傳遞給用戶緩沖區(qū),匹配失敗則直接丟棄。如果沒有設(shè)置過濾規(guī)則,所有數(shù)據(jù)包都將放入內(nèi)核緩沖區(qū),并傳遞給用戶層緩沖區(qū)。
libpcap主要函數(shù)如下:
pcap_findalldevs()函數(shù)用查找機(jī)器的所有可用的網(wǎng)絡(luò)接口,用一個(gè)網(wǎng)絡(luò)接口鏈表示返回。
pcap_lookupdev()函數(shù)用于查找網(wǎng)絡(luò)設(shè)備,返回可被pcap_open_live()函數(shù)調(diào)用的網(wǎng)絡(luò)設(shè)備名指針。
pcap_open_live()函數(shù)用于打開網(wǎng)絡(luò)設(shè)備,并且返回用于捕獲網(wǎng)絡(luò)數(shù)據(jù)包的數(shù)據(jù)包捕獲描述字。對(duì)于此網(wǎng)絡(luò)設(shè)備的操作都要基于此網(wǎng)絡(luò)設(shè)備描述字。
pcap_lookupnet()函數(shù)獲得指定網(wǎng)絡(luò)設(shè)備的網(wǎng)絡(luò)號(hào)和掩碼。
pcap_compile()函數(shù)用于將用戶制定的過濾策略編譯到過濾程序中。
pcap_setfilter()函數(shù)用于設(shè)置過濾器。
pcap_loop()函數(shù)或pcap_dispatch()函數(shù)用于捕獲數(shù)據(jù)包,捕獲后還可以進(jìn)行處理,此外pcap_next()和pcap_next_ex()兩個(gè)函數(shù)也可以用來捕獲數(shù)據(jù)包。
pcap_close()函數(shù)用于關(guān)閉網(wǎng)絡(luò)設(shè)備,釋放資源。
3基于libpcap的數(shù)據(jù)包捕獲流程
首先,調(diào)用Open_pcap函數(shù)對(duì)網(wǎng)卡進(jìn)行初始化設(shè)置,使網(wǎng)卡工作在混雜模式,以監(jiān)聽網(wǎng)絡(luò)上的所有數(shù)據(jù)包。當(dāng)有數(shù)據(jù)包到達(dá)時(shí),網(wǎng)卡上的DMA引擎將包放入到內(nèi)核rx_ring空間,同時(shí)向CPU發(fā)起中斷服務(wù)請(qǐng)求,進(jìn)入中斷服務(wù)程序,然后調(diào)用網(wǎng)卡驅(qū)動(dòng)程序中的函數(shù)將數(shù)據(jù)包封裝成sk_buff結(jié)構(gòu),并脫離驅(qū)動(dòng)程序,轉(zhuǎn)到通用的處理函數(shù)netif_rx中。netif_rx函數(shù)將數(shù)據(jù)包傳入等待隊(duì)列,并置軟中斷標(biāo)志位,其目的是使上層的處理采用軟中斷(do_softirq)來提高CPU的處理效率。在軟中斷中調(diào)用net_rx_action()函數(shù)輪詢backlog隊(duì)列,調(diào)用ip_rev()函數(shù)對(duì)每個(gè)數(shù)據(jù)包做進(jìn)一步處理,完成將數(shù)據(jù)傳送到上層協(xié)議[1]。
4網(wǎng)絡(luò)數(shù)據(jù)分解與重構(gòu)流程描述
網(wǎng)絡(luò)數(shù)據(jù)分解與重構(gòu)的工作流程如下圖所示:通過對(duì)實(shí)時(shí)/離線數(shù)據(jù)的分析,對(duì)各個(gè)應(yīng)用層協(xié)議進(jìn)行還原,并將還原出的信息存儲(chǔ)至數(shù)據(jù)庫和磁盤,并基于還原出的信息進(jìn)行數(shù)據(jù)挖掘和行為回放。
4.1 數(shù)據(jù)流重組
數(shù)據(jù)流重組過程將原始的單個(gè)數(shù)據(jù)包重組為數(shù)據(jù)流。其主要是根據(jù)各報(bào)文的包序號(hào)、各個(gè)標(biāo)識(shí)位的狀態(tài),丟棄重傳,處理亂序,將所有相關(guān)聯(lián)的報(bào)文重組為有序的會(huì)話流。
TCP協(xié)議采用了大量的機(jī)制保證數(shù)據(jù)的可靠傳輸,但在實(shí)際采集到的數(shù)據(jù)包中,將會(huì)采集到一些無用的數(shù)據(jù)包,例如重傳報(bào)文和亂序報(bào)文。因此,數(shù)據(jù)流重組模塊必須對(duì)這類數(shù)據(jù)包進(jìn)行處理。
4.1.1 將無序的數(shù)據(jù)片流有序化
為了方便應(yīng)用層數(shù)據(jù)的還原,需要將無序的數(shù)據(jù)片流有序化,使其排序?yàn)橐粋€(gè)有序的數(shù)據(jù)片流。在實(shí)現(xiàn)數(shù)據(jù)片有序化時(shí),設(shè)置了一個(gè)緩沖隊(duì)列,該緩沖隊(duì)列的最大空間設(shè)置為滑動(dòng)窗口的最大值。當(dāng)接收到一個(gè)數(shù)據(jù)片段時(shí)。首先比較其數(shù)據(jù)片序號(hào)和應(yīng)獲得的數(shù)據(jù)片序號(hào),假如兩者相同,則將其歸人已收的數(shù)據(jù)行列,并從緩沖隊(duì)列中將滿足出隊(duì)條件的數(shù)據(jù)出隊(duì)。若沒有,將其納人緩沖隊(duì)列中,并比較應(yīng)獲得的數(shù)據(jù)片序號(hào)和已獲得的數(shù)據(jù)片,判斷還需要何種數(shù)據(jù)片。
4.1.2 判斷應(yīng)用數(shù)據(jù)的起始和結(jié)束數(shù)據(jù)包
為了確定一個(gè)應(yīng)用層數(shù)據(jù)的起點(diǎn)和終點(diǎn),必須研究對(duì)應(yīng)的應(yīng)用層數(shù)據(jù)格式。對(duì)于HTTP數(shù)據(jù),其有兩種數(shù)據(jù)內(nèi)容,一種為請(qǐng)求數(shù)據(jù)(Request),一種為響應(yīng)數(shù)據(jù)(Response)。對(duì)于請(qǐng)求數(shù)據(jù)來說,可以認(rèn)為數(shù)據(jù)內(nèi)容以“GET”、“POST”、“HEAD”、“HTTP”開頭的即為起始數(shù)據(jù)片。對(duì)于請(qǐng)求信息結(jié)束的判定方法有兩種情況:若請(qǐng)求信息中含有Content-Length域,則可根據(jù)其值依次取出規(guī)定數(shù)目的內(nèi)容,即可確定結(jié)束數(shù)據(jù)片;若請(qǐng)求信息中不含Content-Length域,則可以以兩個(gè)CRLF作為結(jié)束標(biāo)志。對(duì)于響應(yīng)數(shù)據(jù)來說,在設(shè)計(jì)時(shí)可以認(rèn)為數(shù)據(jù)內(nèi)容為“HTTP”的即為起始數(shù)據(jù)片。對(duì)于響應(yīng)信息結(jié)束的判定方法同樣也有兩種情況:若響應(yīng)信息中含有Content-Length域,則可根據(jù)其值依次取出規(guī)定數(shù)目的內(nèi)容,即可確定結(jié)束數(shù)據(jù)片;若響應(yīng)信息中不含Content-Length域,則可根據(jù)該數(shù)據(jù)片是否是FIN片來確定。
如圖3展示了數(shù)據(jù)包重組的流程,數(shù)據(jù)流重組模塊從數(shù)據(jù)采集模塊的緩沖區(qū)讀取數(shù)據(jù)報(bào),如果該數(shù)據(jù)包是第一個(gè)數(shù)據(jù)報(bào),則插入List結(jié)構(gòu)體的第一個(gè)位置,否則逆序根據(jù)其報(bào)文序列號(hào)(Sequence Number)尋找插入位置。如果該序列號(hào)的報(bào)文已存在,則說明該數(shù)據(jù)報(bào)為重傳,將其丟棄。
4.2 應(yīng)用層協(xié)議還原
信息還原模塊的主要職責(zé)是根據(jù)不同的應(yīng)用層協(xié)議,按照特定的邏輯還原出數(shù)據(jù)流中負(fù)載的具體數(shù)據(jù)。
實(shí)現(xiàn)本模塊時(shí)首先需要研究各種常見的應(yīng)用層協(xié)議,整理其工作流程,然后還原出其中負(fù)載的數(shù)據(jù)。
4.2.1 HTTP
HTTP協(xié)議是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。所有的WWW文件都必須遵守這個(gè)標(biāo)準(zhǔn)。此協(xié)議是Web的核心。HTTP還原模塊還原了HTTP請(qǐng)求報(bào)文與響應(yīng)報(bào)文,從報(bào)文中得到通信信息。
4.2.2 FTP
FTP協(xié)議是TCP/IP網(wǎng)絡(luò)上兩臺(tái)計(jì)算機(jī)傳送文件的協(xié)議,F(xiàn)TP是在TCP/IP網(wǎng)絡(luò)和INTERNET上最早使用的協(xié)議之一,它屬于網(wǎng)絡(luò)協(xié)議組的應(yīng)用層。FTP客戶機(jī)可以給服務(wù)器發(fā)出命令來下載文件,上載文件,創(chuàng)建或改變服務(wù)器上的目錄。通過解析FTP控制流進(jìn)而得到數(shù)據(jù)流,最終從數(shù)據(jù)流中還原出傳輸?shù)奈募?/p>
數(shù)據(jù)存儲(chǔ)負(fù)責(zé)存儲(chǔ)重組及還原出的數(shù)據(jù)。此模塊又分為兩大子模塊,分別是數(shù)據(jù)庫存儲(chǔ)模塊和文件存儲(chǔ)模塊。其中,數(shù)據(jù)庫存儲(chǔ)模塊負(fù)責(zé)將數(shù)據(jù)包信息、流信息、HTTP信息、FTP信息和MSN信息存入數(shù)據(jù)庫;文件存儲(chǔ)模塊負(fù)責(zé)和文件相關(guān)的操作,如保存HTTP網(wǎng)頁文件,F(xiàn)TP文件等。
5結(jié)束語
本文首先對(duì)基于libpcap的數(shù)據(jù)包捕獲流程進(jìn)行了分析,通過對(duì)TCP/IP協(xié)議棧進(jìn)行研究,結(jié)合軟件逆向技術(shù),對(duì)HTTP、FTP語音協(xié)議進(jìn)行分析,提出網(wǎng)絡(luò)數(shù)據(jù)還原方法;與此同時(shí),通過對(duì)機(jī)器學(xué)習(xí)方法的研究,實(shí)現(xiàn)了網(wǎng)絡(luò)行為回放;根據(jù)理論研究并實(shí)際進(jìn)行系統(tǒng)的研發(fā)和測試,實(shí)現(xiàn)了網(wǎng)絡(luò)數(shù)據(jù)分解與重構(gòu)。
[參考文獻(xiàn)]
[1] 周照峰.高速網(wǎng)絡(luò)數(shù)據(jù)包捕獲技術(shù)方法研究[J].科技經(jīng)濟(jì)市場,2009.
[2]畢學(xué)堯.高速網(wǎng)絡(luò)的數(shù)據(jù)獲取與分析研究[J].北京;中國科學(xué)院高能物理,2003.
[3]汪世義,秦品樂.基于Linux的高速網(wǎng)絡(luò)包捕獲技術(shù)研究[J].微型電腦應(yīng)用,2006.
[4]李芳馨,劉嘉勇.網(wǎng)絡(luò)數(shù)據(jù)流還原重組技術(shù)研究[J].通信技術(shù),2011.