Snort日誌輸出插件詳解
Snort是一款老牌的開源入侵檢測工具,本文主要討論他作為日誌分析時的各種插件的應用。Snort的日誌一般位於:/var/log/snort/目錄下。可以通過修改配置文件來設置Snort的報警形式。基於文本的格式、Libpcap格式和數據庫是Snort最重要的三種報警形式。本文主要對每種報警形式及其配置進行介紹。
1 工作模式及輸出插件
Snort擁有3種工作模式,分別為嗅探器模式、分組日誌模式與網絡入侵檢測模式。
(1)嗅探器模式
Snort使用Libpcap包捕獲庫,即TCPDUMP使用的庫。在這種模式下,Snort使用網絡接口的混雜模式讀取並解析共享信道中的網絡分組。
該模式使用命令如下:
#snort -v
註意:這裏的參數是小寫字母v,而大寫V則是顯示snort版本。以上只顯示TCP/IP網絡數據包頭信息,如果想查看詳細的應用層數據信息,則需要輸入以下命令:
#snort –vd
如果希望查看數據鏈路層的包頭信息,使用如下信息:
#snort –vde
還有一個類似“-d”參數的,“-X”它會從數據鏈路層開始輸出原始數據包。
如果想將Snort作為IDS使用,不建議在命令行下使用“-vd”尤其是“-ved”參數,因為詳細模式將數據包信息打印到控制臺,這樣嚴重影響了Snort的性能很容易引起丟包,這樣分析數據不準確。
2 數據包記錄模式
如果想將數據信息記錄到磁盤上某個文件,那就需要使用
命令如下:
#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.32.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/目錄下。
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的環境中進行練習。
開源IDS系統安裝一點通視頻課程請參考 https://edu.51cto.com/course/7896.html
Snort日誌輸出插件詳解