Snort日志输出插件详解
Snort日志輸出插件詳解
? Snort是一款老×××的開(kāi)源***檢測(cè)工具,本文主要討論他作為日志分析時(shí)的各種插件的應(yīng)用。Snort的日志一般位于:/var/log/snort/目錄下。可以通過(guò)修改配置文件來(lái)設(shè)置Snort的報(bào)警形式?;谖谋镜母袷?、Libpcap格式和數(shù)據(jù)庫(kù)是Snort最重要的三種報(bào)警形式。本文主要對(duì)每種報(bào)警形式及其配置進(jìn)行介紹。
1??? 工作模式及輸出插件
Snort擁有3種工作模式,分別為嗅探器模式、分組日志模式與網(wǎng)絡(luò)***檢測(cè)模式。
(1)嗅探器模式
Snort使用Libpcap包捕獲庫(kù),即TCPDUMP使用的庫(kù)。在這種模式下,Snort使用網(wǎng)絡(luò)接口的混雜模式讀取并解析共享信道中的網(wǎng)絡(luò)分組。
該模式使用命令如下:
#snort -v
注意:這里的參數(shù)是小寫字母v,而大寫V則是顯示snort版本。以上只顯示TCP/IP網(wǎng)絡(luò)數(shù)據(jù)包頭信息,如果想查看詳細(xì)的應(yīng)用層數(shù)據(jù)信息,則需要輸入以下命令:
#snort –vd
如果希望查看數(shù)據(jù)鏈路層的包頭信息,使用如下信息:
#snort? –vde
還有一個(gè)類似“-d”參數(shù)的,“-X”它會(huì)從數(shù)據(jù)鏈路層開(kāi)始輸出原始數(shù)據(jù)包。
如果想將Snort作為IDS使用,不建議在命令行下使用“-vd”尤其是“-ved”參數(shù),因?yàn)樵敿?xì)模式將數(shù)據(jù)包信息打印到控制臺(tái),這樣嚴(yán)重影響了Snort的性能很容易引起丟包,這樣分析數(shù)據(jù)不準(zhǔn)確。
2?? ?數(shù)據(jù)包記錄模式
如果想將數(shù)據(jù)信息記錄到磁盤上某個(gè)文件,那就需要使用Packet logger模式。
命令如下:
#snort –ved –l? ./log
? 這時(shí)Snort會(huì)把數(shù)據(jù)鏈路層、Tcp/IP報(bào)頭及應(yīng)用層信息寫入當(dāng)前目錄log(log目錄已建立)目錄下的snort.log.140493321文件中,而且這是二進(jìn)制文件。你也許會(huì)問(wèn),ASCII格式的日志文件格式非常好識(shí)別,為什么不直接記錄成ASCII格式呢?因?yàn)橄到y(tǒng)本生記錄的格式就是二進(jìn)制的,如果再轉(zhuǎn)換成我們能識(shí)別的ASCII格式無(wú)疑會(huì)加重系統(tǒng)負(fù)荷,所以Snort在做IDS使用時(shí)理應(yīng)采用二進(jìn)制格式記錄,另外還要注意:“-l”參數(shù)是小寫字母l
如果想查看所記錄的日志就得使用“r”參數(shù)。
操作實(shí)例如下:
#snort –dvr snort.log.140493321
還可以提取部分感興趣的數(shù)據(jù),例如只讀取ICMP包,輸入如下命令:
#snort –dvr snort.log.140493321 icmp
只讀取tcp包,輸入如下命令:
#snort –dvr snort.log.140493321 tcp
如果想記錄某個(gè)網(wǎng)段的數(shù)據(jù)呢,操作命令如下:
alienvault:~# snort -vde -l ./log -h 10.3.14.0/24
下面做個(gè)比較復(fù)雜的實(shí)驗(yàn),環(huán)境是OSSIM 3.1? 32位 平臺(tái)
首先在控制臺(tái)上啟動(dòng):
#snort –l /var/log/snort/? -c /etc/snort/snort.eth0.conf
當(dāng)結(jié)束命令^c時(shí)顯示。
Alerts數(shù)量就是在日志里看到的記錄數(shù)量,這兩者一致。
在另一個(gè)控制臺(tái)查看日志情況。
#tail –f /var/log/auth.log
這時(shí),我們可以在SIEM控制臺(tái),中看到如圖1所示。
圖1 SIEM控制臺(tái)
3??? 網(wǎng)絡(luò)***檢測(cè)模式HIDS
HIDS模式是大家需要掌握的重點(diǎn),這種模式集成了嗅探模式和日志模式,并且需要載入規(guī)則庫(kù)才能正常工作。操作方式如下:
#snort –vde –l ./log –h 10.32.14.0/24 –c /etc/snort/snort.eth0.conf
注意,當(dāng)前目錄下有log目錄,如果制定-l ./log 參數(shù)系統(tǒng)會(huì)默認(rèn)將日志存在/var/log/snort/目錄下。大家在做實(shí)驗(yàn)時(shí),要確保當(dāng)前目錄下有./log目錄哦,否則無(wú)法正確執(zhí)行以上指令。
snort.conf文件中包含了指定檢測(cè)規(guī)則的具體路徑。
4?? 輸出插件
輸出插件的作用是將報(bào)警數(shù)據(jù)輸出到顯示器或轉(zhuǎn)儲(chǔ)到文件。所以對(duì)于Snort而言輸出插件就是系統(tǒng)的主要瓶頸,Snort本身能對(duì)封包進(jìn)行快速讀取和分析處理,但是試圖將其顯示輸出,或者存儲(chǔ)到數(shù)據(jù)庫(kù)中時(shí)卻有些力不從心。如何將Snort日志記錄到一個(gè)指定文件呢?我們通過(guò)執(zhí)行命令(假設(shè)/var/log/snort/yourfile文件存在)來(lái)記錄。
#snort –L yourfile
那么,這時(shí)系統(tǒng)自動(dòng)將snort日志保存到/var/log/snort/yourfile文件中。有關(guān)日志輸出的方法還有幾個(gè),我們稍后詳細(xì)講解。后續(xù)文章我會(huì)給大家一個(gè)方法,配置Snort統(tǒng)一格式輸出并且有Snort的標(biāo)準(zhǔn)日志應(yīng)用Barnyard負(fù)責(zé)輸出。這里我們先看看Snort的輸出插件。
1). -A alert-mode
在***檢測(cè)模式中alert-mode有fast、full、unsock和none四種模式。
(1)fast
fast是一種快速簡(jiǎn)單的輸出插件,之所以快是因?yàn)?/span>它只記錄timestamp(時(shí)間戳)、signature(特征)、source IP、destinationIP、source port、destination port、TCP flags和Protocol。使用方法如下:
#snort –A fast
注意,上面的命令是不保存的,如果希望保存到文件(當(dāng)不適用-l參數(shù)默認(rèn)保存位置是/var/log/snort/),命令如下:
#snort –A fast –h 10.32.14.0/24 –c /etc/snort/snort.eth0.conf
(2)full
Full對(duì)每個(gè)產(chǎn)生警報(bào)的IP將其解碼后的包記錄下來(lái)。與fast不同的是,它記錄地更全面。這也是它的預(yù)設(shè)告警模式。
(3)unsock
這個(gè)插件的作用是建立一個(gè)UNIX域管道并向它發(fā)送警報(bào)。當(dāng)然其它進(jìn)程也可對(duì)該管道進(jìn)行監(jiān)聽(tīng),目的是實(shí)時(shí)接收Snort警報(bào)數(shù)據(jù)。注意一點(diǎn)這個(gè)功能和Windows系統(tǒng)無(wú)法配合使用。
#snort –A unsock
(4)none
這個(gè)插件作用是關(guān)閉警報(bào)。
大家只需掌握-A參數(shù)后面跟的四個(gè)參數(shù)的含義,了解這四個(gè)參數(shù)只是讓Snort能已不同的方式報(bào)警。
2). tcpdump格式輸出
有時(shí)候需要將Snort日志輸出成tcpdump文件格式的記錄包,因?yàn)檫@樣可以讓多種應(yīng)用程序和工具讀取tcpdump,這時(shí)我們?nèi)缦虏僮?#xff08;以OSSIM 3.1系統(tǒng)為例):
(1) 編輯snort.conf
#vi /etc/snort/snort.eth0.conf
找到 389行,啟用output log_tcpdump: tcpdump.log。
(2)保存退出,并重啟Snort服務(wù)使其配置生效。
(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)是用逗號(hào)分隔值的,是文本文件。采用CSV格式的目的主要考慮向其它數(shù)據(jù)庫(kù)或電子表格軟件輸入。CSV格式可以記錄24個(gè)字段如表1所示。
表1 ?規(guī)則選項(xiàng)關(guān)鍵字含義
序號(hào) | 關(guān)鍵字 | 作用 |
1 | Timestamp | 時(shí)間戳 |
2 | Msg | 特征碼名稱 |
3 | Proto | 協(xié)議 |
4 | Src | 源地址 |
5 | Srcport | 源端口 |
6 | dst | 目標(biāo)地址 |
7 | dstport | 目標(biāo)端口 |
8 | ethsrc | 源MAC |
9 | ethdst | 目標(biāo)MAC |
10 | ethlen | 以太網(wǎng)幀長(zhǎng)度 |
11 | tcpflags | TCP標(biāo)志位 |
12 | tcpseq | TCP序列號(hào) |
13 | tcpack | TCP ack號(hào) |
14 | tcplen | TCP長(zhǎng)度 |
15 | tcpwindow | tcp窗口值 |
16 | ttl | ip頭的ttl的值 |
17 | tos | IP頭中TOS字段的值 |
18 | id | ip頭的分片id值 |
19 | dgmlen | 數(shù)據(jù)報(bào)的總長(zhǎng)度,包括數(shù)據(jù)報(bào)頭和數(shù)據(jù)報(bào)文 |
20 | iplen | IP包長(zhǎng)度 |
21 | icmptype | ICMP類型 |
22 | icmpcode | ICMP代號(hào),缺省為0 |
23 | icmpid | ICMP報(bào)文IP頭的ID,缺省是隨機(jī)的 |
24 | icmpseq | ICMP ECHO順序號(hào)的值 |
實(shí)現(xiàn)csv格式輸出方法:
編輯snort_eth0.conf。
添加:output alert_csv: csv.out 后面缺省有24個(gè)關(guān)鍵字,我們也可按上圖的參數(shù)輸入
查看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個(gè)參數(shù)全部啟用的效果。默認(rèn)為全部啟用除非指定具體參數(shù)。
在snort_eth0.conf加入:
output alert_csv: csv.out
一行即可。
查看SIEM控制臺(tái)輸出。
當(dāng)設(shè)置成功csv輸出后,可以查看OSSIM系統(tǒng)下SIEM控制臺(tái)的日志輸出,如下圖3所示。
圖3 SIEM控制臺(tái)日志輸出
我們發(fā)現(xiàn)兩種不同警報(bào)方式的結(jié)果都是一行,很顯然OSSIM系統(tǒng)的SIEM控制臺(tái)顯示出的警報(bào)更人性化。
(4)syslog輸出
Syslog服務(wù)器能從各種服務(wù)和設(shè)備(網(wǎng)絡(luò)設(shè)備,Web服務(wù)器等)收集日志信息。將Snort警報(bào)數(shù)據(jù)寫入syslog服務(wù)器對(duì)于分析網(wǎng)絡(luò)***事件有幫助。它可以與其它工具謝工執(zhí)行實(shí)時(shí)報(bào)警和通知,所以這也是Snort一個(gè)比較重要的插件之一。
最簡(jiǎn)單方法是打開(kāi)snort_eth0.conf將384行的output alert_syslog: LOG_AUTH LOG_ALERT這行啟用,并重啟Snort即可生效。我們使用如下命令觀察Snort發(fā)出的警報(bào):
#tail –f /var/log/auth.log
Syslog配置選項(xiàng)
Syslog三個(gè)重要配置選項(xiàng):
l? Facility
l? Priority
l? Options
啟用選項(xiàng)的命令如下:
方法很簡(jiǎn)單,在上面的技術(shù)上加上這三個(gè)參數(shù)即可。
output alert_syslog: LOG_AUTH LOG_ALERT facility? priority options
保存退出并重啟Snort即可。
這時(shí),如果啟用了csv輸出,可以將syslog,csv輸出做個(gè)對(duì)比,如圖4所示(上部分為csv輸出,下部分為auth.log輸出)。
圖4?輸出結(jié)果比較
我們發(fā)現(xiàn)同樣一個(gè)***事件的報(bào)警,在它們的輸出中除了各式不統(tǒng)一以外,其它都相同。
(5)數(shù)據(jù)庫(kù)輸出
? ?數(shù)據(jù)庫(kù)輸出插件可以將日志記錄到關(guān)系型數(shù)據(jù)庫(kù)中,它支持MySQL等。當(dāng)數(shù)據(jù)庫(kù)插件被關(guān)聯(lián)到數(shù)據(jù)庫(kù)后,就可以實(shí)現(xiàn)對(duì)Snort報(bào)警進(jìn)行分類、查詢和按優(yōu)先級(jí)組織排序,甚至利用應(yīng)用程序?qū)?shù)據(jù)庫(kù)中的告警數(shù)據(jù)通過(guò)GUI界面展現(xiàn)給用戶。
? ?在千兆網(wǎng)絡(luò)環(huán)境下需要考慮性能問(wèn)題,數(shù)據(jù)庫(kù)插件有可能影響到Snort性能,插件自身并不是瓶頸,當(dāng)大量數(shù)據(jù)寫入數(shù)據(jù)庫(kù)時(shí),必須等待磁盤I/O相應(yīng),這時(shí)就會(huì)受到影響。如果通過(guò)網(wǎng)絡(luò)將日志存儲(chǔ)到另一臺(tái)主機(jī)的數(shù)據(jù)庫(kù)中那么延遲會(huì)比較大。后面我們會(huì)采用Barnyard+Unified的方式解決這種性能問(wèn)題。
? ?主要思路是讓Snort采用Unified的格式存儲(chǔ),以它的最大速度處理輸出數(shù)據(jù),而不是像傳統(tǒng)的要等到寫盤完成后,再繼續(xù)操作,這樣浪費(fèi)了大量的時(shí)間。Barnyard能將二進(jìn)制數(shù)解析成與它能夠識(shí)別的各種格式,并且是完全獨(dú)立于Snort運(yùn)行。警報(bào)被立刻寫入數(shù)據(jù)庫(kù)并且不影響Snort的抓包能力。所以說(shuō)這種組合適合于高帶寬環(huán)境。
我們還是查看/etc/snort/snort.eth0.conf配置文件,大約392行。
這里有2個(gè)重要的選項(xiàng)alert和log。
393行可以選擇獎(jiǎng)警報(bào)數(shù)據(jù)寫入數(shù)據(jù)庫(kù),394行可以同時(shí)將日志數(shù)據(jù)也寫入數(shù)據(jù)庫(kù)。
下面我們看看如何使用數(shù)據(jù)庫(kù)插件:
對(duì)照上面參數(shù)配置如下選項(xiàng):
<db_type>為mysql
User=<username>為snortdb_username或者為Snort傳感器創(chuàng)建的MySQL用戶名。
Password=<password> 為snortdb_password或?yàn)?/span>Snort傳感器創(chuàng)建snortdb_username的MySQL口令。
Dbname=<name>為snortdb或者自己指定的***數(shù)據(jù)庫(kù)名稱。
Host=<hostname>為本機(jī)環(huán)路地址127.0.0.1
(6)輸出unixsock
通過(guò)Alert_unixsock打開(kāi)UNIX套接字,并且把報(bào)警信息發(fā)送到那里。外部的程序/進(jìn)程會(huì)在這個(gè)套接字上偵聽(tīng)并實(shí)時(shí)接收這些報(bào)警數(shù)據(jù)。
例子:
output alert_unixsock
加入到snort.eth0.conf配置文件后,重啟Snort服務(wù)即生效。還可以通過(guò)以下命令手動(dòng)啟動(dòng):
# snort -c /etc/snort/snort.eth0.conf
此時(shí)會(huì)在/var/log/snort/下產(chǎn)生snort_alert文件
為了演示這一功能我們通過(guò)一小段程序(本地進(jìn)程間的通訊),來(lái)看看效果如何。以下Perl程序,其主要功能是將Snort傳送的數(shù)據(jù)報(bào)文的報(bào)警名稱通過(guò)讀取unixsock信息實(shí)現(xiàn)打印到屏幕。
執(zhí)行此Perl程序,結(jié)果如下。
我們看到顯示在屏幕的5條警報(bào)名稱。
(7)Unified格式輸出
前面介紹了多種輸出插件各異利弊,下面介紹OSSIM系統(tǒng)中常用的unified插件。這種插件的最大特點(diǎn)就是速度快,它能最快的輸出Snort報(bào)警信息和日志信息,它輸出兩類文件:警報(bào)文件和數(shù)據(jù)包日志文件,警報(bào)文件僅記錄摘要信息,內(nèi)容包括源IP、目的IP、協(xié)議、源端口、目的端口、報(bào)警消息ID、日志文件包含完整的包信息,用戶可以自己下載。
設(shè)置方法是啟用以下配置語(yǔ)句:
Output unified2: filename snort_eth0, limit 128
Filename后設(shè)置輸出警報(bào)文件名稱為snort_eth0。
Limit代表輸出文件允許的最大長(zhǎng)度,默認(rèn)值為128MB
以上幾種插件為snort常用方式尤其在日志分析中用的比較多,如果你剛接觸snort可以O(shè)SSIM3的環(huán)境中進(jìn)行練習(xí)。
開(kāi)源IDS系統(tǒng)安裝一點(diǎn)通視頻課程請(qǐng)參考?https://edu.51cto.com/course/7896.html?
總結(jié)
以上是生活随笔為你收集整理的Snort日志输出插件详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 浏览器渲染流水线解析
- 下一篇: nginx配置文件+本地测试请求转发到远