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