(廣西經濟信息中心,廣西 南寧 530004)
隨著網絡和計算機技術的不斷發展,人類社會進入了一個嶄新的互聯網時代,互聯網已成為人們生活、工作、學習和娛樂中不可或缺的重要部分。然而隨著網絡規模的不斷擴大,針對網絡和計算機的攻擊事件也更頻繁的發生。這些攻擊不但讓人們使用網絡的正當需求得不到滿足,有時甚至會帶來嚴重的后果,對網絡和信息安全構成了威脅。
目前,針對各種安全威脅的安全保護技術主要有加密和數字簽名技術、身份認證與訪問控制技術、防火墻技術、入侵檢測技術(IDS)和入侵防御技術(IPS)等。這些技術除 IDS和 IPS外,都是靜態的防御措施,在傳輸網絡(Transmit Network)中無法防范針對大規模網絡的、有組織的攻擊行為,實時地檢測入侵或破壞行為,難以保證網絡系統的安全。入侵檢測技術通過監控網絡或系統資源,尋找違反安全策略的行為或攻擊跡象,并發出報警。但入侵檢測系統是被動的,只能在攻擊實際發生之后發出警報。而入侵防御技術作為一種新的安全技術,彌補了傳統安全技術的不足,提出了一種新的綜合解決方案。
IPS是一種主動的、積極的防御入侵的系統,它部署在網絡的關鍵路徑上,檢測通過它的網絡流量。當檢測到攻擊企圖時,它會自動地將攻擊包丟掉或采取措施將攻擊源阻斷。相對于IDS的被動檢測及誤報等問題,IPS是一種比較主動、機智的防御系統。IPS的檢測功能類似于IDS,但IPS檢測到攻擊后會采取行動阻止攻擊,可以說IPS是一種基于IDS的、建立在IDS發展基礎上的新生網絡安全產品。
本文將以開源的Linux系統結合開源的Snort網絡入侵檢測系統來研究實現低成本的網絡入侵防御系統,為中小型網絡應用提供一個可行的安全保護。
基于Linux的入侵防御系統的體系結構如圖1所示。該系統由數據包過濾模塊、入侵防御模塊、動作模塊和分析、報警模塊,共4個模塊組成。

