snort使用


http://jingyan.baidu.com/article/d8072ac45a626fec95cefd85.html
 

接上篇,如果編譯安裝snort並指定了prefix,那么須指定一個軟鏈接,不然每次要用絕對路徑,才可以使用。

[root@localhost ~]# ln -s /root/snort/st/bin/snort /bin/snort
[root@localhost ~]# snort -V

   ,,_     -*> Snort! <*-
  o"  )~   Version 2.9.7.0 GRE (Build 149)
   ''''    By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
           Copyright (C) 2014 Cisco and/or its affiliates. All rights reserved.
           Copyright (C) 1998-2013 Sourcefire, Inc., et al.
           Using libpcap version 1.4.0
           Using PCRE version: 7.8 2008-09-05
           Using ZLIB version: 1.2.3

snort有三種工作模式:嗅探器、數據包記錄器、網絡入侵檢測系統。嗅探器模式僅僅是從網絡上讀取數據包並作為連續不斷的流顯示在終端上。數據包記錄器模式把數據包記錄到硬盤上。網路入侵檢測模式是最復雜的,而且是可配置的。我們可以讓snort分析網絡數據流以匹配用戶定義的一些規則,並根據檢測結果采取一定的動作。

[root@localhost ~]# snort -vd -n 5
Exiting after 5 packets
Running in packet dump mode

        --== Initializing Snort ==--
Initializing Output Plugins!
pcap DAQ configured to passive.
Acquiring network traffic from "eth0".
Decoding Ethernet

        --== Initialization Complete ==--

[root@localhost ~]# snort  -l ./log
Running in packet logging mode

        --== Initializing Snort ==--
Initializing Output Plugins!
Log directory = ./log
pcap DAQ configured to passive.
Acquiring network traffic from "eth0".
Decoding Ethernet

        --== Initialization Complete ==--

[root@localhost ~]# snort -c snort.conf -l ./log
Running in IDS mode

        --== Initializing Snort ==--
Initializing Output Plugins!
Initializing Preprocessors!
Initializing Plug-ins!
Parsing Rules file "snort.conf"
Tagged Packet Limit: 256
Log directory = ./log

 


嗅探器
所謂的嗅探器模式就是snort從網絡上讀出數據包然后顯示在你的控制台上。首先,我們從最基本的用法入手。如果你只要把TCP/IP包頭信息打印在屏幕上,只需要輸入下面的命令:
[root@localhost ~]# snort -v
如果你要看到應用層的數據,可以使用:
[root@localhost ~]# snort -vd
如果你還要顯示數據鏈路層的信息,就使用下面的命令:
[root@localhost ~]# snort -vde

數據包記錄器
如果要把所有的包記錄到硬盤上,你需要指定一個日志目錄,snort就會自動記錄數據包:
[root@localhost ~]# mkdir log
[root@localhost ~]# snort -l ./log
Running in packet logging mode

        --== Initializing Snort ==--
Initializing Output Plugins!
Log directory = ./log
pcap DAQ configured to passive.
Acquiring network traffic from "eth0".
Decoding Ethernet

        --== Initialization Complete ==--

   ,,_     -*> Snort! <*-
  o"  )~   Version 2.9.7.0 GRE (Build 149)
   ''''    By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
           Copyright (C) 2014 Cisco and/or its affiliates. All rights reserved.
           Copyright (C) 1998-2013 Sourcefire, Inc., et al.
           Using libpcap version 1.4.0
           Using PCRE version: 7.8 2008-09-05
           Using ZLIB version: 1.2.3

Commencing packet processing (pid=29552)

[root@localhost log]# file log/snort.log.1423129666
snort.log.1423129666: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 1514)

網絡入侵檢測系統
snort最重要的用途還是作為網絡入侵檢測系統(NIDS),使用下面命令行可以啟動這種模式:
[root@localhost ~]# snort -l ./log -h 192.168.1.0/24 -c snort.conf
snort.conf是規則集文件。snort會對每個包和規則集進行匹配,發現這樣的包就采取相應的行動。如果你不指定輸出目錄,snort就輸出到/var/log/snort目錄。

