[摘 要] 當(dāng)前,入侵檢測(cè)系統(tǒng)已經(jīng)成為安全解決方案的一個(gè)必要條件,然而,入侵檢測(cè)不能主動(dòng)地阻斷具有攻擊特征的數(shù)據(jù)流。它往往是被動(dòng)的監(jiān)視局域網(wǎng),讓網(wǎng)絡(luò)管理員對(duì)攻擊行為采取相應(yīng)的措施。本文討論了入侵防御系統(tǒng)(IPS)的概念、優(yōu)點(diǎn)和弱點(diǎn),并根據(jù)著名的開(kāi)放源代碼網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)Snort的內(nèi)部組織特點(diǎn),提出了一種讓Snort實(shí)現(xiàn)主動(dòng)阻斷攻擊數(shù)據(jù)流的方法。
[關(guān)鍵詞] 網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng) 網(wǎng)絡(luò)入侵防御系統(tǒng) Snort
一、讓Snort實(shí)現(xiàn)主動(dòng)防御功能
1.設(shè)計(jì)思路。通過(guò)分析Snort的整體結(jié)構(gòu)可知,它充分利用了插件機(jī)制,這種特點(diǎn)使它更靈活,更容易系統(tǒng)功能的增加,使程序具有很強(qiáng)的可擴(kuò)展性。IPS與IDS的主要區(qū)別就是IPS實(shí)現(xiàn)了主動(dòng)的阻斷攻擊。利用Snort的這種內(nèi)部組織結(jié)構(gòu)和IPS的特點(diǎn),可以設(shè)想,只要為Snort增加一個(gè)能夠阻斷數(shù)據(jù)包的模塊(假設(shè)稱該模塊為“在線處理模塊”),并把Snort置于在線的位置,當(dāng)Snort檢測(cè)到某種入侵行為時(shí),通過(guò)對(duì)該模塊的調(diào)用,就可以達(dá)到阻斷含有入侵傾向數(shù)據(jù)流的目的。
Snort的檢測(cè)引擎主要是基于規(guī)則的匹配。Snort規(guī)則類型(規(guī)則行為)包括:alert、log、pass、activate和dynamic。我們就讓Snort做拒絕與該規(guī)則匹配的數(shù)據(jù)包的處理。剩余的任務(wù)就是,當(dāng)Snort找到了和被捕獲的數(shù)據(jù)包相匹配的規(guī)則時(shí),Snort通過(guò)什么條件來(lái)判斷該數(shù)據(jù)包是否符合做拒絕處理,在Snort源文件rules.h中定義了OptTreeNode的數(shù)據(jù)結(jié)構(gòu)。為該結(jié)構(gòu)中增加標(biāo)志位。當(dāng)Snort進(jìn)行規(guī)則解析時(shí),通過(guò)判斷規(guī)則的類型和priority、classtype參數(shù)的值,當(dāng)符合一定的條件時(shí),給相應(yīng)的標(biāo)志位置“1”。 這樣,當(dāng)檢測(cè)引擎觸發(fā)了某條規(guī)則,則通過(guò)判斷這些標(biāo)志位,決定是否阻斷相對(duì)應(yīng)的數(shù)據(jù)包。
為了使Snort更具有靈活性,還可以為之增加一個(gè)可選的功能:通過(guò)用戶的選擇,即可使Snort以IDS方式工作,也可以使其以IPS方式工作。
2.實(shí)現(xiàn)阻斷數(shù)據(jù)包的條件。為了實(shí)現(xiàn)Snort的IPS功能,需要特定的底層庫(kù)Iptables來(lái)代替原有的Libpcap(Libpcap是Snort的底層庫(kù))。Iptables用于計(jì)算和控制在Linux平臺(tái)上的外部連接。netfilter /iptables支持Linux2.4內(nèi)核,能夠進(jìn)行數(shù)據(jù)包過(guò)濾,網(wǎng)絡(luò)地址轉(zhuǎn)換及其它的數(shù)據(jù)包處理。
3.實(shí)現(xiàn)方法。(1)給Snort源文件snort.h中定義的pv結(jié)構(gòu)增加標(biāo)志位。在PV結(jié)構(gòu)中增加一個(gè)標(biāo)志位:inline。如果期望Snort以在線的(IPS)方式工作,則設(shè)該標(biāo)志被置“1”,否則Snort工作在普通的IDS工作方式。(2)在OptTreeNode(規(guī)則選項(xiàng))結(jié)構(gòu)中增加兩個(gè)標(biāo)志位:reject和drop。當(dāng)某規(guī)則的規(guī)則類型為alert,且classtype關(guān)鍵字屬于1級(jí)優(yōu)先級(jí),或者priority大于9,則當(dāng)程序進(jìn)行規(guī)則解析時(shí),為屬于該規(guī)則的OptTreeNode結(jié)構(gòu)標(biāo)志位reject置“1”。當(dāng)某規(guī)則的規(guī)則類型為alert,且classtype關(guān)鍵字屬于2級(jí)優(yōu)先級(jí),或者priority為7或8,則當(dāng)程序進(jìn)行規(guī)則解析時(shí),為屬于該規(guī)則的OptTreeNode結(jié)構(gòu)標(biāo)志位drop置“1”。
4.如果被捕獲的數(shù)據(jù)包與某規(guī)則相匹配,這時(shí)說(shuō)明Snort已經(jīng)發(fā)現(xiàn)攻擊行為。此時(shí)判斷該規(guī)則的OptTreeNode結(jié)構(gòu)中兩個(gè)標(biāo)志位的值,如果drop為1,調(diào)用在線處理模塊,對(duì)該包做阻斷處理并輸出報(bào)警信息。如果reject為1,調(diào)用在線處理模塊,阻斷該包、輸出報(bào)警信息,如果該包協(xié)議類型為T(mén)CP,向數(shù)據(jù)源發(fā)送RESET報(bào)文,終止該連接;如果協(xié)議類型是UDP,向數(shù)據(jù)源發(fā)送ICMP端口不可達(dá)報(bào)文,終止該連接。圖1是Snort以在線方式運(yùn)行的響應(yīng)處理過(guò)程。
二、結(jié)束語(yǔ)
本文提出的使Snort增加主動(dòng)阻斷攻擊數(shù)據(jù)流功能的方法具有以下優(yōu)點(diǎn):
1.該方法簡(jiǎn)單、靈活,不需要改動(dòng)整體結(jié)構(gòu)和Snort原有的規(guī)則,只需在其原有的系統(tǒng)和規(guī)則的基礎(chǔ)上給PV結(jié)構(gòu)和OptTreeNode結(jié)構(gòu)增加了幾個(gè)標(biāo)志位,為之添加現(xiàn)有的Iptables底層庫(kù)和Libnet,增加一些函數(shù)即可實(shí)現(xiàn)。
2.只有符合某種嚴(yán)重級(jí)別的數(shù)據(jù)流才對(duì)之采取阻斷處理的策略,而并不是所有的符合報(bào)警的具有攻擊特征的包均采取這種響應(yīng)處理方式,減少了因誤檢而阻斷正常的數(shù)據(jù)流的可能性。
3.只是在Snort原有的功能上增加了主動(dòng)防御功能,沒(méi)有改變?cè)邢到y(tǒng)的功能。
參考文獻(xiàn):
[1]R.G Bace:入侵檢測(cè)[M]. 陳明奇,吳秋新,張振濤等譯. 北京:人民郵電出版社,2001,6
[2]韓東海 王 超 李 群:入侵檢測(cè)系統(tǒng)及實(shí)例剖析[M]. 北京:清華大學(xué)出版社, 2002,4
[3]Joel Snyder. IPS: A technology, not a product. Network World, 2002,11
[4]Joel Snyder. What is an IPS, anyway? Network World,2002,8
[5]張悅連 郭文東:Snort規(guī)則及規(guī)則處理模塊分析. 河北科技大學(xué)學(xué)報(bào),2003,12