Snort日誌輸出插件詳解html
Snort是一款老×××的開源***檢測工具,本文主要討論他做爲日誌分析時的各類插件的應用。Snort的日誌通常位於:/var/log/snort/目錄下。能夠經過修改配置文件來設置Snort的報警形式。基於文本的格式、Libpcap格式和數據庫是Snort最重要的三種報警形式。本文主要對每種報警形式及其配置進行介紹。mysql
1 工做模式及輸出插件sql
Snort擁有3種工做模式,分別爲嗅探器模式、分組日誌模式與網絡***檢測模式。數據庫
(1)嗅探器模式服務器
Snort使用Libpcap包捕獲庫,即TCPDUMP使用的庫。在這種模式下,Snort使用網絡接口的混雜模式讀取並解析共享信道中的網絡分組。網絡
該模式使用命令以下:tcp
#snort -vide
注意:這裏的參數是小寫字母v,而大寫V則是顯示snort版本。以上只顯示TCP/IP網絡數據包頭信息,若是想查看詳細的應用層數據信息,則須要輸入如下命令:工具
#snort –vd性能
若是但願查看數據鏈路層的包頭信息,使用以下信息:
#snort –vde
還有一個相似「-d」參數的,「-X」它會從數據鏈路層開始輸出原始數據包。
若是想將Snort做爲IDS使用,不建議在命令行下使用「-vd」尤爲是「-ved」參數,由於詳細模式將數據包信息打印到控制檯,這樣嚴重影響了Snort的性能很容易引發丟包,這樣分析數據不許確。
2 數據包記錄模式
若是想將數據信息記錄到磁盤上某個文件,那就須要使用Packet logger模式。
命令以下:
#snort –ved –l ./log
這時Snort會把數據鏈路層、Tcp/IP報頭及應用層信息寫入當前目錄log(log目錄已創建)目錄下的snort.log.140493321文件中,並且這是二進制文件。你也許會問,ASCII格式的日誌文件格式很是好識別,爲何不直接記錄成ASCII格式呢?由於系統本生記錄的格式就是二進制的,若是再轉換成咱們能識別的ASCII格式無疑會加劇系統負荷,因此Snort在作IDS使用時理應採用二進制格式記錄,另外還要注意:「-l」參數是小寫字母l
若是想查看所記錄的日誌就得使用「r」參數。
操做實例以下:
#snort –dvr snort.log.140493321
還能夠提取部分感興趣的數據,例如只讀取ICMP包,輸入以下命令:
#snort –dvr snort.log.140493321 icmp
只讀取tcp包,輸入以下命令:
#snort –dvr snort.log.140493321 tcp
若是想記錄某個網段的數據呢,操做命令以下:
alienvault:~# snort -vde -l ./log -h 10.3.14.0/24
下面作個比較複雜的實驗,環境是OSSIM 3.1 32位 平臺
首先在控制檯上啓動:
#snort –l /var/log/snort/ -c /etc/snort/snort.eth0.conf
當結束命令^c時顯示。
Alerts數量就是在日誌裏看到的記錄數量,這二者一致。
在另外一個控制檯查看日誌狀況。
#tail –f /var/log/auth.log
這時,咱們能夠在SIEM控制檯,中看到如圖1所示。
圖1 SIEM控制檯
3 網絡***檢測模式HIDS
HIDS模式是你們須要掌握的重點,這種模式集成了嗅探模式和日誌模式,而且須要載入規則庫才能正常工做。操做方式以下:
#snort –vde –l ./log –h 10.32.14.0/24 –c /etc/snort/snort.eth0.conf
注意,當前目錄下有log目錄,若是制定-l ./log 參數系統會默認將日誌存在/var/log/snort/目錄下。你們在作實驗時,要確保當前目錄下有./log目錄哦,不然沒法正確執行以上指令。
snort.conf文件中包含了指定檢測規則的具體路徑。
4 輸出插件
輸出插件的做用是將報警數據輸出到顯示器或轉儲到文件。因此對於Snort而言輸出插件就是系統的主要瓶頸,Snort自己能對封包進行快速讀取和分析處理,可是試圖將其顯示輸出,或者存儲到數據庫中時卻有些力不從心。如何將Snort日誌記錄到一個指定文件呢?咱們經過執行命令(假設/var/log/snort/yourfile文件存在)來記錄。
#snort –L yourfile
那麼,這時系統自動將snort日誌保存到/var/log/snort/yourfile文件中。有關日誌輸出的方法還有幾個,咱們稍後詳細講解。後續文章我會給你們一個方法,配置Snort統一格式輸出而且有Snort的標準日誌應用Barnyard負責輸出。這裏咱們先看看Snort的輸出插件。
1). -A alert-mode
在***檢測模式中alert-mode有fast、full、unsock和none四種模式。
(1)fast
fast是一種快速簡單的輸出插件,之因此快是由於它只記錄timestamp(時間戳)、signature(特徵)、source IP、destinationIP、source port、destination port、TCP flags和Protocol。使用方法以下:
#snort –A fast
注意,上面的命令是不保存的,若是但願保存到文件(當不適用-l參數默認保存位置是/var/log/snort/),命令以下:
#snort –A fast –h 10.32.14.0/24 –c /etc/snort/snort.eth0.conf
(2)full
Full對每一個產生警報的IP將其解碼後的包記錄下來。與fast不一樣的是,它記錄地更全面。這也是它的預設告警模式。
(3)unsock
這個插件的做用是創建一個UNIX域管道並向它發送警報。固然其它進程也可對該管道進行監聽,目的是實時接收Snort警報數據。注意一點這個功能和Windows系統沒法配合使用。
#snort –A unsock
(4)none
這個插件做用是關閉警報。
你們只需掌握-A參數後面跟的四個參數的含義,瞭解這四個參數只是讓Snort能已不一樣的方式報警。
2). tcpdump格式輸出
有時候須要將Snort日誌輸出成tcpdump文件格式的記錄包,由於這樣可讓多種應用程序和工具讀取tcpdump,這時咱們以下操做(以OSSIM 3.1系統爲例):
(1) 編輯snort.conf
#vi /etc/snort/snort.eth0.conf
找到 389行,啓用output log_tcpdump: tcpdump.log。
(2)保存退出,並重啓Snort服務使其配置生效。
(3)查看tcpdump.log。
alienvault:/var/log/snort# ls -l
-rw------- 1 root adm 504 Jul 14 22:02 tcpdump.log.1405389707
-rw------- 1 root adm 3410 Jul 14 22:45 tcpdump.log.1405392066
(3)CSV格式輸出
CSV(Comma Separated Value)是用逗號分隔值的,是文本文件。採用CSV格式的目的主要考慮向其它數據庫或電子表格軟件輸入。CSV格式能夠記錄24個字段如表1所示。
表1 規則選項關鍵字含義
序號 |
關鍵字 |
做用 |
1 |
Timestamp |
時間戳 |
2 |
Msg |
特徵碼名稱 |
3 |
Proto |
協議 |
4 |
Src |
源地址 |
5 |
Srcport |
源端口 |
6 |
dst |
目標地址 |
7 |
dstport |
目標端口 |
8 |
ethsrc |
源MAC |
9 |
ethdst |
目標MAC |
10 |
ethlen |
以太網幀長度 |
11 |
tcpflags |
TCP標誌位 |
12 |
tcpseq |
TCP序列號 |
13 |
tcpack |
TCP ack號 |
14 |
tcplen |
TCP長度 |
15 |
tcpwindow |
tcp窗口值 |
16 |
ttl |
ip頭的ttl的值 |
17 |
tos |
IP頭中TOS字段的值 |
18 |
id |
ip頭的分片id值 |
19 |
dgmlen |
數據報的總長度,包括數據報頭和數據報文 |
20 |
iplen |
IP包長度 |
21 |
icmptype |
ICMP類型 |
22 |
icmpcode |
ICMP代號,缺省爲0 |
23 |
icmpid |
ICMP報文IP頭的ID,缺省是隨機的 |
24 |
icmpseq |
ICMP ECHO順序號的值 |
實現csv格式輸出方法:
編輯snort_eth0.conf。
添加:output alert_csv: csv.out 後面缺省有24個關鍵字,咱們也可按上圖的參數輸入
查看csv輸出
alienvault:/var/log/snort# tail -f csv.out
07/15-00:29:51.254425 ,"GPL SHELLCODE x86 inc ebx NOOP",,,,,,,
07/15-00:29:51.357178 ,"GPL SHELLCODE x86 inc ebx NOOP",,,,,,,
07/15-00:29:54.541833 ,"ET P2P eMule Kademlia Hello Request",,,,,,,
07/15-00:29:54.541846 ,"ET P2P eMule Kademlia Hello Request",,,,,,,
07/15-00:31:55.606599 ,"ET DNS Non-DNS or Non-Compliant DNS traffic on DNS port Opcode 6 or 7 set - Likely Kazy",,,,,,,
如下是24個參數所有啓用的效果。默認爲所有啓用除非指定具體參數。
在snort_eth0.conf加入:
output alert_csv: csv.out
一行便可。
查看SIEM控制檯輸出。
當設置成功csv輸出後,能夠查看OSSIM系統下SIEM控制檯的日誌輸出,以下圖3所示。
圖3 SIEM控制檯日誌輸出
咱們發現兩種不一樣警報方式的結果都是一行,很顯然OSSIM系統的SIEM控制檯顯示出的警報更人性化。
(4)syslog輸出
Syslog服務器能從各類服務和設備(網絡設備,Web服務器等)收集日誌信息。將Snort警報數據寫入syslog服務器對於分析網絡***事件有幫助。它能夠與其它工具謝工執行實時報警和通知,因此這也是Snort一個比較重要的插件之一。
最簡單方法是打開snort_eth0.conf將384行的output alert_syslog: LOG_AUTH LOG_ALERT這行啓用,並重啓Snort便可生效。咱們使用以下命令觀察Snort發出的警報:
#tail –f /var/log/auth.log
Syslog配置選項
Syslog三個重要配置選項:
l Facility
l Priority
l Options
啓用選項的命令以下:
方法很簡單,在上面的技術上加上這三個參數便可。
output alert_syslog: LOG_AUTH LOG_ALERT facility priority options
保存退出並重啓Snort便可。
這時,若是啓用了csv輸出,能夠將syslog,csv輸出作個對比,如圖4所示(上部分爲csv輸出,下部分爲auth.log輸出)。
圖4 輸出結果比較
咱們發現一樣一個***事件的報警,在它們的輸出中除了各式不統一之外,其它都相同。
(5)數據庫輸出
數據庫輸出插件能夠將日誌記錄到關係型數據庫中,它支持MySQL等。當數據庫插件被關聯到數據庫後,就能夠實現對Snort報警進行分類、查詢和按優先級組織排序,甚至利用應用程序對數據庫中的告警數據經過GUI界面展示給用戶。
在千兆網絡環境下須要考慮性能問題,數據庫插件有可能影響到Snort性能,插件自身並非瓶頸,當大量數據寫入數據庫時,必須等待磁盤I/O相應,這時就會受到影響。若是經過網絡將日誌存儲到另外一臺主機的數據庫中那麼延遲會比較大。後面咱們會採用Barnyard+Unified的方式解決這種性能問題。
主要思路是讓Snort採用Unified的格式存儲,以它的最大速度處理輸出數據,而不是像傳統的要等到寫盤完成後,再繼續操做,這樣浪費了大量的時間。Barnyard能將二進制數解析成與它可以識別的各類格式,而且是徹底獨立於Snort運行。警報被馬上寫入數據庫而且不影響Snort的抓包能力。因此說這種組合適合於高帶寬環境。
咱們仍是查看/etc/snort/snort.eth0.conf配置文件,大約392行。
這裏有2個重要的選項alert和log。
393行能夠選擇獎警報數據寫入數據庫,394行能夠同時將日誌數據也寫入數據庫。
下面咱們看看如何使用數據庫插件:
對照上面參數配置以下選項:
<db_type>爲mysql
User=<username>爲snortdb_username或者爲Snort傳感器建立的MySQL用戶名。
Password=<password> 爲snortdb_password或爲Snort傳感器建立snortdb_username的MySQL口令。
Dbname=<name>爲snortdb或者本身指定的***數據庫名稱。
Host=<hostname>爲本機環路地址127.0.0.1
(6)輸出unixsock
經過Alert_unixsock打開UNIX套接字,而且把報警信息發送到那裏。外部的程序/進程會在這個套接字上偵聽並實時接收這些報警數據。
例子:
output alert_unixsock
加入到snort.eth0.conf配置文件後,重啓Snort服務即生效。還能夠經過如下命令手動啓動:
# snort -c /etc/snort/snort.eth0.conf
此時會在/var/log/snort/下產生snort_alert文件
爲了演示這一功能咱們經過一小段程序(本地進程間的通信),來看看效果如何。如下Perl程序,其主要功能是將Snort傳送的數據報文的報警名稱經過讀取unixsock信息實現打印到屏幕。
執行此Perl程序,結果以下。
咱們看到顯示在屏幕的5條警報名稱。
(7)Unified格式輸出
前面介紹了多種輸出插件各異利弊,下面介紹OSSIM系統中經常使用的unified插件。這種插件的最大特色就是速度快,它能最快的輸出Snort報警信息和日誌信息,它輸出兩類文件:警報文件和數據包日誌文件,警報文件僅記錄摘要信息,內容包括源IP、目的IP、協議、源端口、目的端口、報警消息ID、日誌文件包含完整的包信息,用戶能夠本身下載。
設置方法是啓用如下配置語句:
Output unified2: filename snort_eth0, limit 128
Filename後設置輸出警報文件名稱爲snort_eth0。
Limit表明輸出文件容許的最大長度,默認值爲128MB
以上幾種插件爲snort經常使用方式尤爲在日誌分析中用的比較多,若是你剛接觸snort能夠OSSIM3的環境中進行練習。