如果你想長期使用snort作為自己的入侵檢測系統,最好不要使用-v選項。因為使用這個選項,使snort向屏幕上輸出一些信息,會大大降低snort的處理速度,從而在向顯示器輸出的過程中丟棄一些包。
此外,在絕大多數情況下,也沒有必要記錄數據鏈路層的包頭,所以-e選項也可以不用:
[root@localhost ~]# snort -l ./log -h 192.168.1.0/24 -c snort.conf -d
這是使用snort作為網絡入侵檢測系統最基本的形式,日志符合規則的包,以ASCII形式保存在有層次的目錄結構中。

網絡入侵檢測模式下的輸出選項

在NIDS模式下,有很多的方式來配置snort的輸出。在默認情況下,snort以ASCII格式記錄日志,使用full報警機制。如果使用full報警機制,snort會在包頭之后打印報警消息。如果你不需要日志包,可以使用-N選項。
snort有6種報警機制:full、fast、socket、syslog、smb(winpopup)和none。其中有4個可以在命令行狀態下使用-A選項設置。這4個是:
    -A fast:報警信息包括:一個時間戳(timestamp)、報警消息、源/目的IP地址和端口。
    -A full:是默認的報警模式。
    -A unsock:把報警發送到一個UNIX套接字,需要有一個程序進行監聽,這樣可以實現實時報警。
    -A none:關閉報警機制。
使用-s選項可以使snort把報警消息發送到syslog,默認的設備是LOG_AUTHPRIV和LOG_ALERT。可以修改snort.conf文件修改其配置。
snort還可以使用SMB報警機制,通過SAMBA把報警消息發送到Windows主機。為了使用這個報警機制,在運行./configure腳本時,必須使用--enable-smbalerts選項。
下面是一些輸出配置的例子:
使用默認的日志方式(以解碼的ASCII格式)並且把報警發給syslog:
[root@localhost ~]# snort -c snort.conf -l ./log -s -h 192.168.1.0/24
使用二進制日志格式和SMB報警機制:  
[root@localhost ~]# snort -c snort.conf -b -M WORKSTATIONS

 

http://blog.csdn.net/jo_say/article/details/6335640 

http://www.linuxidc.com/Linux/2013-11/92265p5.htm    snort中文手冊

對於大多數系統和網絡管理員來說,Snort 是一種常見的、熟悉的工具。遺憾的是,Web 程序員並不這樣認為。如果提到 Snort,他們就將它與 traceroute 和 ipconfig 等技術混同起來,認為那不是 Web 開發人員應該管的。
然而,Snort 絕不僅僅是一種管理員的工具。它是一種入侵檢測系統 —— 而不僅僅是工具。盡管主要通過命令行使用,但 Web 程序員以及管理員也可輕松訪問它。它是開源的,也就是說,它是免費的,與大多數開源工具不同,它得到了非常完善的維護。有着全面的文檔

snort使用一種簡單的,輕量級的規則描述語言,這種語言靈活而強大。在開發snort規則時要記住幾個簡單的原則。

大多數snort規則都寫在一個單行上,或者在多行之間的行尾用/分隔。Snort規則被分成兩個邏輯部分:規則頭和規則選項
規則頭包含規則的動作,協議,源和目標ip地址與網絡掩碼,以及源和目標端口信息;
規則選項包含報警消息內容和要檢查的包的具體部分。
下面是一個規則范例:
alert tcp any any -> 192.168.1.0/24 111 (content:"|00 01 86 a5|"; msg: "mountd access";)
第一個括號前的部分是規則頭(rule header),包含的括號內的部分是規則選項(rule options)。規則選項部分中冒號前的單詞稱為選項關鍵字(option keywords)。注意,不是所有規則都必須包含規則選項部分,選項部分只是為了使對要收集或報警,或丟棄的包的定義更加嚴格。組成一個規則的所有元素對於指定的要采取的行動都必須是真的。當多個元素放在一起時,可以認為它們組成了一個邏輯與(AND)語句。同時,snort規則庫文件中的不同規則可以認為組成了一個大的邏輯或(OR)語句。

規則頭
規則動作,協議,ip地址,端口號,方向操作符

規則動作
規則的頭包含了定義一個包的who,where和what信息,以及當滿足規則定義的所有屬性的包出現時要采取的行動。規則的第一項是"規則動作"(rule action),"規則動作"告訴snort在發現匹配規則的包時要干什么。在snort中有五種動作:alert、log、pass、activate和dynamic.

