Snort首先根據遠端的ip地址建立目錄,然後將檢測到的包以tcpdump的二進制格式記錄或者以自身的解碼形式存儲到這些目錄中.這樣一來,你就可以使用snort來監測或過濾你所需要的包.
軟件名稱
功能簡述
正式網址
軟件版本
Snort
網絡***探測器
[url]www.snort.org/[/url]
1.8.6
Libpcap
Snort所依賴的網絡抓包庫
[url]www.tcpdump.org/[/url]
0.7.1
MySQL
***事件數據庫
[url]www.mysql.org/[/url]
3.23.49
Apache
Web服務器
[url]www.apache.org/[/url]
1.3.24
Mod_ssl
爲Apache提供SSL加密功能的模塊
[url]www.modssl.org/[/url]
2.8.8
OpenSSL
開放源代碼的SSL加密庫,爲mod_ssl所依賴
[url]www.openssl.org/[/url]
0.9.6d
MM
爲Apache的模塊提供共享內存服務
[url]www.engelschall.com/[/url]
1.1.3
ACID
基於Web的***事件數據庫分析控制檯
[url]www.cert.org/kb/aircert/[/url]
0.9.6b21
PHP
ACID的實現語言
[url]www.php.net/[/url]
4.0.6
GD
被PHP用來即時生成PNG和JPG圖像的庫
[url]www.boutell.com/gd/[/url]
1.8.4
ADODB
爲ACID提供便捷的數據庫接口
php.weblogs.com/ADODB
2.00
PHPlot
ACID所依賴的製圖庫
[url]www.phplot.com/[/url]
4.4.6
圖1 一天之內的報警頻率
圖2 一週報警頻率
Snort採取命令行方式運行。格式爲:snort -[options] <filters>。options中可選的參數很多,下面逐一介紹。
首先介紹-[options]的內容:
-A <alert> 設置告警方式爲full,fast或者none。 在full方式下,Snort將傳統的告警信息格式寫入告警文件,告警內容比較詳細。在fast方式下,Snort只將告警時間,告警內容,告警IP地址和端口號寫入文件。在none方式下,系統將關閉告警功能。
-a 顯示ARP包
-b 以tcpdump的格式將數據包記入日誌。 所有的數據包將以二進制格式記入名爲snort.log的文件中。這個選項提高了snort的操作速度,因爲直接已二進制存儲,省略了轉換爲文本文件的時間,通過-b選項的設置,snort可以在100Mbps的網絡上正常工作。
-c <cf> 使用配置文件<cf>。這是一個規則文件。文件內容主要控制系統哪些包需要記入日誌,哪些包需要告警,哪些包可以忽略等。
-C 僅抓取包中的ASCII字符
-d 抓取應用層的數據包
-D 在守護模式下運行Snort。告警信息發送至/var/log/snort.alert,除非特別配置。
-e 顯示和記錄網絡層數據包頭信息
-F <bpf> 從文件<bpf>中讀取BPF過濾信息。
-h <hn> 設置<hn>(C類IP地址)爲內部網絡.當使用這個開關時,所有從外部的流量將會有一個方向箭頭指向右邊,所有從內部的流量將會有一個左箭頭.這個選項沒有太大的作用,但是可以使顯示的包的信息格式比較容易察看.
-i <if> 使用網絡接口文件 <if>。
-l <ld> 將包信息記錄到目錄<ld>下。設置日誌記錄的分層目錄結構,按接收包的IP地址將抓取的包存儲在相應的目錄下。
-M <wkstn> 向<wkstn〉文件中的工作站發送WinPopup消息。<wkstn>文件格式非常簡單。文件的每一行包含一個目的地址的SMB名。
-n <num> 處理完<num>包後退出。
-N 關閉日誌功能。告警功能仍然工作。
-o 改變應用於包的規則的順序。標準的應用順序是:Alert->Pass->Log;採用-o選項後,順序改爲:Pass->Alert->Log,允許用戶避免使用冗長的BPF命令行來過濾告警規則。
-p 關閉混雜模式的嗅探(sniffing)。這個選項在網絡嚴重擁塞時十分有效。
-r <tf> 讀取tcpdump生成的文件<tf>。Snort將讀取和處理這個文件。例如:當你已經得到了一個Shadow文件或者tcpdump格式的文件,想處理文件包含的內容時,這個選項就很有用了。
-s 將告警信息記錄到系統日誌。在其他的平臺下,日誌文件可以出現在/var/log/secure, /var/log/messages目錄裏。
-S ,n=v> 設置變量n的值爲v。這個選項可以用命令行的方式設置Snort規則文件中的變量。例如:如果要給Snort規則文件中的變量HOME_NET賦值,就可以在命令行下采用這個選項。
-v 將包信息顯示到終端時,採用詳細模式。這種模式存在一個問題:它的顯示速度比較慢,如果你是在IDS網絡中使用Snort,最好不要採用詳細模式,否則會丟失部分包信息。
-V 顯示版本號,並退出。
-x 當收到騷擾IPX包時,顯示相關信息。
-? 顯示使用摘要,並退出。
下面介紹一下< filters >的內容:
這裏的"filters"與TCPDump中的filter相同,是標準的BPF格式的過濾器。一般來說,你可以指定過濾器的主機,網絡或者協議,還可以給出邏輯表達式,定製特定的過濾器。例如:
[root@ice snort-1.6]# ./snort -h 192.168.1.0/24 -d -v host 192.168.1.1
表示記錄從主機192.168.1.1發送和接收的所有包信息。
[root@ice snort-1.6]# ./snort -h 192.168.1.0/24 -d -v net 192.168.1 and not host 192.168.1.1
表示記錄子網192.168.1中從192.168.1.0到192.168.1.24的所有主機接收和發送的包信息,但不包括192.168.1.1的信息。
在1.3版本中,你可以使用選項-F從文件中讀入自己的BPF過濾器。
前面將常提到規則文件,先面簡單介紹一下規則。詳細的內容可以從下面的站點得到。
[url]http://www.clark.net/~roesch/snort_rules.html[/url] 。系統生成的告警信息都記錄在alert.log文件中。你可以簡單的使用"tail -f"查看日誌信息。同時這些日誌信息還被記錄在系統日誌中,其缺省的目錄是/var/log/snort.你可以使用-L選項來指定特定的目錄.如果你設置了smbalert功能,那麼這些告警就可以通過smbclient在windows的機子上彈出一個對話框.
實際上,在使用snort的過程中,大家一定感受到規則(rules)文件的重要性.如何構造高效全面的規則文件就成了重點.下面我們就介紹一下該文件.
在該文件中,一條規則必須在一行中,符號#是註釋行.所有的ip地址和端口號都要使用數字形式,系統並不支持名字服務.一條規則的格式如下:
動作 協議 源地址 源端口 目標地址 目標端口 (選項)
動作包括三類:告警(alert),日誌(log)和通行(pass).表明snort對包的三種處理方式.
在源/目的地址/端口中可以使用any來代表任意的地址或端口.還可以使用符號!來表明取非運算.同時,在目的和源地址之間可以使用標識符<>來指明方向.
選項包括:
1. msg -------將要放入alert或log文件中的輸出信息;
2. flags-------tcp協議中的標誌,如SYN,ACK等等,如果是0則表明全部標誌.
3. ttl -------在ip包中的ttl值,有利於識別traceroute包.
4. content----數據包的應用層,查找緩衝區溢出***.
5. itype-------icmp包的類型;
6. icode-------icmp包的編碼;
7. minfrag----最小的分片的有效載荷大小.
8. seg---------tcp包中的順序號;
9. ack --------tcp包中的響應號;
10. id ------ip 包中分片的序號;
.
11. logto---指定特殊的存放告警信息的文件;
12. dsize---指定特定的包的長度;
13. offset---在包中查找一定字節內容;
14. depth---在數據包中僅僅查找depth字節.
15. ipopts---查找一個特定的ip選項.
1. 下面這條規則記錄了所有登錄到一個特定主機的數據包:
log tcp any any -> 192.168.1.1/32 23
2. 在第一條的基礎上記錄了雙向的流量.
log tcp any any <> 192.168.1.1/32 23
3. 這一條規則記錄了所有到達你的本地主機的icmp數據包.
log icmp any any -> 192.168.1.0/24 any
4. 這條規則允許雙向的從你的機子到其他站點的http包.
pass tcp any 80 <> 192.168.1.0/24 any
5.這條告警規則顯示了本地主機對其他主機的111端口的訪問,並在log中顯示端口影射調用('portmapper call')信息:
alert tcp 192.168.1.0/24 any -> any 111 (msg:"Portmapper call";)
6.記錄其他任意地址的小於1024端口訪問本地小於1024端口的流量:
log tcp any :1024 -> 192.168.1.0/24 :1024
7.這條規則將會發現SYN FIN掃描:
alert tcp any any -> 192.168.1.0/24 any (msg:"SYN-FIN scan!"; flags: SF;)
8.這條規則將會發現空tcp掃描:
alert tcp any any -> 192.168.1.0/24 any (msg:"Null scan!"; flags: 0;)
9.這條規則將會發現Queso fingerprint掃描:
alert tcp any any -> 192.168.1.0/24 any (msg:"Queso fingerprint";flags: S12;)
10.這條規則將進行基於內容的查找以發現溢出***:
alert tcp any any -> 192.168.1.0/24 143 (msg:"IMAP Buffer overflow!"; content:"|90E8 C0FF FFFF|/bin/sh";)
11.這條規則將會發現PHF***:
alert tcp any any -> 192.168.1.0/24 80 (msg:"PHF attempt"; content:"/cgi-bin/phf";)
12.這條規則將會發現traceroute包:
alert udp any any -> 192.168.1.0/24 any (msg:"Traceroute"; ttl:1;)
13.這條規則將會發現其他主機對本地發出的icmp包.
alert udp any any -> 192.168.1.0/24 any (msg:"Traceroute"; ttl:1;)
14.這條規則發現nmap的tcp 的ping掃描
alert tcp any any -> 192.168.1.0/24 any (flags: A; ack: 0; msg:"NMAP TCP ping!";)
15.這條規則將會發現源路由的數據包(源路由***):
alert tcp any any -> any any (ipopts: lsrr; msg: "Source Routed packet!";)