圖1 基于Linux的入侵防御系統體系結構
包過濾模塊有兩個功能:一是從以太網中捕獲數據包,二是包過濾。其部署在外網接口上,流進入口的網絡數據都要經過防火墻的處理。依據系統事先設定好的過濾規則,檢查數據流中的每個數據包,根據TCP/IP數據包的包頭信息來決定是否允許該數據包通過。包過濾的處理時間很少,幾乎不占用CPU時間,而且速度快,易于維護。減少流進入侵檢測模塊的數據,避免過多消耗系統資源,使整個系統成為網絡性能瓶頸。
入侵防御模塊是入侵防御系統的核心模塊。其依據規則庫進行協議分析,根據分析結果提取出攻擊源和攻擊手段等信息,然后將分析獲得的信息形成動作模塊的處理指令,以指導動作模塊對相應的數據包進行處理,并把響應信息寫進日志庫。在這里,規則庫的匹配問題是關鍵,與規則庫匹配成功, 就說明有入侵行為發生。規則庫里規則的數量、質量和更新程度,加上規則匹配速度一起決定了入侵防御系統的性能。
動作模塊在前邊的模塊對數據包進行過濾、檢測、分析形成處理結果后,執行處理指令,對數據包丟棄、或記錄、或給數據源響應。
分析、報警模塊是對日志庫進行數據統計、分析后得到人性化的報表,同時可以根據設置發出警報信息。
本文在Linux系統上構建了一個基于Snort_inline和由IPtables配置的Netfliter的IPS。實現的IPS可以檢測可疑的網絡流量,丟棄惡意的數據包,或者阻斷惡意的數據流,支持4-7層的入侵檢測和防御。下面詳述組成入侵防御系統各模塊的設計以及實現。
(1)數據包過濾模塊
本系統應用基于Netfilter 的數據包捕獲方式,通過調用BPF 機制的 Libpcap 函數庫函數 能夠很方便捕獲網絡數據包。然后以IPtables配置的Netfilter防火墻根據預先定義好的安全策略對捕獲網絡數據包進行過濾,如果網絡數據包是可信源的數據包,就直接讓它通過該檢測系統;如果網絡數據包是防火墻策略定義內的惡意數據包,就直接丟棄;最后把過濾后需要檢測的數據包送進QUEUE數據隊列中等待Snort_inline入侵檢測系統進行檢測。通過這樣對網絡數據包進行預處理后,可以減少檢測的匹配負載,降低系統資源的消耗,從而提高系統的性能。
IPS在網絡中必須以透明網橋式存在,才能靈活部署而且不改變原有網絡拓撲結構。為支持網橋式防火墻,Linux2.4及以上內核提供了Netfilter和Iptables(數據包過濾模塊也通過它們實現)來實現,Linux2.6以上內核自帶配置網橋的工具bridge-utils。故本系統選擇的Linux版本內核需在2.6以上。
(2)入侵防御模塊
網絡入侵防御系統的核心模塊——入侵防御模塊由入侵檢測系統Snort的Snort_inline模式組成。
Snor是一套開放源代碼(open source)的網絡入侵檢測軟件(IDS)。Snort使用了以偵測簽章(signature-based)與通訊協議(protocol)的偵測方法。它是一個可以實時監視網絡通信的數據包嗅探器。通過協議分析和內容搜索與匹配,Snort能夠檢測各種攻擊方法,包括拒絕服務器攻擊、緩沖區溢出、CGI攻擊、秘密的端口掃描等。截至目前為止,Snort的被下載次數已達到數百萬次。 Snort 被認為是全世界最廣泛使用的入侵檢測軟件。
新版本的Snort有四種工作模式:
? 嗅探器模式(Sniffer Mode):從網絡中抓取數據包,并作為連續不斷的流顯示在終端上 ;
? 數據包記錄器模式(packet logger Mode):將數據包記錄到硬盤日志中;
? 網絡入侵檢測模式(NIDS Mode):分析網絡中傳輸的數據并與入侵規則庫相匹配來發現入侵行為并告警;
? 在線模式(Inline Mode):將snort當成IPS,從iptable讀取數據包跟規則庫對比后,告訴iptable是否要把該數據包丟掉或是讓它通過。
這里使用Snort的在線模式。Snort_inline的入侵防御過程包括讀取數據包、入侵檢測和處理數據包3個步驟。
①讀取數據包
Snort_inline使用libipq 庫,通過netlink 接口從內核態的Netfilter 的QUEUE數據隊列中獲取數據包。Snort的數據包解析過程由decode()函數來完成,原理是按照從鏈路層到傳輸層各種協議的相應格式去分析得到的數據流,并把所得結果填充數據結構Packet。在入侵防御系統的實現中,數據包讀取過程中已經進行了包的分片重組等工作,發送到入侵檢測引擎的數據包是完整的。
②入侵檢測
Snort_inline根據命令行參數進行初始化,由參數設定工作方式,解析規則庫,把規則庫中的規則(rules)生成二維規則鏈表。Snort_inline的數據包處理函數ProcessPacket()對解析過的數據包進行入侵檢測。數據包處理函數PreocessPacket()首先調用設置好的解析函數對數據包進行協議解析,并設置Packet數據結構,根據需求輸出或者忽略對數據包各層協議的解析結果,然后調用主檢測引擎。檢測函數Detect()按照一定的順序應用規則鏈表進行檢測,最后返回入侵檢測處理的結果。
③處理數據包
對數據包進行入侵檢測以后,根據與規則庫中規則
(rules)匹配的結果,用libipq庫函數ipq_set_verdict通過netlink接口與IPtables配置的Netfilter通訊,針對每個數據包發出相應的處理指令。Snort_inline實現入侵防御功能有四種動作drop、sdrop、reject和replace。
? drop:Netfilter將數據包丟棄,并且根據Snort配置文件中的設置記錄日志;
? sdrop:Netfilter將數據包丟棄,并不記錄日志;
? reject:告訴IPtables配置的Netfliter將數據包丟棄,記錄日志,并且通過libnet庫函數發送TCP的reset回去或UDP的ICMP端口不能到達的信息回去。
? replace:可以讓rules修改數據包內容,但修改內容的資料長度要與原始數據包的資料內容長度一樣,然后把替換處理過的包發送給Netfilter。
(4)動作模塊
動作模塊由IPtables配置的Netfilter防火墻組成,其接收入侵防御模塊的指令,對數據包執行四種操作drop、sdrop、reject和replace中的一種。
(5)分析、報警模塊
分析、報警模塊由BASE充當。其處理、統計分析入侵防御模塊存儲于MySQL數據庫中的日志,可以自定義警報的發生以及顯示信息的格式。
綜上所述,基于Linux的入侵防御系統的實現涉及的軟件程序有:
? Linux操作系統:CentOS 是當前最流行的商業版 Linux-- Red Hat Enterprise Linux
(RHEL)的克隆版,是RHEL源代碼再編譯的產物 。它和 RHEL 的區別除了沒有 RHEL 一樣的技術支持以外,就是去掉了RHEL的商標信息,修正了 RHEL 已知的一些 Bug,所以,其穩定性值得我們信賴。 還有,它是開源免費的。
選用CentOS 5.3,其對應Red Hat Enterprise Linux 5.3版本,核心是linux kernel version 2.6.27(2008.10.10發布)。
? IPtables配置的Netfilter防火墻,內核2.4版本以上Linux支持。
? Snort:選用Snort2.8.4.1版。
? MySQL數據庫:MySQL5.1以上版本。
? BASE:日志分析工具。
? oinkmaster:規則庫更新組件。
? 支持庫:ip_queue、libipq、libdnet、libpcap、 pcre、ptables-devel等;
入侵防御系統數據流程圖如下所示:

圖2 入侵防御系統數據流程圖
本文將入侵檢測軟件Snort 和防火墻框架Netfilter有機地結合在一起,設計與實現了一個Linux下基于Snort_inline和Netfilter/IPtables的入侵防御系統,其應用能進一步提高網絡系統的安全。但,該系統還存在一些不足,比如在實際應用中存在單點故障等。這需要進一步進行研究解決。
[1]衣治安,裴蕾.基于Snort和Netfilter的入侵防御系統[J].齊齊哈爾大學學報,2007,(5).
[2](美)Steve Suehring/ Robert L.Ziegler/. Linux 防火墻[M].何涇沙,等譯.機械工業出版社,2006:41-44.
[3]Jay Beale, Andrew R. Baker, Joel Esler, et al. Snort IDS and IPS Toolkit. Syngress Media Inc,2007:176-219.
[4]Jay Beale, Andrew R. Baker, Joel Esler, et al. Snort IDS and IPS Toolkit. Syngress Media Inc,2007:604-616.