There are 5 available default actions in Snort, alert, log, pass, activate, and dynamic. In addition, if you are running Snort in inline mode, you have additional options which include drop, reject, and sdrop.

1、Alert-使用選擇的報警方法生成一個警報,然后記錄(log)這個包。
2、Log-記錄這個包。
3、Pass-丟棄(忽略)這個包。
4、activate-報警並且激活另一條dynamic規則。
5、dynamic-保持空閑直到被一條activate規則激活,被激活后就作為一條log規則執行。
你可以定義你自己的規則類型並且附加一條或者更多的輸出模塊給它,然后你就可以使用這些規則類型作為snort規則的一個動作。

Activate 和 dynamic 規則
注:Activate 和 dynamic 規則將被tagging 所代替。在snort的將來版本,Activate 和 dynamic 規則將完全被功能增強的tagging所代替。
Activate 和 dynamic 規則對給了snort更強大的能力。你現在可以用一條規則來激活另一條規則,當這條規則適用於一些數據包時。在一些情況下這是非常有用的,例如你想設置一條規則:當一條規則結束后來完成記錄。Activate規則除了包含一個選擇域:activates外就和一條alert規則一樣。Dynamic規則除了包含一個不同的選擇域:activated_by 外就和log規則一樣,dynamic規則還包含一個count域。
Activate規則除了類似一條alert規則外,當一個特定的網絡事件發生時還能告訴snort加載一條規則。Dynamic規則和log規則類似,但它是當一個activate規則發生后被動態加載的。把他們放在一起如下圖所示:
activate tcp !$HOME_NET any -> $HOME_NET 143 (flags: PA; content: "|E8C0FFFFFF|/bin"; activates: 1; msg: "IMAP buffer overflow!";)
dynamic tcp !$HOME_NET any -> $HOME_NET 143 (activated_by: 1; count: 50;)

下面這個例子創建一條規則,記錄到tcpdump。
ruletype suspicious
{
type log output
log_tcpdump: suspicious.log
}
下面這個例子創建一條規則,記錄到系統日志和MySQL數據庫
ruletype redalert
{
type alert output
alert_syslog: LOG_AUTH LOG_ALERT
output database: log, mysql, user=snort dbname=snort host=localhost
}

協議
規則的下一部分是協議。Snort當前分析可疑包的ip協議有四種:tcp 、udp、icmp和ip。將來可能會更多,例如ARP、IGRP、GRE、OSPF、RIP、IPX等。

ip地址
規則頭的下一個部分處理一個給定規則的ip地址和端口號信息。關鍵字"any"可以被用來定義任何地址。Snort沒有提供根據ip地址查詢域名的機制。地址就是由直接的數字型ip地址和一個cidr塊組成的。Cidr塊指示作用在規則地址和需要檢查的進入的任何包的網絡掩碼。/24表示c類網絡, /16表示b類網絡,/32表示一個特定的機器的地址。例如,192.168.1.0/24代表從192.168.1.1到192.168.1.255的地址塊。在這個地址范圍的任何地址都匹配使用這個192.168.1.0/24標志的規則。這種記法給我們提供了一個很好的方法來表示一個很大的地址空間。
有一個操作符可以應用在ip地址上,它是否定運算符(negation operator)。這個操作符告訴snort匹配除了列出的ip地址以外的所有ip地址。否定操作符用"!"表示。下面這條規則對任何來自本地網絡以外的流都進行報警。
alert tcp !192.168.1.0/24 any -> 192.168.1.0/24 111 (content: "|00 01 86 a5|"; msg: "external mountd access";)
這個規則的ip地址代表"任何源ip地址不是來自內部網絡而目標地址是內部網絡的tcp包"。
你也可以指定ip地址列表,一個ip地址列表由逗號分割的ip地址和CIDR塊組成,並且要放在方括號內“[”,“]”。此時,ip列表可以不包含空格在ip地址之間。下面是一個包含ip地址列表的規則的例子。
alert tcp ![192.168.1.0/24,10.1.1.0/24] any -> [192.168.1.0/24,10.1.1.0/24] 111 (content: "|00 01 86 a5|"; msg: "external mountd access";)

