摘要:網(wǎng)絡(luò)監(jiān)控系統(tǒng)通過(guò)網(wǎng)絡(luò)處理器和改進(jìn)的捕獲驅(qū)動(dòng)進(jìn)行高效數(shù)據(jù)捕獲,通過(guò)設(shè)置虛擬磁盤、優(yōu)化文件系統(tǒng)進(jìn)行海量數(shù)據(jù)存儲(chǔ),并著眼于內(nèi)容審計(jì),采用多線程、簡(jiǎn)化協(xié)議等方法進(jìn)行協(xié)議分析,解決了在千兆級(jí)網(wǎng)絡(luò)監(jiān)控中存在的一系列性能問(wèn)題。
關(guān)鍵詞: 網(wǎng)絡(luò)監(jiān)控; 數(shù)據(jù)捕獲; 數(shù)據(jù)存儲(chǔ); 協(xié)議還原; 內(nèi)容審計(jì)
中圖分類號(hào):TP393.08文獻(xiàn)標(biāo)志碼:A
文章編號(hào):1001-3695(2008)04-1114-03
目前存在的防火墻、IDS等網(wǎng)絡(luò)安全工具,往往著眼于入侵行為本身,沒(méi)有能夠?qū)f(xié)議數(shù)據(jù)包的內(nèi)容進(jìn)行深入的分析;而一些對(duì)內(nèi)部網(wǎng)主機(jī)進(jìn)行監(jiān)控審計(jì)的系統(tǒng)[1],重點(diǎn)在于信息保密和訪問(wèn)控制,一般適用于局域網(wǎng)環(huán)境,應(yīng)用在高速網(wǎng)絡(luò)上存在性能問(wèn)題。本文設(shè)計(jì)的基于內(nèi)容審計(jì)的千兆網(wǎng)絡(luò)監(jiān)控系統(tǒng),使用寬帶網(wǎng)絡(luò)硬件和開放源碼軟件平臺(tái),重視其在千兆級(jí)以上網(wǎng)絡(luò)的性能優(yōu)化。該網(wǎng)絡(luò)監(jiān)控系統(tǒng)的體系結(jié)構(gòu)設(shè)計(jì)可分為數(shù)據(jù)捕獲、數(shù)據(jù)存儲(chǔ)、協(xié)議還原、應(yīng)用功能四部分,如圖1所示。最上層的應(yīng)用功能④是對(duì)各種應(yīng)用需求開發(fā)相應(yīng)的用戶交互環(huán)境,本文主要針對(duì)前三部分即系統(tǒng)下層作設(shè)計(jì)和研究。
1數(shù)據(jù)捕獲模塊
1.1傳統(tǒng)的數(shù)據(jù)捕獲方式
為了獲得對(duì)網(wǎng)絡(luò)上傳輸?shù)乃袛?shù)據(jù)包進(jìn)行監(jiān)控和內(nèi)容審計(jì),且不影響網(wǎng)絡(luò)本身的運(yùn)行,本文采用旁路并接的方法,從核心路由器上導(dǎo)出流量鏡像。這種集中捕獲數(shù)據(jù)的方法相對(duì)于分布式采集數(shù)據(jù),具有易于部署、對(duì)網(wǎng)絡(luò)用戶透明的特點(diǎn);但對(duì)于大流量的網(wǎng)絡(luò)數(shù)據(jù),直接使用普通網(wǎng)卡和相應(yīng)的捕獲軟件很容易造成丟包,使后期的還原無(wú)法進(jìn)行。例如本文最初的實(shí)驗(yàn)環(huán)境為單機(jī)CPU:Pentium Ⅲ 1.2 GHz,內(nèi)存:PC133 DIMM 256 MB x2,網(wǎng)卡:Onboard Intel82559 Ethernet controller,Linux平臺(tái)下Libpcap[2]捕包軟件,IXIA400T作為流量發(fā)生器。表1是筆者在實(shí)驗(yàn)中獲得的網(wǎng)絡(luò)背景流量與捕獲率之間的關(guān)系。
從表1中可以看出:
a)在較小流量網(wǎng)絡(luò)中或者大包的情況下,Libpcap表現(xiàn)良好,丟包較少。
b)在較大背景流量或者小包的條件下,Libpcap捕獲率很低,丟包嚴(yán)重。
c)數(shù)據(jù)包幀長(zhǎng)對(duì)捕獲率影響很大。即使在流量不高的情況下(如背景流量為25 Mbps,幀長(zhǎng)80 Byte),如果網(wǎng)絡(luò)上小包較多,也會(huì)導(dǎo)致捕獲率大幅下降。
d)在100 Mbps背景流量幀長(zhǎng)為80 Byte情況下,系統(tǒng)基本處于癱瘓狀態(tài),無(wú)法響應(yīng)用戶的操作。出現(xiàn)這種現(xiàn)象是因?yàn)檫^(guò)于頻繁的網(wǎng)卡中斷造成的。
1.2硬件負(fù)載均衡機(jī)制
以上的數(shù)據(jù)捕獲遠(yuǎn)不能滿足千兆級(jí)網(wǎng)絡(luò)的需求。為了提高性能,在硬件方面引進(jìn)了Intel公司的ENP2611網(wǎng)絡(luò)處理器(network processor)[3]對(duì)流量進(jìn)行分流,并行采用多個(gè)CPU進(jìn)行處理。分流的策略采用網(wǎng)絡(luò)處理器的負(fù)載均衡功能,將流量可調(diào)控地分流到若干個(gè)CPU上進(jìn)行處理,可處理達(dá)2.5 GB的網(wǎng)絡(luò)流量。但對(duì)于高速網(wǎng)絡(luò)環(huán)境下的突發(fā)流量,仍然會(huì)造成單個(gè)CPU負(fù)載過(guò)高。因此筆者進(jìn)一步設(shè)計(jì)了根據(jù)CPU使用狀態(tài)進(jìn)行動(dòng)態(tài)反饋的負(fù)載調(diào)節(jié)機(jī)制,在某個(gè)CPU負(fù)擔(dān)過(guò)重時(shí),通知前端網(wǎng)絡(luò)處理器減小分流到該CPU上的流量,避免死機(jī)。
1.3 Libpcap零拷貝優(yōu)化機(jī)制
在軟件方面,數(shù)據(jù)捕獲還應(yīng)配置軟件將硬件部分所分流的數(shù)據(jù)包從網(wǎng)絡(luò)接口設(shè)備的緩沖區(qū)傳送到操作系統(tǒng)緩沖區(qū)進(jìn)行處理的軟件代碼。針對(duì)表1中顯示的短幀頻繁中斷造成的捕獲率降低的情況,筆者在Linux環(huán)境下的Libpcap引進(jìn)了零拷貝(zero-copy)技術(shù)[4]。傳統(tǒng)的Libpcap從網(wǎng)卡抓包到應(yīng)用程序,數(shù)據(jù)包要經(jīng)歷三次拷貝:
a)網(wǎng)卡到內(nèi)核緩沖區(qū),該步驟是通過(guò)DMA通道實(shí)現(xiàn)的。
b)內(nèi)核中復(fù)制一份,一份交給正常的應(yīng)用程序,另一份交給抓包程序。
c)內(nèi)核到應(yīng)用層的拷貝。
這三次拷貝中后兩次所消耗的資源較大,影響系統(tǒng)的整體性能。零拷貝驅(qū)動(dòng)取消了后兩次拷貝操作,首先,利用DMA技術(shù)將網(wǎng)絡(luò)數(shù)據(jù)包直接傳遞到系統(tǒng)內(nèi)核預(yù)先分配的地址空間中,避免CPU的參與;同時(shí),利用mmap系統(tǒng)調(diào)用將系統(tǒng)內(nèi)核中存儲(chǔ)數(shù)據(jù)包的內(nèi)存區(qū)域映射到檢測(cè)程序的應(yīng)用程序空間,檢測(cè)程序直接對(duì)這塊內(nèi)存進(jìn)行訪問(wèn),從而減少了系統(tǒng)內(nèi)核向用戶空間的內(nèi)存拷貝。實(shí)踐證明,零拷貝機(jī)制對(duì)高速短數(shù)據(jù)包流量的捕獲率提高了5~10倍。
2數(shù)據(jù)存儲(chǔ)模塊
數(shù)據(jù)存儲(chǔ)作為整個(gè)系統(tǒng)的交換部分,前端所采集的原始數(shù)據(jù)必須經(jīng)過(guò)存儲(chǔ)模塊緩存以到達(dá)協(xié)議還原模塊。在完成協(xié)議還原之后,上層的應(yīng)用功能模塊也要從緩存中得到需要進(jìn)一步處理的內(nèi)容,數(shù)據(jù)存儲(chǔ)模塊的性能在很大程度上決定了整個(gè)系統(tǒng)的性能,因此本文重點(diǎn)提出了數(shù)據(jù)存儲(chǔ)模塊在聯(lián)系前端數(shù)據(jù)捕獲、后臺(tái)協(xié)議還原及上層應(yīng)用功能中等幾大模塊中的核心作用。圖2描述了數(shù)據(jù)存儲(chǔ)模塊的內(nèi)部結(jié)構(gòu),分為協(xié)議還原前數(shù)據(jù)存儲(chǔ)和協(xié)議還原后的數(shù)據(jù)存儲(chǔ)兩部分。
2.1協(xié)議還原前數(shù)據(jù)存儲(chǔ)
原始鏈路層數(shù)據(jù)存儲(chǔ)是為了進(jìn)行協(xié)議還原而臨時(shí)存儲(chǔ),要求簡(jiǎn)潔高效,筆者擯棄了傳統(tǒng)的磁盤陣列—數(shù)據(jù)庫(kù)軟件的存儲(chǔ)方式。因?yàn)榇罅康亓魅霐?shù)據(jù)對(duì)存儲(chǔ)容量和速度提出了很高的要求,整個(gè)系統(tǒng)需要一定的存儲(chǔ)周轉(zhuǎn)空間,但不能無(wú)限制地增加存儲(chǔ),這不符合及時(shí)處理的需求。如果采用磁盤陣列存儲(chǔ)方式,代價(jià)高且讀寫速度慢,因此筆者采用了大內(nèi)存虛擬為鏡像磁盤的形式進(jìn)行高速存儲(chǔ),被捕獲的數(shù)據(jù)直接存儲(chǔ)為內(nèi)存上的dump文件,系統(tǒng)內(nèi)存擴(kuò)展至2~4 GB,但對(duì)于上層開發(fā)人員而言,則是將內(nèi)存視做虛擬的磁盤來(lái)訪問(wèn),使系統(tǒng)需要頻繁讀寫的數(shù)據(jù)直接在內(nèi)存上進(jìn)行,從而整體上提高處理速率,減小存儲(chǔ)周轉(zhuǎn)空間。
在協(xié)議還原階段,對(duì)臨時(shí)存儲(chǔ)的dump文件采取盡力而為的處理方式,如果處理壓力過(guò)大,則應(yīng)該在協(xié)議還原前盡早丟棄部分?jǐn)?shù)據(jù)。丟棄的策略在前期由用戶主動(dòng)定義,將不需要進(jìn)行內(nèi)容審計(jì)或暫時(shí)無(wú)法處理的數(shù)據(jù)丟棄,減小系統(tǒng)負(fù)擔(dān)。具體做法有:首先在前端數(shù)據(jù)捕獲通過(guò)設(shè)置端口和IP 的過(guò)濾機(jī)制丟棄不關(guān)心的協(xié)議和IP段;其次在協(xié)議還原模塊中設(shè)置黑白名單丟棄不關(guān)心的用戶和內(nèi)容,這在3.2節(jié)中有具體實(shí)現(xiàn)方法。
2.2協(xié)議還原后數(shù)據(jù)存儲(chǔ)
對(duì)還原結(jié)果的數(shù)據(jù),必須存儲(chǔ)下來(lái)作進(jìn)一步分析和備份,以供查詢和取證,并進(jìn)行深入的處理。首先是文件系統(tǒng)的改進(jìn):鑒于網(wǎng)絡(luò)實(shí)際流量數(shù)據(jù)零碎、非結(jié)構(gòu)化,無(wú)法直接進(jìn)入數(shù)據(jù)庫(kù)存儲(chǔ),故筆者先以文件的形式進(jìn)行存檔,而這會(huì)造成相應(yīng)存儲(chǔ)目錄下冗長(zhǎng),一個(gè)目錄下的文件過(guò)多,對(duì)該目錄的讀寫會(huì)變慢,實(shí)踐證明,Linux下單個(gè)目錄存儲(chǔ)文件達(dá)到10萬(wàn)級(jí)別的文件數(shù)后,對(duì)目錄的訪問(wèn)消耗的CPU資源高達(dá)80%以上。因此必須根據(jù)各種策略對(duì)數(shù)據(jù)分類,增加多層目錄存儲(chǔ),如在本系統(tǒng)中,按照文件生成的日期時(shí)間進(jìn)行分類存儲(chǔ);其次是采用磁盤前端的高速緩存,積累一定的結(jié)果數(shù)據(jù)后一次性批量寫入,減少磁盤中斷,提高寫入速率。
存檔數(shù)據(jù)有一定的有效期,在決定數(shù)據(jù)內(nèi)容不再有用后,不能無(wú)限制地保存。而按照文件生成的日期時(shí)間存儲(chǔ),正是給各個(gè)目錄加上了顯式的時(shí)間戳,據(jù)此對(duì)目錄進(jìn)行定期清空,才能保證存儲(chǔ)空間的循環(huán)使用,避免磁盤容量不足。
對(duì)于存檔的數(shù)據(jù),當(dāng)人們需要從內(nèi)容審計(jì)的角度調(diào)用時(shí),還是相當(dāng)不方便的,因此本文開辟了二級(jí)存儲(chǔ),將與內(nèi)容審計(jì)相關(guān)的重要數(shù)據(jù),以警報(bào)、摘要等形式組織存入MySQL數(shù)據(jù)庫(kù),建立索引。這樣對(duì)上層的應(yīng)用功能而言就更便于數(shù)據(jù)的深入挖掘。
3協(xié)議還原模塊
協(xié)議還原是指對(duì)獲取的數(shù)據(jù)按照TCP/IP的標(biāo)準(zhǔn)進(jìn)行重組和剖析,根據(jù)不同端口對(duì)應(yīng)的協(xié)議分別進(jìn)行還原,包括協(xié)議命令和協(xié)議傳輸?shù)膬?nèi)容(如HTTP網(wǎng)頁(yè)、POP3/SMTP郵件信息),將滿足應(yīng)用功能的數(shù)據(jù)交給應(yīng)用功能部分(如網(wǎng)頁(yè)的文本化信息、郵件的收發(fā)件人信息等),各種協(xié)議的規(guī)范在相應(yīng)的RFC文檔中有明確的說(shuō)明。這部分是實(shí)現(xiàn)內(nèi)容審計(jì)的重要步驟,在整個(gè)系統(tǒng)中占有舉足輕重的作用,要著重研究其性能的提高。
3.1多線程機(jī)制
在協(xié)議分析過(guò)程中,會(huì)遇到各種異常的協(xié)議數(shù)據(jù),或者是通過(guò)某種協(xié)議封裝的另一協(xié)議的數(shù)據(jù)包。因此,獲得正確完整的還原數(shù)據(jù)是相當(dāng)耗費(fèi)系統(tǒng)資源的,需要設(shè)置合適的資源調(diào)度機(jī)制和異常處理機(jī)制。以SMTP郵件協(xié)議為例,筆者利用Linux下的Libnids[5]軟件對(duì)鏈路層的dump文件進(jìn)行初步分析后,給出的ts結(jié)構(gòu)中含有端口信息,當(dāng)收到源端口或目的端口為25的TCP數(shù)據(jù)包時(shí),則轉(zhuǎn)入相應(yīng)的協(xié)議還原模塊。有兩種進(jìn)入方式:a)直接調(diào)用還原模塊,這在低速網(wǎng)絡(luò)吞吐量較小時(shí)適用;b)通過(guò)注冊(cè)一個(gè)新的線程,在其中調(diào)用SMTP還原模塊,主程序和還原子程序并發(fā)執(zhí)行。值得注意的是如果郵件帶有較大附件,按照前端的捕獲機(jī)制,可能會(huì)使得該郵件的全部數(shù)據(jù)分布在多個(gè)dump文件中,同一協(xié)議的不同dump文件是有序的,但不一定是連續(xù)的,由于包交換的網(wǎng)絡(luò)傳輸機(jī)制,會(huì)使不同協(xié)議數(shù)據(jù)包的到達(dá)次序交錯(cuò),中間會(huì)插入其他協(xié)議的dump文件。因此,采用多線程處理方式,遇到較大的郵件和附件,在主線程中注冊(cè)子線程對(duì)其進(jìn)行處理,由操作系統(tǒng)對(duì)系統(tǒng)資源進(jìn)行調(diào)度,子線程的忙碌雖然可能造成單個(gè)郵件的還原時(shí)間延長(zhǎng),但不至于造成整個(gè)系統(tǒng)的阻塞。值得注意的是,使用多線程時(shí),一定要有子線程工作完畢后的回收機(jī)制和子線程數(shù)量的控制,以免造成系統(tǒng)資源的溢出。因此可以使用Linux中常用的守護(hù)線程對(duì)子線程進(jìn)行管理。
3.2協(xié)議內(nèi)部簡(jiǎn)化
下面繼續(xù)以SMTP協(xié)議為例,說(shuō)明在還原處理內(nèi)部的流程優(yōu)化。根據(jù)RFC 821規(guī)定,SMTP協(xié)議是基于客戶端與服務(wù)器的會(huì)話的簡(jiǎn)單郵件傳輸協(xié)議,所定義的客戶端基本命令見表2[6]。
在著眼于內(nèi)容審計(jì)的監(jiān)控中,一些協(xié)議命令的字段是不必要的,筆者對(duì)協(xié)議數(shù)據(jù)包進(jìn)行簡(jiǎn)化處理,去除一些不關(guān)心的控制信息和包頭信息,以減輕協(xié)議分析的壓力和提高性能。例如在客戶端數(shù)據(jù)中,忽略了大量的協(xié)議命令,只考慮data、“.”(單行點(diǎn)號(hào)字符)、auth login、user、pass等對(duì)于內(nèi)容監(jiān)控所必要的協(xié)議命令。圖3是實(shí)際應(yīng)用中的SMTP協(xié)議還原的簡(jiǎn)化狀態(tài)機(jī)。
值得說(shuō)明的是,最初的SMTP協(xié)議是沒(méi)有認(rèn)證機(jī)制的,但是在實(shí)際應(yīng)用中,由于垃圾郵件的泛濫和發(fā)布信息的不可控,很多SMTP郵件服務(wù)器加入了認(rèn)證機(jī)制,已經(jīng)成為主流應(yīng)用。在設(shè)計(jì)協(xié)議狀態(tài)時(shí),考慮了以auth login登錄認(rèn)證的流程,以獲得用戶名和密碼。此外,為了防止異常的協(xié)議命令和數(shù)據(jù)擾亂正常的郵件還原,在狀態(tài)機(jī)中設(shè)置了很多異常出口,使得等待成為一個(gè)安全的狀態(tài),而關(guān)注的焦點(diǎn)在于發(fā)送狀態(tài)后的內(nèi)容,這樣就大大提高了效率和穩(wěn)定性。在應(yīng)用層次上,還可以通過(guò)設(shè)置黑白名單的方式,靈活地調(diào)整監(jiān)控策略。由于系統(tǒng)實(shí)現(xiàn)了對(duì)auth login命令的還原,在認(rèn)證階段即可獲得郵件的賬戶名,可以根據(jù)是否需要關(guān)注該郵件賬戶,決定是否進(jìn)行后面的大量郵件正文和附件的還原工作,以節(jié)約系統(tǒng)資源,集中關(guān)注目標(biāo)。在實(shí)現(xiàn)系統(tǒng)后,對(duì)發(fā)送郵件監(jiān)控進(jìn)行了測(cè)試。在單機(jī)20/40 Mbps的背景流量下(單機(jī)配置如1.1節(jié)所示),通過(guò)SMTP服務(wù)器發(fā)送100個(gè)郵件。其中80個(gè)帶有附件,包括doc、exe、pdf、jpeg等格式。表4是系統(tǒng)對(duì)SMTP協(xié)議的監(jiān)控情況。
4結(jié)束語(yǔ)
網(wǎng)絡(luò)監(jiān)控是信息安全的重要基石,本文在設(shè)計(jì)基于內(nèi)容審計(jì)的千兆網(wǎng)絡(luò)監(jiān)控系統(tǒng)的實(shí)踐中,研究得出了對(duì)其
底層工作性能的優(yōu)化,總結(jié)如下:
a)數(shù)據(jù)捕獲模塊使用帶反饋的網(wǎng)絡(luò)處理器進(jìn)行負(fù)載均衡,網(wǎng)卡捕包驅(qū)動(dòng)使用帶零拷貝機(jī)制的Libpcap。
b)使用大內(nèi)存虛擬鏡像盤進(jìn)行高效的臨時(shí)存儲(chǔ),存檔數(shù)據(jù)采取文檔和數(shù)據(jù)庫(kù)并用的分級(jí)存儲(chǔ)。
c)針對(duì)內(nèi)容審計(jì)的需要,引入通常IDS類軟件中沒(méi)有的協(xié)議還原功能。協(xié)議還原使用多線程機(jī)制簡(jiǎn)化協(xié)議狀態(tài)。
上述方案使得整個(gè)網(wǎng)絡(luò)安全監(jiān)控系統(tǒng)得以高效穩(wěn)定地運(yùn)行在各種網(wǎng)絡(luò)平臺(tái)上進(jìn)行內(nèi)容審計(jì),為用戶提供各種應(yīng)用功能。
參考文獻(xiàn):
[1]李超,楊義先,鈕心忻. 一種新的高效主機(jī)監(jiān)控審計(jì)系統(tǒng)[J].計(jì)算機(jī)應(yīng)用研究,2006,23(8):97-99.
[2]TCPDUMP public repository[EB/OL]. [2007]. http://www.tcpdump.org/.
[3]SHIMONISHI H, MURASE T. A network processor architecture for flexible QoS control in very high-speed line interfaces[C]//Proc of IEEE Workshop on High Performance Switching and Routing(HPSR 2001).Dallas,Texas: IEEE Computer Society Press, 2001:402-406.
[4]王佰玲,方濱興,云曉春.零拷貝報(bào)文捕獲平臺(tái)的研究與實(shí)現(xiàn)[J]. 計(jì)算機(jī)學(xué)報(bào),2005,28(1):46-52.
[5]Libnids[EB/OL].[2007]. http://libnids.sourceforge.net/.
[6]JOHNSON K. Internet e-mail協(xié)議開發(fā)指南[M].北京:機(jī)械工業(yè)出版社, 2000:1-144.
“本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文”