一個(gè)穩(wěn)定、安全、高效的網(wǎng)絡(luò)環(huán)境,不僅需要有防火墻系統(tǒng)、身份驗(yàn)證、加密傳輸?shù)葌鹘y(tǒng)安保措施,也需要構(gòu)建入侵檢測(cè)系統(tǒng)IDS(Intrusion Detection System)進(jìn)行主動(dòng)性的偵知。目前,主機(jī)采用Linux承載平臺(tái)運(yùn)行Snort系統(tǒng),不愧為中小學(xué)校閱網(wǎng)搭建網(wǎng)絡(luò)IDS的理想解決方案。Snort是由Martin Roesch開發(fā)的,基于模式發(fā)現(xiàn)技術(shù)的IDS系統(tǒng)。它假定所有入侵行為(或手段)都具有特定的模式或特征,因此只要將相關(guān)入侵行為的特征寫入其檢測(cè)規(guī)則庫(kù),就可以用匹配的方法發(fā)現(xiàn)。Snort的優(yōu)點(diǎn)在于它是遵循公共許可證GPL的免費(fèi)軟件,且具有安裝配置簡(jiǎn)便、擴(kuò)展性好、誤報(bào)少、反應(yīng)迅速、可跨多種平臺(tái)運(yùn)行等優(yōu)點(diǎn)。
一、Snort系統(tǒng)的工作流程與體系結(jié)構(gòu)
Snort占用系統(tǒng)資源很少,可以長(zhǎng)時(shí)間穩(wěn)定運(yùn)行。因此,應(yīng)選用基于Linux系統(tǒng)的主機(jī)作為Snort的承載平臺(tái)。因?yàn)長(zhǎng)inux系統(tǒng)提供了穩(wěn)定,高效的網(wǎng)絡(luò)服務(wù)支持,內(nèi)置TCP/IP協(xié)議,它是真正意義上的多任務(wù)、多用戶操作系統(tǒng)。Linux還具有兼容IEEEPOSIX標(biāo)準(zhǔn),支持?jǐn)?shù)十種文件系統(tǒng)格式,采用先進(jìn)的內(nèi)存管理機(jī)制等優(yōu)點(diǎn),它的安全性和穩(wěn)定性優(yōu)于Windows網(wǎng)絡(luò)系統(tǒng)。無(wú)論從執(zhí)行效率還是經(jīng)濟(jì)角度考慮都是較適宜的選擇。
基于SnorL的IDS系統(tǒng)工作流程如右圖所示:
1.加載檢測(cè)規(guī)則,調(diào)用Libpcap庫(kù)函數(shù)采集數(shù)據(jù),該庫(kù)函數(shù)可以為應(yīng)用程序提供直接從鏈路層捕獲數(shù)據(jù)包的接口函數(shù),并可以設(shè)置數(shù)據(jù)包的過濾器,來(lái)捕獲指定的數(shù)據(jù)。
2.解碼抓取來(lái)的數(shù)據(jù)包,按照TCP/IP協(xié)議的不同層次將數(shù)據(jù)包進(jìn)行解析,為Snort檢測(cè)引擎準(zhǔn)備數(shù)據(jù)。
3.根據(jù)加載的規(guī)則依次掃描每個(gè)數(shù)據(jù)包,一旦包內(nèi)的數(shù)據(jù)和檢測(cè)規(guī)則產(chǎn)生匹配,則根據(jù)規(guī)則中的處理策略對(duì)其進(jìn)行處理,不產(chǎn)生規(guī)則匹配的數(shù)據(jù)包被視為正常包而忽略。(Snort對(duì)每個(gè)被檢測(cè)的數(shù)據(jù)包都定義了三種處理方式:報(bào)警alert、記錄log和忽略pass)。
4.產(chǎn)生告警并記錄日志。在缺省安裝配置下,系統(tǒng)日志將寫入/Var/log/Snort目錄中。告警文什寫入/Var/log/Snort/alert目錄中。
二、Snort檢測(cè)原理分析
為了能夠快速檢測(cè)IP網(wǎng)絡(luò)數(shù)據(jù)包,對(duì)檢測(cè)到的可疑情況做出迅速反應(yīng),Snort將規(guī)則描述為規(guī)則鏈表結(jié)構(gòu),鏈表由表頭(包含源端、目的端IP地址、協(xié)議、連接端口號(hào))和鏈表選項(xiàng)(包含如TCP標(biāo)志位、ICMP代碼,有效負(fù)載大小,規(guī)則內(nèi)容)組成。這樣通過依次過濾Snort規(guī)則庫(kù)中定義的規(guī)則,Snort分析每個(gè)數(shù)據(jù)包,一旦發(fā)現(xiàn)與規(guī)則特征產(chǎn)生匹配的數(shù)據(jù)包則根據(jù)預(yù)先定義的方式處理(告警或記錄),否則忽略當(dāng)前分析的數(shù)據(jù)包,轉(zhuǎn)向下一個(gè)繼續(xù)分析。
Snort廣泛支持各種分析和規(guī)則匹配,目前能支持的協(xié)議類型有TCP協(xié)議、UDP協(xié)議、IPX協(xié)議,ICMP等協(xié)議。隨著系統(tǒng)軟件版本的不斷改進(jìn),Snort可進(jìn)行檢測(cè)的協(xié)議種類將不斷豐富。需要注意的是,當(dāng)剛開始使用Snort時(shí),網(wǎng)絡(luò)管理人員常常不能將檢測(cè)規(guī)則描述得比較完善,此時(shí)可以從Snort的站點(diǎn)(WWW.Snort.org)上下載現(xiàn)成的規(guī)則庫(kù),再根據(jù)本單位特有的網(wǎng)絡(luò)情況,單獨(dú)定義若干規(guī)則向其中添加即可。
Snotrt規(guī)則的總體格式分四部分,即為處理動(dòng)作、協(xié)議類型、數(shù)據(jù)流向、檢測(cè)端口。例:記錄來(lái)自任何端口的,目標(biāo)端口范圍在1~1024的UDP數(shù)據(jù)流,描述為:log udp any any—>192.168.1.0/24 1:1024。
三、Snort系統(tǒng)的安裝與運(yùn)行
Snort對(duì)計(jì)算機(jī)系統(tǒng)軟,硬件環(huán)境的要求不高,由于要求長(zhǎng)期在線,有條件的推薦使用專用服務(wù)器(處理器相當(dāng)于PⅢ及以上配置皆可)運(yùn)行。系統(tǒng)軟件方面,應(yīng)用比較普遍的微軟的Windows 2000Server系列或Linux等網(wǎng)絡(luò)操作系統(tǒng)都可以安裝運(yùn)行Snort。這里將以Linux系統(tǒng)為例介紹,步驟如下:
可以從Snort的站點(diǎn)獲得其源代碼或者RPM包。使用源代碼安裝Snort需要1ibpcap庫(kù),可以從ftp://ftp.ee.1b1.gov下載安裝。
1.安裝RPM包
可以使用下面的命令:(注:1.7為Snort版本號(hào))bash#rpm-Ihv--nodeps Snort-1.7-1.i386.rpm開始解壓規(guī)則庫(kù)libpcap包:bash#uncompress libpcap.tar.Zbash#tar xvf libpcap.tar第三步編譯libpcap庫(kù):bash#./configurebash#make解壓Snort—1.7.0.tar.gz:
bash#tar zxvf Snort-1.7.0.tar.gz
進(jìn)入到其所在目錄,編譯Snort:
bash#./configure——with-libpcap-includes=/path/to/your/libcap/headers
bash#make
bash#make install
configure腳本還有一些選項(xiàng):如with-mysql=DIR 支持mysql數(shù)據(jù)庫(kù)with-odbc=DIR 支持ODBC數(shù)據(jù)庫(kù)-enable-openssl 支持SSL
可以根據(jù)自己的實(shí)際情況選擇這些選項(xiàng),全部設(shè)置完畢后從新引導(dǎo)系統(tǒng)。至此,Snort安裝完成。
2.將Snort作為NIDS(網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng))的設(shè)置
列出所有Snort選項(xiàng)命令開關(guān),鍵入bash#Snort-?,系統(tǒng)顯示Snort版本信息:
-*Snortl<*-
Version 1.7
By Martin Roesch(roesch@clark.net,WWW.Snort.org)
USAGE:Snort[-options]
Options:(大小寫有別,這里只列出常用的參數(shù))
-A(設(shè)置報(bào)警模式:fast、full、none只是使用報(bào)警文件)、unsock(使用Linux套接字記人日志,出于測(cè)試階段)
-a顯示ARP(Address Resolution Protocol,地址解析協(xié)議)包
?。璪(日志文件使用tcpdump格式)
-c(使用規(guī)則文件rules)
?。璬(復(fù)制應(yīng)用層)
?。璂(在后臺(tái)運(yùn)行Snort)
?。璭(顯示數(shù)據(jù)鏈路層包頭信息)
-I(把界面名加入到報(bào)警輸出界面)
?。璉(設(shè)置目錄ld為日志目錄)
-N(關(guān)閉日志功能,警報(bào)功能仍然有效)
?。璒(把規(guī)則測(cè)試順序改為:PassIAlertILog)
?。璼(把所有警告信息記人syslog)
-u(初始化完成后,把Snort的uid設(shè)置為ne)
-X(從鏈路層開始復(fù)制包的數(shù)據(jù))
-?(顯示幫助信息)
啟動(dòng)IDS模式,將Snort作為網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng):/Snort—dev-I./log-h(huán) 192.168.1.O/24-c Snort.
Snort.conf是規(guī)則集文件。Snort會(huì)對(duì)整個(gè)包和規(guī)則集進(jìn)行匹配,發(fā)現(xiàn)這樣的包就采用取相應(yīng)的行動(dòng)。如果不指定輸出目錄,Snort就輸出到/Var/log/Snort目錄。lOg/Snort目錄。
或鍵入:
?。疭nort-d-h 192.168.1.O/24-I./log-C Snort.conf
這是使用Snort作為網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)基本形式。為省略影響系統(tǒng)長(zhǎng)期運(yùn)行的不必要功能開關(guān),日志記錄符合規(guī)則的包,以ASCII碼形式保存在層次日錄結(jié)構(gòu)中。Snort掃描數(shù)據(jù)流,將檢測(cè)到的與規(guī)則庫(kù)產(chǎn)生相應(yīng)匹配的信息輸出(告警),告警的配置方式較多,這里只給出簡(jiǎn)例:用戶可參考有關(guān)資料根據(jù)實(shí)際網(wǎng)絡(luò)環(huán)境自行設(shè)置。
默認(rèn)方式的輸入配置Snort將報(bào)警發(fā)給syslog:
/Snort-C Snort.conf-l./Iog-s-h(huán) 192.168.1.O/24大程度地避免可能遭受的攻擊和侵害,需要科技人員不斷總結(jié)和交流經(jīng)驗(yàn),努力改進(jìn)管理方法和手段,共同為建立一個(gè)安全、穩(wěn)定、高效的網(wǎng)絡(luò)運(yùn)行環(huán)境付出不懈的努力。
參考文獻(xiàn)
[1]Martin Roesch Snort -Lightweogjt IntrusionDetectio for Networks :Snort.org.
[2]李洋.使用Snort搭建安全的Linux服務(wù)器[J].計(jì)算機(jī)世界。2005,