端口號
端口號可以用幾種方法表示,包括"any"端口、靜態端口定義、范圍、以及通過否定操作符。
"any"端口是一個通配符,表示任何端口。靜態端口定義表示一個單個端口號,例如111表示portmapper,23表示telnet,80表示http等等。端口范圍用范圍操作符":"表示。范圍操作符可以有數種使用方法,如下所示:
log udp any any -> 192.168.1.0/24 1:1024
記錄來自任何端口的,目標端口范圍在1到1024的udp流
log tcp any any -> 192.168.1.0/24 :6000
記錄來自任何端口,目標端口小於等於6000的tcp流
log tcp any :1024 -> 192.168.1.0/24 500:
記錄來自任何小於等於1024的特權端口,目標端口大於等於500的tcp流
log tcp any any -> 192.168.1.0/24 !6000:6010
端口否定操作符用"!"表示。它可以用於任何規則類型(除了any,這表示沒有,呵呵)。例如,由於某個古怪的原因你需要記錄除x windows端口以外的所有一切,你可以使用類似下面的規則:

方向操作符
方向操作符"->"表示規則所施加的流的方向。方向操作符左邊的ip地址和端口號被認為是流來自的源主機,方向操作符右邊的ip地址和端口信息是目標主機,還有一個雙向操作符"<>"。它告訴snort把地址/端口號對既作為源,又作為目標來考慮。這對於記錄/分析雙向對話很方便,例如telnet或者pop3會話。用來記錄一個telnet會話的兩側的流的范例如下:
log !192.168.1.0/24 any <> 192.168.1.0/24 23


http://manual.snort.org/node16.html
Includes
include允許由命令行指定的規則文件包含其他的規則文件。
格式:
include:
注意在該行結尾處沒有分號。被包含的文件會把任何預先定義的變量值替換為自己的變量引用。參見變量(Variables)一節以獲取關於在SNORT規則文件中定義和使用變量的更多信息。

Variables
變量可能在snort中定義。
格式:
var:
例子:
var MY_NET 192.168.1.0/24
alert tcp any any -> $MY_NET any (flags: S; msg: "SYN packet";)
規則變量名可以用多種方法修改。可以在"$"操作符之后定義變量。"?" 和 "-"可用於變量修改操作符。
$var - 定義變量。
$(var) - 用變量"var"的值替換。
$(var:-default) - 用變量"var"的值替換,如果"var"沒有定義用"default"替換。
$(var:?message) - 用變量"var"的值替換或打印出錯誤消息"message"然后退出。
例子:
var MY_NET $(MY_NET:-192.168.1.0/24)
log tcp any any -> $(MY_NET:?MY_NET is undefined!) 23

Config
Snort的很多配置和命令行選項都可以在配置文件中設置。
格式:
config [: ]
Directives
    order 改變規則的順序( snort -o )
    alertfile 設置報警輸出文件,例如:config alertfile: alerts
    classification 創建規則分類。
    decode_arp 開啟arp解碼功能。(snort -a)
    dump_chars_only 開啟字符傾卸功能。(snort -C)
    dump_payload 傾卸應用層數據。(snort -d)
    decode_data_link 解碼第二層數據包頭。(snort -e)
    bpf_file 指定BPF過濾器(snort -F)。例如:config bpf_file: filename.bpf
    set_gid 改變GID (snort -g)。例如:config set_gid: snort_group
    daemon 以后台進程運行。(snort -D)
    reference_net 設置本地網絡。 (snort -h). 例如:config reference_net:192.168.1.0/24
    interface 設置網絡接口(snort –i )。例如:config interface: xl0
    alert_with_interface_name 報警時附加上接口信息。(snort -I)
    logdir 設置記錄目錄 (snort -l)。例如:config logdir: /var/log/snort
    umask 設置snort輸出文件的權限位。(snort -m). Example: config umask: 022
    pkt_count 處理n個數據包后就退出。(snort -n). Example: config pkt_count: 13
    nolog 關閉記錄功能,報警仍然有效。 (snort -N)
    obfuscate 使IP地址混亂 (snort -O)
    no_promisc 關閉混雜模式。(snort -p)
    quiet 安靜模式,不顯示標志和狀態報告。(snort -q)
    checksum_mode 計算校驗和的協議類型。類型值:none, noip, notcp, noicmp, noudp, all
    utc 在時間戳上用UTC時間代替本地時間。 (snort -U)
    verbose 將詳細記錄信息打印到標准輸出。 (snort -v)
    dump_payload_verbose 傾卸數據鏈路層的原始數據包 ( snort -X )
    show_year 在時間戳上顯示年份。(snort -y)
    stateful 為stream4設置保證模式。
    min_ttl 設置一個snort內部的ttl值以忽略所有的流量。
    disable_decode_alerts 關閉解碼時發出的報警。
    disable_tcpopt_experimental_alerts 關閉tcp實驗選項所發出的報警。
    disable_tcpopt_obsolete_alerts關閉tcp過時選項所發出的報警。
    disable_tcpopt_ttcp_alerts 關閉ttcp選項所發出的報警。
    disable_tcpopt_alerts 關閉選項長度確認報警。
    disable_ipopt_alerts 關閉IP選項長度確認報警。
    detection 配置檢測引擎。( 例如:search-method lowmem )
    reference 給snort加入一個新的參考系統。

