(廣西經(jīng)濟(jì)信息中心,廣西 南寧 530004)
隨著網(wǎng)絡(luò)和計(jì)算機(jī)技術(shù)的不斷發(fā)展,人類社會(huì)進(jìn)入了一個(gè)嶄新的互聯(lián)網(wǎng)時(shí)代,互聯(lián)網(wǎng)已成為人們生活、工作、學(xué)習(xí)和娛樂(lè)中不可或缺的重要部分。然而隨著網(wǎng)絡(luò)規(guī)模的不斷擴(kuò)大,針對(duì)網(wǎng)絡(luò)和計(jì)算機(jī)的攻擊事件也更頻繁的發(fā)生。這些攻擊不但讓人們使用網(wǎng)絡(luò)的正當(dāng)需求得不到滿足,有時(shí)甚至?xí)?lái)嚴(yán)重的后果,對(duì)網(wǎng)絡(luò)和信息安全構(gòu)成了威脅。
目前,針對(duì)各種安全威脅的安全保護(hù)技術(shù)主要有加密和數(shù)字簽名技術(shù)、身份認(rèn)證與訪問(wèn)控制技術(shù)、防火墻技術(shù)、入侵檢測(cè)技術(shù)(IDS)和入侵防御技術(shù)(IPS)等。這些技術(shù)除 IDS和 IPS外,都是靜態(tài)的防御措施,在傳輸網(wǎng)絡(luò)(Transmit Network)中無(wú)法防范針對(duì)大規(guī)模網(wǎng)絡(luò)的、有組織的攻擊行為,實(shí)時(shí)地檢測(cè)入侵或破壞行為,難以保證網(wǎng)絡(luò)系統(tǒng)的安全。入侵檢測(cè)技術(shù)通過(guò)監(jiān)控網(wǎng)絡(luò)或系統(tǒng)資源,尋找違反安全策略的行為或攻擊跡象,并發(fā)出報(bào)警。但入侵檢測(cè)系統(tǒng)是被動(dòng)的,只能在攻擊實(shí)際發(fā)生之后發(fā)出警報(bào)。而入侵防御技術(shù)作為一種新的安全技術(shù),彌補(bǔ)了傳統(tǒng)安全技術(shù)的不足,提出了一種新的綜合解決方案。
IPS是一種主動(dòng)的、積極的防御入侵的系統(tǒng),它部署在網(wǎng)絡(luò)的關(guān)鍵路徑上,檢測(cè)通過(guò)它的網(wǎng)絡(luò)流量。當(dāng)檢測(cè)到攻擊企圖時(shí),它會(huì)自動(dòng)地將攻擊包丟掉或采取措施將攻擊源阻斷。相對(duì)于IDS的被動(dòng)檢測(cè)及誤報(bào)等問(wèn)題,IPS是一種比較主動(dòng)、機(jī)智的防御系統(tǒng)。IPS的檢測(cè)功能類似于IDS,但I(xiàn)PS檢測(cè)到攻擊后會(huì)采取行動(dòng)阻止攻擊,可以說(shuō)IPS是一種基于IDS的、建立在IDS發(fā)展基礎(chǔ)上的新生網(wǎng)絡(luò)安全產(chǎn)品。
本文將以開(kāi)源的Linux系統(tǒng)結(jié)合開(kāi)源的Snort網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)來(lái)研究實(shí)現(xiàn)低成本的網(wǎng)絡(luò)入侵防御系統(tǒng),為中小型網(wǎng)絡(luò)應(yīng)用提供一個(gè)可行的安全保護(hù)。
基于Linux的入侵防御系統(tǒng)的體系結(jié)構(gòu)如圖1所示。該系統(tǒng)由數(shù)據(jù)包過(guò)濾模塊、入侵防御模塊、動(dòng)作模塊和分析、報(bào)警模塊,共4個(gè)模塊組成。
圖1 基于Linux的入侵防御系統(tǒng)體系結(jié)構(gòu)
包過(guò)濾模塊有兩個(gè)功能:一是從以太網(wǎng)中捕獲數(shù)據(jù)包,二是包過(guò)濾。其部署在外網(wǎng)接口上,流進(jìn)入口的網(wǎng)絡(luò)數(shù)據(jù)都要經(jīng)過(guò)防火墻的處理。依據(jù)系統(tǒng)事先設(shè)定好的過(guò)濾規(guī)則,檢查數(shù)據(jù)流中的每個(gè)數(shù)據(jù)包,根據(jù)TCP/IP數(shù)據(jù)包的包頭信息來(lái)決定是否允許該數(shù)據(jù)包通過(guò)。包過(guò)濾的處理時(shí)間很少,幾乎不占用CPU時(shí)間,而且速度快,易于維護(hù)。減少流進(jìn)入侵檢測(cè)模塊的數(shù)據(jù),避免過(guò)多消耗系統(tǒng)資源,使整個(gè)系統(tǒng)成為網(wǎng)絡(luò)性能瓶頸。
入侵防御模塊是入侵防御系統(tǒng)的核心模塊。其依據(jù)規(guī)則庫(kù)進(jìn)行協(xié)議分析,根據(jù)分析結(jié)果提取出攻擊源和攻擊手段等信息,然后將分析獲得的信息形成動(dòng)作模塊的處理指令,以指導(dǎo)動(dòng)作模塊對(duì)相應(yīng)的數(shù)據(jù)包進(jìn)行處理,并把響應(yīng)信息寫(xiě)進(jìn)日志庫(kù)。在這里,規(guī)則庫(kù)的匹配問(wèn)題是關(guān)鍵,與規(guī)則庫(kù)匹配成功, 就說(shuō)明有入侵行為發(fā)生。規(guī)則庫(kù)里規(guī)則的數(shù)量、質(zhì)量和更新程度,加上規(guī)則匹配速度一起決定了入侵防御系統(tǒng)的性能。
動(dòng)作模塊在前邊的模塊對(duì)數(shù)據(jù)包進(jìn)行過(guò)濾、檢測(cè)、分析形成處理結(jié)果后,執(zhí)行處理指令,對(duì)數(shù)據(jù)包丟棄、或記錄、或給數(shù)據(jù)源響應(yīng)。
分析、報(bào)警模塊是對(duì)日志庫(kù)進(jìn)行數(shù)據(jù)統(tǒng)計(jì)、分析后得到人性化的報(bào)表,同時(shí)可以根據(jù)設(shè)置發(fā)出警報(bào)信息。
本文在Linux系統(tǒng)上構(gòu)建了一個(gè)基于Snort_inline和由IPtables配置的Netfliter的IPS。實(shí)現(xiàn)的IPS可以檢測(cè)可疑的網(wǎng)絡(luò)流量,丟棄惡意的數(shù)據(jù)包,或者阻斷惡意的數(shù)據(jù)流,支持4-7層的入侵檢測(cè)和防御。下面詳述組成入侵防御系統(tǒng)各模塊的設(shè)計(jì)以及實(shí)現(xiàn)。
(1)數(shù)據(jù)包過(guò)濾模塊
本系統(tǒng)應(yīng)用基于Netfilter 的數(shù)據(jù)包捕獲方式,通過(guò)調(diào)用BPF 機(jī)制的 Libpcap 函數(shù)庫(kù)函數(shù) 能夠很方便捕獲網(wǎng)絡(luò)數(shù)據(jù)包。然后以IPtables配置的Netfilter防火墻根據(jù)預(yù)先定義好的安全策略對(duì)捕獲網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行過(guò)濾,如果網(wǎng)絡(luò)數(shù)據(jù)包是可信源的數(shù)據(jù)包,就直接讓它通過(guò)該檢測(cè)系統(tǒng);如果網(wǎng)絡(luò)數(shù)據(jù)包是防火墻策略定義內(nèi)的惡意數(shù)據(jù)包,就直接丟棄;最后把過(guò)濾后需要檢測(cè)的數(shù)據(jù)包送進(jìn)QUEUE數(shù)據(jù)隊(duì)列中等待Snort_inline入侵檢測(cè)系統(tǒng)進(jìn)行檢測(cè)。通過(guò)這樣對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行預(yù)處理后,可以減少檢測(cè)的匹配負(fù)載,降低系統(tǒng)資源的消耗,從而提高系統(tǒng)的性能。
IPS在網(wǎng)絡(luò)中必須以透明網(wǎng)橋式存在,才能靈活部署而且不改變?cè)芯W(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。為支持網(wǎng)橋式防火墻,Linux2.4及以上內(nèi)核提供了Netfilter和Iptables(數(shù)據(jù)包過(guò)濾模塊也通過(guò)它們實(shí)現(xiàn))來(lái)實(shí)現(xiàn),Linux2.6以上內(nèi)核自帶配置網(wǎng)橋的工具bridge-utils。故本系統(tǒng)選擇的Linux版本內(nèi)核需在2.6以上。
(2)入侵防御模塊
網(wǎng)絡(luò)入侵防御系統(tǒng)的核心模塊——入侵防御模塊由入侵檢測(cè)系統(tǒng)Snort的Snort_inline模式組成。
Snor是一套開(kāi)放源代碼(open source)的網(wǎng)絡(luò)入侵檢測(cè)軟件(IDS)。Snort使用了以偵測(cè)簽章(signature-based)與通訊協(xié)議(protocol)的偵測(cè)方法。它是一個(gè)可以實(shí)時(shí)監(jiān)視網(wǎng)絡(luò)通信的數(shù)據(jù)包嗅探器。通過(guò)協(xié)議分析和內(nèi)容搜索與匹配,Snort能夠檢測(cè)各種攻擊方法,包括拒絕服務(wù)器攻擊、緩沖區(qū)溢出、CGI攻擊、秘密的端口掃描等。截至目前為止,Snort的被下載次數(shù)已達(dá)到數(shù)百萬(wàn)次。 Snort 被認(rèn)為是全世界最廣泛使用的入侵檢測(cè)軟件。
新版本的Snort有四種工作模式:
? 嗅探器模式(Sniffer Mode):從網(wǎng)絡(luò)中抓取數(shù)據(jù)包,并作為連續(xù)不斷的流顯示在終端上 ;
? 數(shù)據(jù)包記錄器模式(packet logger Mode):將數(shù)據(jù)包記錄到硬盤(pán)日志中;
? 網(wǎng)絡(luò)入侵檢測(cè)模式(NIDS Mode):分析網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)并與入侵規(guī)則庫(kù)相匹配來(lái)發(fā)現(xiàn)入侵行為并告警;
? 在線模式(Inline Mode):將snort當(dāng)成IPS,從iptable讀取數(shù)據(jù)包跟規(guī)則庫(kù)對(duì)比后,告訴iptable是否要把該數(shù)據(jù)包丟掉或是讓它通過(guò)。
這里使用Snort的在線模式。Snort_inline的入侵防御過(guò)程包括讀取數(shù)據(jù)包、入侵檢測(cè)和處理數(shù)據(jù)包3個(gè)步驟。
①讀取數(shù)據(jù)包
Snort_inline使用libipq 庫(kù),通過(guò)netlink 接口從內(nèi)核態(tài)的Netfilter 的QUEUE數(shù)據(jù)隊(duì)列中獲取數(shù)據(jù)包。Snort的數(shù)據(jù)包解析過(guò)程由decode()函數(shù)來(lái)完成,原理是按照從鏈路層到傳輸層各種協(xié)議的相應(yīng)格式去分析得到的數(shù)據(jù)流,并把所得結(jié)果填充數(shù)據(jù)結(jié)構(gòu)Packet。在入侵防御系統(tǒng)的實(shí)現(xiàn)中,數(shù)據(jù)包讀取過(guò)程中已經(jīng)進(jìn)行了包的分片重組等工作,發(fā)送到入侵檢測(cè)引擎的數(shù)據(jù)包是完整的。
②入侵檢測(cè)
Snort_inline根據(jù)命令行參數(shù)進(jìn)行初始化,由參數(shù)設(shè)定工作方式,解析規(guī)則庫(kù),把規(guī)則庫(kù)中的規(guī)則(rules)生成二維規(guī)則鏈表。Snort_inline的數(shù)據(jù)包處理函數(shù)ProcessPacket()對(duì)解析過(guò)的數(shù)據(jù)包進(jìn)行入侵檢測(cè)。數(shù)據(jù)包處理函數(shù)PreocessPacket()首先調(diào)用設(shè)置好的解析函數(shù)對(duì)數(shù)據(jù)包進(jìn)行協(xié)議解析,并設(shè)置Packet數(shù)據(jù)結(jié)構(gòu),根據(jù)需求輸出或者忽略對(duì)數(shù)據(jù)包各層協(xié)議的解析結(jié)果,然后調(diào)用主檢測(cè)引擎。檢測(cè)函數(shù)Detect()按照一定的順序應(yīng)用規(guī)則鏈表進(jìn)行檢測(cè),最后返回入侵檢測(cè)處理的結(jié)果。
③處理數(shù)據(jù)包
對(duì)數(shù)據(jù)包進(jìn)行入侵檢測(cè)以后,根據(jù)與規(guī)則庫(kù)中規(guī)則
(rules)匹配的結(jié)果,用libipq庫(kù)函數(shù)ipq_set_verdict通過(guò)netlink接口與IPtables配置的Netfilter通訊,針對(duì)每個(gè)數(shù)據(jù)包發(fā)出相應(yīng)的處理指令。Snort_inline實(shí)現(xiàn)入侵防御功能有四種動(dòng)作drop、sdrop、reject和replace。
? drop:Netfilter將數(shù)據(jù)包丟棄,并且根據(jù)Snort配置文件中的設(shè)置記錄日志;
? sdrop:Netfilter將數(shù)據(jù)包丟棄,并不記錄日志;
? reject:告訴IPtables配置的Netfliter將數(shù)據(jù)包丟棄,記錄日志,并且通過(guò)libnet庫(kù)函數(shù)發(fā)送TCP的reset回去或UDP的ICMP端口不能到達(dá)的信息回去。
? replace:可以讓rules修改數(shù)據(jù)包內(nèi)容,但修改內(nèi)容的資料長(zhǎng)度要與原始數(shù)據(jù)包的資料內(nèi)容長(zhǎng)度一樣,然后把替換處理過(guò)的包發(fā)送給Netfilter。
(4)動(dòng)作模塊
動(dòng)作模塊由IPtables配置的Netfilter防火墻組成,其接收入侵防御模塊的指令,對(duì)數(shù)據(jù)包執(zhí)行四種操作drop、sdrop、reject和replace中的一種。
(5)分析、報(bào)警模塊
分析、報(bào)警模塊由BASE充當(dāng)。其處理、統(tǒng)計(jì)分析入侵防御模塊存儲(chǔ)于MySQL數(shù)據(jù)庫(kù)中的日志,可以自定義警報(bào)的發(fā)生以及顯示信息的格式。
綜上所述,基于Linux的入侵防御系統(tǒng)的實(shí)現(xiàn)涉及的軟件程序有:
? Linux操作系統(tǒng):CentOS 是當(dāng)前最流行的商業(yè)版 Linux-- Red Hat Enterprise Linux
(RHEL)的克隆版,是RHEL源代碼再編譯的產(chǎn)物 。它和 RHEL 的區(qū)別除了沒(méi)有 RHEL 一樣的技術(shù)支持以外,就是去掉了RHEL的商標(biāo)信息,修正了 RHEL 已知的一些 Bug,所以,其穩(wěn)定性值得我們信賴。 還有,它是開(kāi)源免費(fèi)的。
選用CentOS 5.3,其對(duì)應(yīng)Red Hat Enterprise Linux 5.3版本,核心是linux kernel version 2.6.27(2008.10.10發(fā)布)。
? IPtables配置的Netfilter防火墻,內(nèi)核2.4版本以上Linux支持。
? Snort:選用Snort2.8.4.1版。
? MySQL數(shù)據(jù)庫(kù):MySQL5.1以上版本。
? BASE:日志分析工具。
? oinkmaster:規(guī)則庫(kù)更新組件。
? 支持庫(kù):ip_queue、libipq、libdnet、libpcap、 pcre、ptables-devel等;
入侵防御系統(tǒng)數(shù)據(jù)流程圖如下所示:
圖2 入侵防御系統(tǒng)數(shù)據(jù)流程圖
本文將入侵檢測(cè)軟件Snort 和防火墻框架Netfilter有機(jī)地結(jié)合在一起,設(shè)計(jì)與實(shí)現(xiàn)了一個(gè)Linux下基于Snort_inline和Netfilter/IPtables的入侵防御系統(tǒng),其應(yīng)用能進(jìn)一步提高網(wǎng)絡(luò)系統(tǒng)的安全。但,該系統(tǒng)還存在一些不足,比如在實(shí)際應(yīng)用中存在單點(diǎn)故障等。這需要進(jìn)一步進(jìn)行研究解決。
[1]衣治安,裴蕾.基于Snort和Netfilter的入侵防御系統(tǒng)[J].齊齊哈爾大學(xué)學(xué)報(bào),2007,(5).
[2](美)Steve Suehring/ Robert L.Ziegler/. Linux 防火墻[M].何涇沙,等譯.機(jī)械工業(yè)出版社,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.