1.簡介
在網(wǎng)絡(luò)日益普及的今天,網(wǎng)絡(luò)安全變的越來越重要,作為網(wǎng)絡(luò)安全的一個(gè)重要組成部分網(wǎng)絡(luò)入侵檢測系統(tǒng)(Network Intrusion Detection System,NIDS)也越來越顯示出其重要性。NIDS用來監(jiān)視網(wǎng)絡(luò)數(shù)據(jù)流動(dòng)情況,當(dāng)發(fā)生時(shí)能夠提供報(bào)警?,F(xiàn)在已經(jīng)出現(xiàn)了很多商業(yè)的NIDS,但是它們大多比較復(fù)雜,比較難以掌握,而且比較昂貴,比較小的公司無法承受。本文將介紹一個(gè)出色的免費(fèi)NIDS系統(tǒng)---snort,它基于GPL,作者是Martin Roesch。最新版本是1.70版。本文將介紹snort的技術(shù)特點(diǎn)及如何使用snort作為NIDS。
2.SNORT的特點(diǎn)
snort是一個(gè)強(qiáng)大的輕量級的網(wǎng)絡(luò)入侵檢測系統(tǒng)。它具有實(shí)時(shí)數(shù)據(jù)流量分析和日志IP網(wǎng)絡(luò)數(shù)據(jù)包的能力,能夠進(jìn)行協(xié)議分析,對內(nèi)容進(jìn)行搜索/匹配。它能夠檢測各種不同的攻擊方式,對攻擊進(jìn)行實(shí)時(shí)報(bào)警。此外,snort具有很好的擴(kuò)展性和可移植性。還有,這個(gè)軟件遵循通用公共許可證GPL,所以只要遵守GPL任何組織和個(gè)人都可以自由使用。
snort是一個(gè)輕量級的入侵檢測系統(tǒng)
snort雖然功能強(qiáng)大,但是其代碼極為簡潔、短小,其源代碼壓縮包只有大約110KB。
snort的可移植性很好
snort的跨平臺性能極佳,目前已經(jīng)支持Linux,Solaris,BSD,IRIX,-UX,WinY2K等系統(tǒng)。
snort的功能非常強(qiáng)大
snort具有實(shí)時(shí)流量分析和日志IP網(wǎng)絡(luò)數(shù)據(jù)包的能力。能夠快速地檢測網(wǎng)絡(luò)攻擊,及時(shí)地發(fā)出報(bào)警。snort的報(bào)警機(jī)制很豐富,例如:syslog、用戶指定的文件、一個(gè)UNIX套接字,還有使用SAMBA協(xié)議向Windows客戶程序發(fā)出WinPopup消息。利用XML插件,snort可以使用SNML(簡單網(wǎng)絡(luò)標(biāo)記語言,simple network markup language)把日志存放到一個(gè)文件或者適時(shí)報(bào)警。
snort能夠進(jìn)行協(xié)議分析,內(nèi)容的搜索/匹配?,F(xiàn)在snort能夠分析的協(xié)議有TCP、UDP和ICMP。將來,可能提供對、ICRP、GRE、OSPF、RIP、IPX等協(xié)議的支持。它能夠檢測多種方式的攻擊和探測,例如:緩沖區(qū)溢出、秘密端口掃描、CGI攻擊、SMB探測、探測指紋特征的企圖等等。
snort的日志格式既可以是tcpdump式的二進(jìn)制格式,也可以解碼成ASCII字符形式,更加便于用戶尤其是新手檢查。使用輸出插件,snort可以把日志記入數(shù)據(jù)庫,當(dāng)前支持的數(shù)據(jù)庫包括:Postgresql、MySQL、任何unixODBC數(shù)據(jù)庫,還有Oracle(對Oracle的支持目前處于測試階段)。
使用TCP流插件(tcpstream),snort可以對TCP包進(jìn)行重組。snort能夠?qū)P包的內(nèi)容進(jìn)行匹配,但是對于TCP攻擊,如果攻擊者使用一個(gè)程序,每次發(fā)送只有一個(gè)字節(jié)的TCP包,完全可以避開snort的模式匹配。而被攻擊的主機(jī)的TCP協(xié)議棧會(huì)重組這些數(shù)據(jù),將其送給在目標(biāo)端口上監(jiān)聽的進(jìn)程,從而使攻擊包逃過snort的監(jiān)視。使用TCP流插件,可以對TCP包進(jìn)行緩沖,然后進(jìn)行匹配,使snort具備了對付上面這種攻擊的能力。
使用spade(Statistical Packet Anomaly Detection Engine)插件,snort能夠報(bào)告非正常的可疑包,從而對端口掃描進(jìn)行有效的檢測。
snort還有很強(qiáng)的系統(tǒng)防護(hù)能力。使用FlexResp功能,snort能夠主動(dòng)斷開惡意連接。
擴(kuò)展性能較好,對于新的攻擊威脅反應(yīng)迅速
作為一個(gè)輕量級的網(wǎng)絡(luò)入侵檢測系統(tǒng),snort有足夠的擴(kuò)展能力。它使用一種簡單的規(guī)則描述語言。最基本的規(guī)則只是包含四個(gè)個(gè)域:處理動(dòng)作、協(xié)議、方向、注意的端口。例如:
log tcp any any -> 10.1.1.0/24 79 。
還有一些功能選項(xiàng)可以組合使用,實(shí)現(xiàn)更為復(fù)雜的功能。將有一篇單獨(dú)的文章討論如何寫snort規(guī)則。用戶可以從http://www.snort.org得到其規(guī)則集。另外,著名的黑客Max Vision在http://www.whitehats.com提供在線的技術(shù)支持。
snort支持插件,可以使用具有特定功能的報(bào)告、檢測子系統(tǒng)插件對其功能進(jìn)行擴(kuò)展。snort當(dāng)前支持的插件包括:數(shù)據(jù)庫日志輸出插件、碎數(shù)據(jù)包檢測插件、端口掃描檢測插件、HTTP URI normalization插件、XML插件等。
snort的規(guī)則語言非常簡單,能夠?qū)π碌木W(wǎng)絡(luò)攻擊做出很快的反應(yīng)。發(fā)現(xiàn)新的攻擊后,可以很快根據(jù)Bugtraq郵件列表,找出特征碼,寫出檢測規(guī)則。因?yàn)槠湟?guī)則語言簡單,所以很容易上手,節(jié)省人員的培訓(xùn)費(fèi)用。
遵循公共通用許可證GPL
snort遵循GPL,所以任何、個(gè)人、組織都可以免費(fèi)使用它作為自己的NIDS。
3.安裝
如何獲得snort
可以從snort的站點(diǎn)http://www.snort.org獲得其源代碼或者RPM包。使用源代碼安裝snort需要libpcap庫,可以從://ftp.ee.lbl.gov下載,
安裝snort
RPM包,可以使用下面的命令進(jìn)行安裝:
bash#rpm -ihv --nodeps snort-1.7-1.i386.rpm
源代碼:
解壓libpcap包:
bash#uncompress libpcap.tar.Z
bash#tar xvf libpcap.tar
編譯libpcap庫:
bash#./configure
bash#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):
--enable-smbalerts編譯SMB報(bào)警代碼;
--enable-flexresp編譯Flexible Response代碼;
--with-mysql=DIR支持mysql數(shù)據(jù)庫;
--with-postgresql=DIR支持postsql數(shù)據(jù)庫;
--with-odbc=DIR支持ODBC數(shù)據(jù)庫;
--enable-openssl支持。
可以根據(jù)自己的實(shí)際情況選擇這些選項(xiàng)。
4.使用
現(xiàn)在,snort已經(jīng)安裝完成。我們將在這一節(jié)討論如何使用snort。作為一個(gè)網(wǎng)絡(luò)入侵檢測的軟件,snort有三種用途:數(shù)據(jù)包嗅探器(packet sniffer)、數(shù)據(jù)包分析器(packet analyser)以及網(wǎng)絡(luò)入侵檢測系統(tǒng)。讓我們從最簡單的命令開始,輸入一個(gè)簡單的命令列出所有的命令行開關(guān)。
bash# snort -?
-*> Snort! <*-
Version 1.7
By Martin Roesch ([email protected], www.snort.org)
USAGE: snort [-options]
Options:
-A 設(shè)置報(bào)警模式:
fast、full、none(只是使用報(bào)警文件)、
unsock(使用UNIX套接字記入日志,出于測試階段)
-a 顯示ARP(Address Resolution Protocol,地址解析協(xié)議)包
-b 日志文件使用tcpdump格式(更快)
-c 使用規(guī)則文件rules
-C 只使用字符方式打印負(fù)載信息(不使用hex方式)
-d 復(fù)制應(yīng)用層
-D 在后臺運(yùn)行snort(狀態(tài))
-e 顯示第二層(數(shù)據(jù)鏈路層)包頭信息
-F Read BPF filters from file
-g 初始化完成后,使snort的gid為gname
-h Home網(wǎng)絡(luò)為hn
-i 在接口if上監(jiān)聽
-I 把界面名加入到報(bào)警輸出界面。
-l 設(shè)置目錄ld為日志目錄
-M
把SMB消息發(fā)送到文件wrkst列出的工作站中
(Requires smbclient to be in PATH)
-n 收到cnt個(gè)包后退出
-N 關(guān)閉日志功能(警報(bào)功能仍然有效)
-o 把規(guī)則測試順序修改為:Pass|Alert|Log
-O 打亂被日志的IP地址
-p 關(guān)閉混雜嗅探模式
-P 設(shè)置復(fù)制的包的長度為snaplen(默認(rèn): 1514)
-q 安靜模式。不輸出banner和狀態(tài)報(bào)告。
-r 讀取并處理tcpdump文件tf(回放功能)
-s 把所有警告信息記入syslog
-S 設(shè)置規(guī)則文件中的n的值等于v的值
-t
初始化完成后Chroot到dir目錄
-u 初始化完成后,把snort的uid設(shè)置為uname
-v 設(shè)置冗余模式
-V 顯示版本號
-X 從鏈路層開始復(fù)制包的數(shù)據(jù)
-? 顯示幫助信息
<包過濾選項(xiàng)>基于BPF,可參考TCPDump
作為嗅探器
所謂的嗅探器模式就是snort從網(wǎng)絡(luò)上讀出數(shù)據(jù)包然后顯示在你的控制臺上。首先,我們從最基本的用法入手。如果你只要把包頭信息打印在屏幕上,只需要輸入下面的命令:
./snort -v
使用這個(gè)命令將使snort只輸出IP和TCP/UDP/ICMP的包頭信息。如果你要看到應(yīng)用層的數(shù)據(jù),可以使用:
./snort -vd
這條命令使snort在輸出包頭信息的同時(shí)顯示包的數(shù)據(jù)信息。如果你還要顯示數(shù)據(jù)鏈路層的信息,就使用下面的命令:
./snort -vde
注意這些選項(xiàng)開關(guān)還可以分開寫或者任意結(jié)合在一塊。例如:下面的命令就和上面最后的一條命令等價(jià):
./snort -d -v -e