preprocessors

 

[root@localhost ~]# snort -n 50 -A console
[root@localhost ~]# cat snort.conf
var MY_NET 192.168.2.0/24
alert tcp any any -> $MY_NET any (flags: S; msg: "SYN packet"; sid:1000983; rev:1;)
[root@localhost ~]# snort -c snort.conf -l ./log  -A console

[root@localhost ~]# snort -c snort.conf
Running in IDS mode

        --== Initializing Snort ==--
Initializing Output Plugins!
Initializing Preprocessors!
Initializing Plug-ins!
Parsing Rules file "snort.conf"
Tagged Packet Limit: 256
Log directory = /var/log/snort

+++++++++++++++++++++++++++++++++++++++++++++++++++
Initializing rule chains...
ERROR: snort.conf(2) Each rule must contain a rule sid.
Fatal Error, Quitting..

http://manual.snort.org/node20.html
1.先開啟下面的命令,2.同時在另外一台windows機器上用Zenmap去掃描snort主機的tcp端口,就會有如下大量的匹配。 [root@localhost
~]# snort -c snort.conf -q ^C*** Caught Int-Signal Rule Profile Statistics (worst 4 rules) ========================================================== Num SID GID Rev Checks Matches Alerts Microsecs Avg/Check Avg/Match Avg/Nonmatch Disabled === === === === ====== ======= ====== ========= ========= ========= ============ ======== 1 1000983 1 1 115559 58435 58435 324005 2.8 4.5 1.0 0 [root@localhost ~]# cat snort.conf var MY_NET 192.168.2.0/24 alert tcp any any -> $MY_NET any (flags: S; msg: "SYN packet"; sid:1000983; rev:1;) config profile_rules: print 4, sort total_ticks

[root@localhost ~]# snort -c snort.conf -q
^C*** Caught Int-Signal
Preprocessor Profile Statistics (worst 10)
==========================================================
 Num            Preprocessor Layer     Checks      Exits           Microsecs  Avg/Check Pct of Caller Pct of Total
 ===            ============ =====     ======      =====           =========  ========= ============= ============
    1         rule tree eval     2         74         74                 318       4.30         74.85         0.03
     1                 flags     3         74         74                  58       0.80         18.52         0.01
    2               rtn eval     2         16         16                  32       2.01          7.55         0.00
  3                   decode     0     130460     130460              183278       1.40         15.66        15.66
  4                   detect     0     130389     130389              128603       0.99         10.99        10.99
  5                   eventq     0     260920     260920              226500       0.87         19.35        19.35
 total                 total     0     130460     130460             1170468       8.97          0.00         0.00
[root@localhost ~]# cat snort.conf
var MY_NET 192.168.2.0/24
alert tcp any any -> $MY_NET 80 (flags: S; msg: "SYN packet"; sid:1000983; rev:1;)
alert tcp any any -> $MY_NET 22 (flags: S; msg: "SYN packet"; sid:1000984; rev:1;)
#config profile_rules: print 1, sort total_ticks
config profile_preprocs: print 10, sort avg_ticks

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM