日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Snort 中文手冊

 農(nóng)夫子oice 2008-01-14
摘要
snort有三種工作模式:嗅探器、數(shù)據(jù)包記錄器、網(wǎng)絡入侵檢測系統(tǒng)。嗅探器模式僅僅是從網(wǎng)絡上讀取數(shù)據(jù)包并作為連續(xù)不斷的流顯示在終端上。數(shù)據(jù)包記錄器模式把數(shù)據(jù)包記錄到硬盤上。網(wǎng)路入侵檢測模式是最復雜的,而且是可配置的。我們可以讓snort分析網(wǎng)絡數(shù)據(jù)流以匹配用戶定義的一些規(guī)則,并根據(jù)檢測結(jié)果采取一定的動作。(2003-12-11 16:39:12)


Snort 用戶手冊

 

第一章 snort簡介

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

嗅探器

    所謂的嗅探器模式就是snort從網(wǎng)絡上讀出數(shù)據(jù)包然后顯示在你的控制臺上。首先,我們從最基本的用法入手。如果你只要把TCP/IP包頭信息打印在屏幕上,只需要輸入下面的命令:

  ./snort -v

    使用這個命令將使snort只輸出IP和TCP/UDP/ICMP的包頭信息。如果你要看到應用層的數(shù)據(jù),可以使用:

      ./snort -vd

    這條命令使snort在輸出包頭信息的同時顯示包的數(shù)據(jù)信息。如果你還要顯示數(shù)據(jù)鏈路層的信息,就使用下面的命令:

  ./snort -vde

    注意這些選項開關還可以分開寫或者任意結(jié)合在一塊。例如:下面的命令就和上面最后的一條命令等價:

  ./snort -d -v –e

數(shù)據(jù)包記錄器

    如果要把所有的包記錄到硬盤上,你需要指定一個日志目錄,snort就會自動記錄數(shù)據(jù)包:

      ./snort -dev -l ./log

    當然,./log目錄必須存在,否則snort就會報告錯誤信息并退出。當snort在這種模式下運行,它會記錄所有看到的包將其放到一個目錄中,這個目錄以數(shù)據(jù)包目的主機的IP地址命名,例如:192.168.10.1

  如果你只指定了-l命令開關,而沒有設置目錄名,snort有時會使用遠程主機的IP地址作為目錄,有時會使用本地主機IP地址作為目錄名。為了只對本地網(wǎng)絡進行日志,你需要給出本地網(wǎng)絡:

  ./snort -dev -l ./log -h 192.168.1.0/24

    這個命令告訴snort把進入C類網(wǎng)絡192.168.1的所有包的數(shù)據(jù)鏈路、TCP/IP以及應用層的數(shù)據(jù)記錄到目錄./log中。

    如果你的網(wǎng)絡速度很快,或者你想使日志更加緊湊以便以后的分析,那么應該使用二進制的日志文件格式。所謂的二進制日志文件格式就是tcpdump程序使用的格式。使用下面的命令可以把所有的包記錄到一個單一的二進制文件中:

  ./snort -l ./log -b

    注意此處的命令行和上面的有很大的不同。我們勿需指定本地網(wǎng)絡,因為所有的東西都被記錄到一個單一的文件。你也不必冗余模式或者使用-d、-e功能選項,因為數(shù)據(jù)包中的所有內(nèi)容都會被記錄到日志文件中。

    你可以使用任何支持tcpdump二進制格式的嗅探器程序從這個文件中讀出數(shù)據(jù)包,例如: tcpdump或者Ethereal。使用-r功能開關,也能使snort讀出包的數(shù)據(jù)。snort在所有運行模式下都能夠處理tcpdump格式的文件。例如:如果你想在嗅探器模式下把一個tcpdump格式的二進制文件中的包打印到屏幕上,可以輸入下面的命令:

      ./snort -dv -r packet.log

    在日志包和入侵檢測模式下,通過BPF(BSD Packet Filter)接口,你可以使用許多方式維護日志文件中的數(shù)據(jù)。例如,你只想從日志文件中提取ICMP包,只需要輸入下面的命令行:

      ./snort -dvr packet.log icmp

網(wǎng)絡入侵檢測系統(tǒng)

    snort最重要的用途還是作為網(wǎng)絡入侵檢測系統(tǒng)(NIDS),使用下面命令行可以啟動這種模式:

      ./snort -dev -l ./log -h 192.168.1.0/24 -c snort.conf

    snort.conf是規(guī)則集文件。snort會對每個包和規(guī)則集進行匹配,發(fā)現(xiàn)這樣的包就采取相應的行動。如果你不指定輸出目錄,snort就輸出到/var/log/snort目錄。

    注意:如果你想長期使用snort作為自己的入侵檢測系統(tǒng),最好不要使用-v選項。因為使用這個選項,使snort向屏幕上輸出一些信息,會大大降低snort的處理速度,從而在向顯示器輸出的過程中丟棄一些包。

    此外,在絕大多數(shù)情況下,也沒有必要記錄數(shù)據(jù)鏈路層的包頭,所以-e選項也可以不用:

      ./snort -d -h 192.168.1.0/24 -l ./log -c snort.conf

    這是使用snort作為網(wǎng)絡入侵檢測系統(tǒng)最基本的形式,日志符合規(guī)則的包,以ASCII形式保存在有層次的目錄結(jié)構(gòu)中。

網(wǎng)絡入侵檢測模式下的輸出選項

    在NIDS模式下,有很多的方式來配置snort的輸出。在默認情況下,snort以ASCII格式記錄日志,使用full報警機制。如果使用full報警機制,snort會在包頭之后打印報警消息。如果你不需

要日志包,可以使用-N選項。

    snort有6種報警機制:full、fast、socket、syslog、smb(winpopup)和none。其中有4個可以在命令行狀態(tài)下使用-A選項設置。這4個是:

  • -A fast:報警信息包括:一個時間戳(timestamp)、報警消息、源/目的IP地址和端口。
    -A full:是默認的報警模式。
    -A unsock:把報警發(fā)送到一個UNIX套接字,需要有一個程序進行監(jiān)聽,這樣可以實現(xiàn)實時報警。
    -A none:關閉報警機制。

    使用-s選項可以使snort把報警消息發(fā)送到syslog,默認的設備是LOG_AUTHPRIV和LOG_ALERT??梢孕薷膕nort.conf文件修改其配置。

    snort還可以使用SMB報警機制,通過SAMBA把報警消息發(fā)送到Windows主機。為了使用這個報警機制,在運行./configure腳本時,必須使用--enable-smbalerts選項。
下面是一些輸出配置的例子:

    使用默認的日志方式(以解碼的ASCII格式)并且把報警發(fā)給syslog:

    ./snort -c snort.conf -l ./log -s -h 192.168.1.0/24

    使用二進制日志格式和SMB報警機制:  

./snort -c snort.conf -b -M WORKSTATIONS

第二章 編寫snort 規(guī)則

基礎

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

    第一,大多數(shù)snort規(guī)則都寫在一個單行上,或者在多行之間的行尾用/分隔。Snort規(guī)則被分成兩個邏輯部分:規(guī)則頭和規(guī)則選項。規(guī)則頭包含規(guī)則的動作,協(xié)議,源和目標ip地址與網(wǎng)絡掩碼,以及源和目標端口信息;規(guī)則選項部分包含報警消息內(nèi)容和要檢查的包的具體部分。
下面是一個規(guī)則范例:

    alert tcp any any -> 192.168.1.0/24 111 (content:"|00 01 86 a5|"; msg: "mountd access";)

    第一個括號前的部分是規(guī)則頭(rule header),包含的括號內(nèi)的部分是規(guī)則選項(rule options)。規(guī)則選項部分中冒號前的單詞稱為選項關鍵字(option keywords)。注意,不是所有規(guī)則都必須包含規(guī)則選項部分,選項部分只是為了使對要收集或報警,或丟棄的包的定義更加嚴格。組成一個規(guī)則的所有元素對于指定的要采取的行動都必須是真的。當多個元素放在一起時,可以認為它們組成了一個邏輯與(AND)語句。同時,snort規(guī)則庫文件中的不同規(guī)則可以認為組成了一個大的邏輯或(OR)語句。

規(guī)則高級概念

Includes:


include允許由命令行指定的規(guī)則文件包含其他的規(guī)則文件。

格式:

include:

注意在該行結(jié)尾處沒有分號。被包含的文件會把任何預先定義的變量值替換為自己的變量引用。參見變量(Variables)一節(jié)以獲取關于在SNORT規(guī)則文件中定義和使用變量的更多信息。

Variables :

變量可能在snort中定義。

格式:

var:

例子:

var MY_NET 192.168.1.0/24
alert tcp any any -> $MY_NET any (flags: S; msg: "SYN packet";)

規(guī)則變量名可以用多種方法修改。可以在"$"操作符之后定義變量。"?" 和 "-"可用于變量修改操作符。

$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 改變規(guī)則的順序( snort -o )
  • alertfile 設置報警輸出文件,例如:config alertfile: alerts
  • classification 創(chuàng)建規(guī)則分類。
  • decode_arp 開啟arp解碼功能。(snort -a)
  • dump_chars_only 開啟字符傾卸功能。(snort -C)
  • dump_payload 傾卸應用層數(shù)據(jù)。(snort -d)
  • decode_data_link 解碼第二層數(shù)據(jù)包頭。(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 設置本地網(wǎng)絡。 (snort -h). 例如:config reference_net:192.168.1.0/24
  • interface 設置網(wǎng)絡接口(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個數(shù)據(jù)包后就退出。(snort -n). Example: config pkt_count: 13
  • nolog 關閉記錄功能,報警仍然有效。 (snort -N)
  • obfuscate 使IP地址混亂 (snort -O)
  • no_promisc 關閉混雜模式。(snort -p)
  • quiet 安靜模式,不顯示標志和狀態(tài)報告。(snort -q)
  • checksum_mode 計算校驗和的協(xié)議類型。類型值:none, noip, notcp, noicmp, noudp, all
  • utc 在時間戳上用UTC時間代替本地時間。 (snort -U)
  • verbose 將詳細記錄信息打印到標準輸出。 (snort -v)
  • dump_payload_verbose 傾卸數(shù)據(jù)鏈路層的原始數(shù)據(jù)包 ( snort -X )
  • show_year 在時間戳上顯示年份。(snort -y)
  • stateful 為stream4設置保證模式。
  • min_ttl 設置一個snort內(nèi)部的ttl值以忽略所有的流量。
  • disable_decode_alerts 關閉解碼時發(fā)出的報警。
  • disable_tcpopt_experimental_alerts 關閉tcp實驗選項所發(fā)出的報警。
  • disable_tcpopt_obsolete_alerts關閉tcp過時選項所發(fā)出的報警。
  • disable_tcpopt_ttcp_alerts 關閉ttcp選項所發(fā)出的報警。
  • disable_tcpopt_alerts 關閉選項長度確認報警。
  • disable_ipopt_alerts 關閉IP選項長度確認報警。
  • detection 配置檢測引擎。( 例如:search-method lowmem )
  • reference 給snort加入一個新的參考系統(tǒng)。

規(guī)則頭

規(guī)則動作:

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

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

下面這個例子創(chuàng)建一條規(guī)則,記錄到tcpdump。

ruletype suspicious
{
type log output
log_tcpdump: suspicious.log
}
搠?敧?捯浵???o??< 下面這個例子創(chuàng)建一條規(guī)則,記錄到系統(tǒng)日志和MySQL數(shù)據(jù)庫
ruletype redalert
{
type alert output
alert_syslog: LOG_AUTH LOG_ALERT
output database: log, mysql, user=snort dbname=snort host=localhost
}

協(xié)議


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

Ip地址

規(guī)則頭的下一個部分處理一個給定規(guī)則的ip地址和端口號信息。關鍵字"any"可以被用來定義任何地址。Snort沒有提供根據(jù)ip地址查詢域名的機制。地址就是由直接的數(shù)字型ip地址和一個cidr塊組成的。Cidr塊指示作用在規(guī)則地址和需要檢查的進入的任何包的網(wǎng)絡掩碼。/24表示c類網(wǎng)絡, /16表示b類網(wǎng)絡,/32表示一個特定的機器的地址。例如,192.168.1.0/24代表從192.168.1.1到192.168.1.255的地址塊。在這個地址范圍的任何地址都匹配使用這個192.168.1.0/24標志的規(guī)則。這種記法給我們提供了一個很好的方法來表示一個很大的地址空間。

有一個操作符可以應用在ip地址上,它是否定運算符(negation operator)。這個操作符告訴snort匹配除了列出的ip地址以外的所有ip地址。否定操作符用"!"表示。下面這條規(guī)則對任何來自本地網(wǎng)絡以外的流都進行報警。

alert tcp !192.168.1.0/24 any -> 192.168.1.0/24 111 (content: "|00 01 86 a5|"; msg: "external mountd access";)

這個規(guī)則的ip地址代表"任何源ip地址不是來自內(nèi)部網(wǎng)絡而目標地址是內(nèi)部網(wǎng)絡的tcp包"。
你也可以指定ip地址列表,一個ip地址列表由逗號分割的ip地址和CIDR塊組成,并且要放在方括號內(nèi)“[”,“]”。此時,ip列表可以不包含空格在ip地址之間。下面是一個包含ip地址列表的規(guī)則的例子。

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"端口、靜態(tài)端口定義、范圍、以及通過否定操作符。"any"端口是一個通配符,表示任何端口。靜態(tài)端口定義表示一個單個端口號,例如111表示portmapper,23表示telnet,80表示http等等。端口范圍用范圍操作符":"表示。范圍操作符可以有數(shù)種使用方法,如下所示:

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流


端口否定操作符用"!"表示。它可以用于任何規(guī)則類型(除了any,這表示沒有,呵呵)。例如,由于某個古怪的原因你需要記錄除x windows端口以外的所有一切,你可以使用類似下面的規(guī)則:

log tcp any any -> 192.168.1.0/24 !6000:6010

方向操作符

方向操作符"->"表示規(guī)則所施加的流的方向。方向操作符左邊的ip地址和端口號被認為是流來自的源主機,方向操作符右邊的ip地址和端口信息是目標主機,還有一個雙向操作符"<>"。它告訴snort把地址/端口號對既作為源,又作為目標來考慮。這對于記錄/分析雙向?qū)υ捄芊奖?,例如telnet或者pop3會話。用來記錄一個telnet會話的兩側(cè)的流的范例如下:

log !192.168.1.0/24 any <> 192.168.1.0/24 23

Activate 和 dynamic 規(guī)則:

注:Activate 和 dynamic 規(guī)則將被tagging 所代替。在snort的將來版本,Activate 和 dynamic 規(guī)則將完全被功能增強的tagging所代替。

Activate 和 dynamic 規(guī)則對給了snort更強大的能力。你現(xiàn)在可以用一條規(guī)則來激活另一條規(guī)則,當這條規(guī)則適用于一些數(shù)據(jù)包時。在一些情況下這是非常有用的,例如你想設置一條規(guī)則:當一條規(guī)則結(jié)束后來完成記錄。Activate規(guī)則除了包含一個選擇域:activates外就和一條alert規(guī)則一樣。Dynamic規(guī)則除了包含一個不同的選擇域:activated_by 外就和log規(guī)則一樣,dynamic規(guī)則還包含一個count域。

Actevate規(guī)則除了類似一條alert規(guī)則外,當一個特定的網(wǎng)絡事件發(fā)生時還能告訴snort加載一條規(guī)則。Dynamic規(guī)則和log規(guī)則類似,但它是當一個activate規(guī)則發(fā)生后被動態(tài)加載的。把他們放在一起如下圖所示:

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;)

規(guī)則選項

規(guī)則選項組成了snort入侵檢測引擎的核心,既易用又強大還靈活。所有的snort規(guī)則選項用分號";"隔開。規(guī)則選項關鍵字和它們的參數(shù)用冒號":"分開。按照這種寫法,snort中有42個規(guī)則選項關鍵字。

msg - 在報警和包日志中打印一個消息。
logto - 把包記錄到用戶指定的文件中而不是記錄到標準輸出。
ttl - 檢查ip頭的ttl的值。
tos 檢查IP頭中TOS字段的值。
id - 檢查ip頭的分片id值。
ipoption 查看IP選項字段的特定編碼。
fragbits 檢查IP頭的分段位。
dsize - 檢查包的凈荷尺寸的值 。
flags -檢查tcp flags的值。
seq - 檢查tcp順序號的值。
ack - 檢查tcp應答(acknowledgement)的值。
window 測試TCP窗口域的特殊值。
itype - 檢查icmp type的值。
icode - 檢查icmp code的值。
icmp_id - 檢查ICMP ECHO ID的值。
icmp_seq - 檢查ICMP ECHO 順序號的值。
content - 在包的凈荷中搜索指定的樣式。
content-list 在數(shù)據(jù)包載荷中搜索一個模式集合。
offset - content選項的修飾符,設定開始搜索的位置 。
depth - content選項的修飾符,設定搜索的最大深度。
nocase - 指定對content字符串大小寫不敏感。
session - 記錄指定會話的應用層信息的內(nèi)容。
rpc - 監(jiān)視特定應用/進程調(diào)用的RPC服務。
resp - 主動反應(切斷連接等)。
react - 響應動作(阻塞web站點)。
reference - 外部攻擊參考ids。
sid - snort規(guī)則id。
rev - 規(guī)則版本號。
classtype - 規(guī)則類別標識。
priority - 規(guī)則優(yōu)先級標識號。
uricontent - 在數(shù)據(jù)包的URI部分搜索一個內(nèi)容。
tag - 規(guī)則的高級記錄行為。
ip_proto - IP頭的協(xié)議字段值。
sameip - 判定源IP和目的IP是否相等。
stateless - 忽略劉狀態(tài)的有效性。
regex - 通配符模式匹配。
搠?敧?捯浵???o??< distance - 強迫關系模式匹配所跳過的距離。
within - 強迫關系模式匹配所在的范圍。
byte_test - 數(shù)字模式匹配。
byte_jump - 數(shù)字模式測試和偏移量調(diào)整。

msg

msg規(guī)則選項告訴記錄和報警引擎,記錄或報警一個包的內(nèi)容的同時打印的消息。它是一個簡單的文本字符串,轉(zhuǎn)義符是""。
格式:
msg: "";

logto

logto選項告訴snort把觸發(fā)該規(guī)則的所有的包記錄到一個指定的輸出日志文件中。這在把來自諸如nmap活動,http cgi掃描等等的數(shù)據(jù)組合到一起時很方便。需要指出的是當snort工作在二進制記錄模式下時這個選項不起作用。
格式:
logto:"filename";

ttl

這個規(guī)則選項用于設置一個要檢查的存活期的值。只有確切地匹配時它所進行的檢查才成功。這個選項關鍵字用于檢測traceroute。
格式:
ttl:;

TOS

tos關鍵字允許你驗證IP頭中TOS字段為一個特殊的值。只有匹配時才執(zhí)行成功。
格式:
tos: ;

id

這個選項關鍵字用于檢測ip頭的分片id的值。有些黑客工具(以及別的程序)為了各種目的設置這個域的值,例如一些黑客常使用31337。用一個簡單的規(guī)則檢查這個值就可以對付他們。
格式:
id: ;

Ipoption

如果數(shù)據(jù)包中使用了IP選項,Ipoption選項會查找使用中的某個特別IP選項,比如源路由。這個選項的合法參數(shù)如下:

rr - Record route(記錄路由)
eol - End of list (列表結(jié)尾)
nop - No op (無所作為)
ts - Time Stamp (時間戳)
sec - IP security option (IP安全選項)
lsrr - Loose source routing (松散源路由)
ssrr - Strict source routing (嚴格源路由)
satid - Stream identifier (流標示符)

松散和嚴格源路由是IP選項中最經(jīng)常被檢查的內(nèi)容,但是它們并沒有被用在任何廣泛使用的Internet應用中。每一個特定的規(guī)則只能用這個選項一次。

格式:

ipoption: option;

Fragbits

這條規(guī)則檢測IP頭中的分段和保留位字段的值,共有三個位能被檢測,保留位RB(Reserved Bit ), 更多分段位MF(More Fragments ), 和不分段位DF(Don’t Fragment)。這些位可以結(jié)合在一起來檢測。使用下面的值來代表這些位,R-RB,M-MF,D-DF。你也可以使用修飾語對特殊的位來指出合理的匹配標準:* + 所有標記匹配特殊位外加任何其他*;*-任何標記匹配如果任何位被設置為*;!如果指定位沒有設置就沒有標記匹配。

格式:
fragbits: ;

例子:
alert tcp !$HOME_NET any -> $HOME_NET any (fragbits: R+; msg: "Rerserved bit set!";)

dsize

dsize選項用于檢查包的凈荷的大小。它可以設置成任意值,可以使用大于/小于符號來指定范圍。例如,如果你知道某個特定的服務有一個特定大小的緩沖區(qū),你可以設定這個選項來監(jiān)視緩沖區(qū)溢出的企圖。它在檢查緩沖區(qū)溢出時比檢查凈荷內(nèi)容的方法要快得多。

格式:
dsize: [<>][<>];
說明:“> <”號是可選的。

content

content 關鍵字是snort中比較重要的一個。它允許用戶設置規(guī)則在包的凈荷中搜索指定的內(nèi)容并根據(jù)內(nèi)容觸發(fā)響應。當進行content選項模式匹配時, Boyer-Moore模式匹配函數(shù)被調(diào)用,并且對包的內(nèi)容進行檢查(很花費計算能力)。如果包的凈荷中包含的數(shù)據(jù)確切地匹配了參數(shù)的內(nèi)容,這個檢查成功并且該規(guī)則選項的其他部分被執(zhí)行。注意這個檢查是大小寫敏感的。

Content關鍵字的選項數(shù)據(jù)比較復雜;它可以包含混合的文本和二進制數(shù)據(jù)。二進制數(shù)據(jù)一般包含在管道符號中("|"),表示為字節(jié)碼(bytecode)。字節(jié)碼把二進制數(shù)據(jù)表示為16進制數(shù)字,是描述復雜二進制數(shù)據(jù)的好方法。下面是包含了一個混合數(shù)據(jù)的snort規(guī)則范例。

格式:
content: [!] "";

例子:
alert tcp any any -> 192.168.1.0/24 143 (content: "|90C8 C0FF FFFF|/bin/sh"; msg: "IMAP buffer overflow!";)

注:多內(nèi)容的規(guī)則可以放在一條規(guī)則中,還有(: ; / “)不能出現(xiàn)在content規(guī)則中。如果一條規(guī)則前面有一個“!”。那么那些不包含這些內(nèi)容的數(shù)據(jù)包將觸發(fā)報警。這對于關注那些不包含一定內(nèi)容的數(shù)據(jù)包是有用的。

offset

offset規(guī)則選項被用作使用content規(guī)則選項關鍵字的規(guī)則的修飾符。這個關鍵字修飾符指定模式匹配函數(shù)從包凈荷開始處開始搜索的偏移量。它對于cgi掃描檢測規(guī)則很有用,cgi掃描的內(nèi)容搜索字符串不會在凈荷的前4個字節(jié)中出現(xiàn)。小心不要把這個偏移量設置的太嚴格了,會有可能漏掉攻擊!這個規(guī)則選項關鍵字必須和content規(guī)則選項一起使用。

格式:
offset: ;

depth

depth也是一個content規(guī)則選項修飾符。它設置了內(nèi)容模式匹配函數(shù)從他搜索的區(qū)域的起始位置搜索的最大深度。它對于限制模式匹配函數(shù)超出搜索區(qū)域指定范圍而造成無效搜索很有用。(也就是說,如果你在一個web包中搜索"cgi-bin/phf",你可能不需要浪費時間搜索超過凈荷的頭20 個字節(jié))。

格式:
depth: ;

例子:
alert tcp any any -> 192.168.1.0/24 80 (content: "cgi-bin/phf"; offset: 3; depth: 22; msg: "CGI-PHF access";)

nocase

nocase選項用于取消content規(guī)則中的大小寫敏感性。它在規(guī)則中指定后,任何與包凈荷進行比較的ascii字符都被既作為大寫又作為小寫對待。

格式:
nocase;

例子:
alert tcp any any -> 192.168.1.0/24 21 (content: "USER root"; nocase; msg: "FTP root user access attempt";)

flags

這個規(guī)則檢查tcp標志。在snort中有9個標志變量:

F - FIN (LSB in TCP Flags byte)
S - SYN
R - RST
P - PSH
A - ACK
U - URG
2 - Reserved bit 2
1 - Reserved bit 1 (MSB in TCP Flags byte)
0 - No TCP Flags Set
在這些標志之間還可以使用邏輯操作符:
+ ALL flag, 匹配所有的指定的標志外加一個標志。
* ANY flag, 匹配指定的任何一個標志。
! NOT flag, 如果指定的標志不在這個數(shù)據(jù)包中就匹配成功。
保留位可以用來檢測不正常行為,例如IP棧指紋攻擊或者其他可疑的行為。

格式:
flags: [,mask value];

例子:
alert any any -> 192.168.1.0/24 any (flags: SF,12; msg: "Possible SYN FIN scan";)

seq

這個規(guī)則選項引用tcp順序號(sequence number)?;旧?,它探測一個包是否有一個靜態(tài)的順序號集,因此很少用。它是為了完整性而包含進來的。

格式:
seq: ;

ack

ack規(guī)則選項關鍵字引用tcp頭的確認(acknowledge)部分。這個規(guī)則的一個實用的目的是:檢查nmap tcp ping,nmap tcp ping把這個域設置為0,然后發(fā)送一個tcp ack flag置位的包來確定一個網(wǎng)絡主機是否活著。

格式:
ack: ;

例子:
alert any any -> 192.168.1.0/24 any (flags: A; ack: 0; msg: "NMAP TCP ping";)

Window

這條規(guī)則選項指向TCP窗口大小。這個選項檢查靜態(tài)窗口大小,此外別無他用。包括它只是為了完整性。

格式:
window:[!];

Itype
這條規(guī)則測試ICMP的type字段的值。它被設置為使用這個字段的數(shù)字值。要得到所有可能取值的列表,可以參見Snort包中自帶的decode.h文件,任何ICMP的參考資料中也可以得到。應該注意的是,type字段的取值可以超過正常范圍,這樣可以檢查用于拒絕服務或flooding攻擊的非法 type值的ICMP包。

格式:
itype: ;
 

Icode

Icode規(guī)則選項關鍵字和itype規(guī)則非常接近,在這里指定一個數(shù)值,Snort會探測使用該值作為code值的ICMP包。超出正常范圍的數(shù)值可用于探測可疑的流量。

格式:
icode: ;

Session

Session關鍵字用于從TCP會話中抽取用戶數(shù)據(jù)。要檢查用戶在telnet,rlogin,ftp或web sessions中的用戶輸入,這個規(guī)則選項特別有用。Session規(guī)則選項有兩個可用的關鍵字作為參數(shù):printable或all。 Printable關鍵字僅僅打印用戶可以理解或者可以鍵入的數(shù)據(jù)。All關鍵字使用16進制值來表示不可打印的字符。該功能會顯著地降低Snort的性能,所以不能用于重負載環(huán)境。它適合于對二進制(tcpdump格式)log文件進行事后處理。

格式:
session: [printable|all];

例子
log tcp any any <> 192.168.1.0/24 23 (session: printable;)

Icmp_id

Icmp_id選項檢查ICMP ECHO數(shù)據(jù)包中ICMP ID數(shù)值是否是指定值。許多秘密通道(covert channel)程序使用靜態(tài)ICMP字段通訊,所以該選項在檢查這種流量時非常有用。這個特別的插件用于增強由Max Vision編寫的stacheldraht探測規(guī)則,但是在探測一些潛在攻擊時確實有效。

格式:
icmp_id: ;

Icmp_seq

Icmp_seq選項檢查ICMP ECHO數(shù)據(jù)包中ICMP sequence字段數(shù)值是否是指定值。許多秘密通道(covert channel)程序使用靜態(tài)ICMP字段通訊,所以該選項在檢查這種流量時非常有用。這個特別的插件用于增強由Max Vision編寫的stacheldraht探測規(guī)則,但是在探測一些潛在攻擊時確實有效。(我知道該字段的信息和icmp_id的描述幾乎完全相同,實際上它們就是同樣的東西?。?/p>

格式:
icmp_seq: ;

Rpc

這個選項查看RPC請求,并自動將應用(Application)、過程(procedure)和程序版本(program version)譯碼,如果所有三個值都匹配的話,該規(guī)則就顯示成功。這個選項的格式為"應用、過程、版本"。在過程和版本域中可以使用通配符"*"。

格式:
rpc: ;

例子
alert tcp any any -> 192.168.1.0/24 111 (rpc: 100000,*,3; msg:"RPC getport (TCP)";)
alert udp any any -> 192.168.1.0/24 111 (rpc: 100000,*,3; msg:"RPC getport (UDP)";)
alert udp any any -> 192.168.1.0/24 111 (rpc: 100083,*,*; msg:"RPC ttdb";)

搠?敧?捯浵???o??<

Resp

Resp關鍵字可以對匹配一條Snort規(guī)則的流量進行靈活的反應(flexible reponse -FlexResp)。FlexResp代碼允許Snort主動地關閉惡意的連接。該插件合法的參數(shù)如下:
rst_snd - 向發(fā)送方發(fā)送TCP-RST數(shù)據(jù)包
rst_rcv - 向接受方發(fā)送TCP-RST數(shù)據(jù)包
rst_all - 向收發(fā)雙方發(fā)送TCP_RST數(shù)據(jù)包
icmp_net - 向發(fā)送方發(fā)送ICMP_NET_UNREACH
icmp_host - 向發(fā)送方發(fā)送ICMP_HOST_UNREACH
icmp_port - 向發(fā)送方發(fā)送ICMP_PORT_UNREACH
icmp_all - 向發(fā)送方發(fā)送上述所有的ICMP數(shù)據(jù)包
在向目標主機發(fā)送多種響應數(shù)據(jù)包時,這些選項組合使用。多個參數(shù)之間使用逗號分隔。

格式:
resp:

使用resp選項時要小心,因為很容易就會使snort陷入無限循環(huán)中,例如如下規(guī)則:
alert tcp any any -> 192.168.1.1/24 any (msg: "aiee!"; resp: rst_all;)

content_list

content_list 關鍵字允許多內(nèi)容字符串被放在一個單獨的內(nèi)容匹配選項中,被匹配的字符串被存放在指定的文件中,而且每個字符串要單獨占用一行。否則他們就等同于一個content字符串。這個選項是react關鍵字的基礎。

格式;
content-list: ;

下面是一個文件的內(nèi)容:
# adult sites
"porn"
"porn"
"adults"
"hard core"
"www.pornsite.com"

React

注意,使用這個功能很容易使網(wǎng)絡流量陷入回路。React關鍵字以匹配一個規(guī)則時所作出的靈活的反應為基礎?;镜姆磻亲枞恍┮俗⒁獾恼军c的用戶的訪問。響應代碼允許snort積極的關掉有冒犯行為的訪問和/或發(fā)送一個通知給瀏覽者。這個通知可以包含你自己的注釋。這個選項包括如下的基本修飾詞:

block——關閉連接并且發(fā)送一個通知
warm——發(fā)送明顯的警告信息
基本修飾詞可以和如下的附加修飾詞組合使用:
msg——把msg選項的內(nèi)容包含進阻塞通知信息中
proxy ——使用代理端口發(fā)送通知信息
大量的附加修飾詞由逗號隔開,react 關鍵字將被放在選項的最后一項。

格式:
react: ;

例子:
alert tcp any any <> 192.168.1.0/24 80 (content: "bad.htm"; msg: "Not for children!"; react: block, msg;)

reference

這個關鍵字允許規(guī)則包含一個外面的攻擊識別系統(tǒng)。這個插件目前支持幾種特定的系統(tǒng),它和支持唯一的URL一樣好。這些插件被輸出插件用來提供一個關于產(chǎn)生報警的額外信息的連接。
確信先看一看如下地方:
http://www./snort-db

格式:
reference: ,;

例子:
alert tcp any any -> any 7070 (msg: "IDS411/dos-realaudio"; flags: AP; content: "|fff4 fffd 06|"; reference: arachNIDS,IDS411;)
alert tcp any any -> any 21 (msg: "IDS287/ftp-wuftp260-venglin-linux"; flags: AP; content: "|31c031db 31c9b046 cd80 31c031db|"; reference: arachNIDS,IDS287; reference: bugtraq,1387; reference: cve,CAN-2000-1574; )

Sid

這個關鍵字被用來識別snort規(guī)則的唯一性。這個信息允許輸出插件很容易的識別規(guī)則的ID號。
sid 的范圍是如下分配的:

<100 保留做將來使用
100-1000,000 包含在snort發(fā)布包中
>1000,000 作為本地規(guī)則使用
文件sid-msg.map 包含一個從msg標簽到snort規(guī)則ID的映射。這將被post-processing 輸出模塊用來映射一個ID到一個報警信息。

格式:
sid: ;

rev

這個關鍵字是被用來識別規(guī)則修改的。修改,隨同snort規(guī)則ID,允許簽名和描述被較新的信息替換。

格式:
rev:

Classtype

這個關鍵字把報警分成不同的攻擊類。通過使用這個關鍵字和使用優(yōu)先級,用戶可以指定規(guī)則類中每個類型所具有的優(yōu)先級。具有classification的規(guī)則有一個缺省的優(yōu)先級。

格式:
classtype:

在文件classification.config中定義規(guī)則類。這個配置文件使用如下的語法:
config classification: ,

Priority

這個關鍵字給每條規(guī)則賦予一個優(yōu)先級。一個classtype規(guī)則具有一個缺省的優(yōu)先級,但這個優(yōu)先級是可以被一條priority規(guī)則重載的。

格式:
priority: ;

Uricontent
這個關鍵字允許只在一個請求的URI(URL)部分進行搜索匹配。它允許一條規(guī)則只搜索請求部分的攻擊,這樣將避免服務數(shù)據(jù)流的錯誤報警。關于這個關鍵字的參數(shù)的描述可以參考content關鍵字部分。這個選項將和HTTP解析器一起工作。(只能搜索第一個“/”后面的內(nèi)容)。

格式:
uricontent:[!];

Tag

這個關鍵字允許規(guī)則記錄不僅僅是觸發(fā)這條規(guī)則的那個數(shù)據(jù)包。一旦一條規(guī)則被觸發(fā),來自這個主機的數(shù)據(jù)包將被貼上“標簽”。被貼上標簽的數(shù)據(jù)流將被記錄用于隨后的響應代碼和提交攻擊流量的分析。

格式:
tag: , , , [direction]

type

session 記錄觸發(fā)這條規(guī)則的會話的數(shù)據(jù)包
host 記錄激活tag規(guī)則的主機的所有數(shù)據(jù)包(這里將使用[direction]修飾詞
count Count 指定一個單位的數(shù)量。這個單位由給出。
metric
packets 標記主機/會話的個數(shù)據(jù)包。
seconds 標記主機/會話的秒。

例子:
alert tcp !$HOME_NET any -> $HOME_NET 143 (flags: A+; content: "|e8 c0ff ffff|/bin/sh"; tag: host, 300, packets, src; msg: "IMAP Buffer overflow, tagging!";)
alert tcp !$HOME_NET any -> $HOME_NET 23 (flags: S; tag: session, 10, seconds; msg: "incoming telnet session";)

Ip_proto
Ip_proto關鍵字允許檢測IP協(xié)議頭。這些協(xié)議可以是由名字標識的,參考/etc/protocols文件。在規(guī)則中要謹慎使用ip_protocol關鍵字。

格式:
ip_proto:[!] ;

例子: br> alert ip !$HOME_NET any -> $HOME_NET any (msg: "IGMP traffic detected"; ip_proto: igmp;)

SameIP

Sameip關鍵字允許規(guī)則檢測源IP和目的IP是否相等。

格式:
sameip;

例子:
alert ip $HOME_NET any -> $HOME_NET any (msg: "SRC IP == DST IP"; sameip;)

Regex
這個模塊現(xiàn)在還正在開發(fā),所以在當前的產(chǎn)品規(guī)則集中還不能使用。如果使用的話,它將觸發(fā)一個錯誤信息。

Flow

這個選項要和TCP流重建聯(lián)合使用。它允許規(guī)則只應用到流量流的某個方向上。這將允許規(guī)則只應用到客戶端或者服務器端。這將能把內(nèi)網(wǎng)客戶端流覽web頁面的數(shù)據(jù)包和內(nèi)網(wǎng)服務器所發(fā)送的數(shù)據(jù)包區(qū)分開來。這個確定的關鍵字能夠代替標志:A+ 這個標志在顯示已建立的TCP連接時都將被使用。

選項:
to_client 觸發(fā)服務器上從A到B的響應。
to_server 觸發(fā)客戶端上從A到B的請求。
from_client 觸發(fā)客戶端上從A到B的請求。
from_server觸發(fā)服務器上從A到B的響應。
established 只觸發(fā)已經(jīng)建立的TCP連接。
stateless 不管流處理器的狀態(tài)都觸發(fā)(這對處理那些能引起機器崩潰的數(shù)據(jù)包很有用。
no_stream 不在重建的流數(shù)據(jù)包上觸發(fā)(對dsize 和 stream4 有用。
only_stream 只在重建的流數(shù)據(jù)包上觸發(fā)。

格式:
flow:[to_client|to_server|from_client|from_server|established|stateless|no_stream|only_stream]}

例子:
alert tcp !$HOME_NET any -> $HOME_NET 21 (flow: from_client; content: "CWD incoming"; nocase; msg: "cd incoming detected"; )
alert tcp !$HOME_NET 0 -> $HOME_NET 0 (msg: "Port 0 TCP traffic"; flow: stateless;)

Fragoffset

這個關鍵字允許把IP分段偏移值和一個十進制數(shù)相比較。為了抓到一個IP會話的第一個分段,你可以使用這個fragbits關鍵字并且和fragoffset:0 選項一起查看更多的分段選項。

格式:
fragoffset:[<|>]

例子:
alert ip any any -> any any (msg: "First Fragment"; fragbits: M; fragoffset: 0;)

Rawbytes

Rawbytes關鍵字允許規(guī)則查看telnet 解碼數(shù)據(jù)來處理不常見的數(shù)據(jù)。這將使得telnet 協(xié)議代碼獨立于預處理程序來檢測。這是對前面的content 的一個修飾。

格式:
rawbytes;

例子:
alert tcp any any -> any any (msg: "Telnet NOP"; content: "|FF F1|"; rawbytes;)

distance

distance關鍵字是content關鍵字的一個修飾詞,確信在使用content時模式匹配間至少有N個字節(jié)存在。它被設計成在規(guī)則選項中和其他選項聯(lián)合使用。

格式:
distance: ;

例子:
alert tcp any any -> any any (content: "2 Patterns"; content: "ABCDE"; content: "EFGH"; distance: 1;)

Within

Winthin關鍵字是content關鍵字的一個修飾詞,確保在使用content時模式匹配間至多有N個字節(jié)存在。它被設計成在規(guī)則選項中和distance選項聯(lián)合使用。

格式:
within: ;

例子:
alert tcp any any -> any any (content: "2 Patterns"; content: "ABCDE"; content: "EFGH"; within: 10;)

Byte_Test

測試一個字節(jié)的域為特定的值。能夠測試二進制值或者把字節(jié)字符串轉(zhuǎn)換成二進制后再測試。

格式:byte_test: , , , [[relative],[big],[little],[string],[hex],[dec],[oct]]
bytes_to_convert 從數(shù)據(jù)包取得的字節(jié)數(shù)。
operator 對檢測執(zhí)行的操作 (<,>,=,!)。
value 和轉(zhuǎn)換后的值相測試的值。
offset 開始處理的字節(jié)在負載中的偏移量。
relative 使用一個相對于上次模式匹配的相對的偏移量。
big 以網(wǎng)絡字節(jié)順序處理數(shù)據(jù)(缺省)。
little 以主機字節(jié)順序處理數(shù)據(jù)。
string 數(shù)據(jù)包中的數(shù)據(jù)以字符串形式存儲。
hex 把字符串數(shù)據(jù)轉(zhuǎn)換成十六進制數(shù)形式。
dec 把字符串數(shù)據(jù)轉(zhuǎn)換成十進制數(shù)形式。
oct 把字符串數(shù)據(jù)轉(zhuǎn)換成八進制數(shù)形式。

例子:
alert udp $EXTERNAL_NET any -> $HOME_NET any (msg:"AMD procedure 7 plog overflow "; content: "|00 04 93 F3|"; content: "|00 00 00 07|"; distance: 4; within: 4; byte_test: 4,>, 1000, 20, relative;)

alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"AMD procedure 7 plog overflow "; content: "|00 04 93 F3|"; content: "|00 00 00 07|"; distance: 4; within: 4; byte_test: 4, >,1000, 20, relative;)

Byte_Jump

Byte_jump 選項用來取得一定數(shù)量的字節(jié),并把它們轉(zhuǎn)換成數(shù)字形式,跳過一些字節(jié)以進一步進行模式匹配。這就允許相對模式匹配在網(wǎng)絡數(shù)據(jù)中進行數(shù)字值匹配。

格式:
byte_jump: , [[relative],[big],[little],[string],[hex],[dec],[oct],[align]]

bytes_to_convert 從數(shù)據(jù)包中選出的字節(jié)數(shù)。
offset 開始處理的字節(jié)在負載中的偏移量。
relative 使用一個相對于上次模式匹配的相對的偏移量。
big 以網(wǎng)絡字節(jié)順序處理數(shù)據(jù)(缺省)。
little 以主機字節(jié)順序處理數(shù)據(jù)。
string 數(shù)據(jù)包中的數(shù)據(jù)以字符串形式存儲。
hex 把字符串數(shù)據(jù)轉(zhuǎn)換成十六進制數(shù)形式。
dec 把字符串數(shù)據(jù)轉(zhuǎn)換成十進制數(shù)形式。
oct 把字符串數(shù)據(jù)轉(zhuǎn)換成八進制數(shù)形式。
align 以32位為邊界對轉(zhuǎn)換的字節(jié)數(shù)對齊,即轉(zhuǎn)換的字節(jié)數(shù)為4的倍數(shù)。

例子:
alert udp any any -> any 32770:34000 (content: "|00 01 86 B8|"; content: "|00 00 00 01|"; distance: 4; within: 4; byte_jump: 4, 12, relative, align; byte_test: 4, >, 900, 20, relative; msg: "statd format string buffer overflow";)

第三章 預處理程序

    預處理程序從Snort版本1.5開始引入,使得Snort的功能可以很容易地擴展,用戶和程序員能夠?qū)⒛K化的插件方便地融入Snort之中。預處理程序代碼在探測引擎被調(diào)用之前運行,但在數(shù)據(jù)包譯碼之后。通過這個機制,數(shù)據(jù)包可以通過額外的方法被修改或分析。使用preprocessor關鍵字加載和配置預處理程序。在Snort規(guī)則文件中的preprocessor指令格式如下:

preprocessor :

例子:
preprocessor minfrag: 128

HTTP Decode

HTTP Decode用于處理HTTP URI字符串并且將串中的數(shù)據(jù)轉(zhuǎn)化為可讀的ASCII字串。HTTP對于一些特性定義了一個十六進制編碼方法,例如字符串%20被解釋成一個空格。Web服務器被設計成能夠處理無數(shù)的客戶端并且支持多種不同的標準。

格式:
http_decode: [unicode] [iis_alt_unicode][double_encode] [iis_flip_slash] [full_whitespace]

例子:
preprocessor http_decode: 80 8080 unicode iis_flip_slash iis_alt_unicode

Portscan Detector

Snort Portscan預處理程序的用處:
向標準記錄設備中記錄從一個源IP地址來的端口掃描的開始和結(jié)束。如果指定了一個記錄文件,在記錄掃描類型的同時也記錄目的IP地址和端口。端口掃描定義為在時間T(秒)之內(nèi)向超過P個端口進行TCP連接嘗試,或者在時間T(秒)之內(nèi)向超過P個端口發(fā)送UDP數(shù)據(jù)包。端口掃描可以是對任一IP 地址的多個端口,也可以是對多個IP地址的同一端口進行?,F(xiàn)在這個版本可以處理一對一和一對多方式的端口掃描,下一個完全版本將可以處理分布式的端口掃描(多對一或多對多)。端口掃描也包括單一的秘密掃描(stealth scan)數(shù)據(jù)包,比如NULL,F(xiàn)IN,SYNFIN,XMAS等。如果包括秘密掃描的話,端口掃描模塊會對每一個掃描數(shù)據(jù)包告警。為避免這種情況,可以在Snort標準發(fā)行版中的scan-lib文件里把有關秘密掃描數(shù)據(jù)包的小節(jié)注釋掉,這樣對每次掃描就只記錄一次。如果使用外部記錄特性,可以在記錄文件中看到(端口掃描的?)技術和類型。該模塊的參數(shù)如下:

  • network to monitor - 監(jiān)視端口掃描的目標網(wǎng)絡以network/CIDR表示。
  • number of ports - 在探測期間訪問的端口數(shù)目。
  • detection period - 以秒計數(shù)的端口訪問時間限制。
  • logdir/filename - 告警信息存放的目錄/文件名,告警也可以寫入標準的告警文件中。

格式:
portscan:

例子:
preprocessor portscan: 192.168.1.0/24 5 7 /var/log/portscan.log

Portscan Ignorehosts

如果用戶的服務器(比如NTP,NFS和DNS服務器)會妨礙端口掃描的探測,可以通知portscan模塊忽略源自這些主機的TCP SYN和UDP端口掃描。該模塊的參數(shù)為IPs/CIDR的列表。

格式:
portscan-ignorehosts:

例子:
preprocessor portscan-ignorehosts: 192.168.1.5/32 192.168.3.0/24

Frag2

Frag2是一個新的IP碎片重組預處理器。Frag2的內(nèi)存使用和碎片時間超時選項是可配置的。不給出參數(shù),frag2將使用缺省的內(nèi)存量(4MB)和時間超時值(60秒)。這個時間值用來決定一個沒有重組的分段將被丟棄的時間長度。

格式
preprocessor frag2: [memcap ], [timeout ], [min_ttl ], [detect_state_problems??搠?敧?捯浵???o??<], [ttl_limit ]

timeout 在狀態(tài)表中保存一個不活躍的流的最大時間值,如果發(fā)現(xiàn)活動就重新刷新對話并且這個會話被自動拾起。缺省值是30秒。

memcap 內(nèi)存消耗的最大值,如果超出這個值,frag2就強制削減那些不活躍的會話,缺省值是4MB。detect_state_problems turns on alerts for events such as overlapping fragments
min_ttl 設置frag2接受的最小ttl值。

detect_state_problems 發(fā)現(xiàn)重疊分段時報警。

ttl_limit 設置ttl的極限值,它可以避免報警。 (初始化段 TTL +/- TTL Limit)

例子:
preprocessor frag2: memcap 16777216, timeout 30

Stream4

Stream4模塊使snort 具有 TCP流從新組裝和狀態(tài)分析能力。強壯的流重組能力使得snort能夠忽視無“狀態(tài)”攻擊,例如,stick粘滯位攻擊。Stream4也能夠給大量用戶提供超過256個TCP同步連接。Stream4缺省配置時能夠處理32768個TCP同步連接。Stream4有兩個可配置的模塊,stream4 preprocessor 和相關的 stream4_reassemble 插件。stream4_reassemble有如下選項

Stream4 格式:

preprocessor stream4: [noinspect], keepstats [machine|binary], [timeout ], [memcap ], [detect_scans], [detect_state_problems], [disable_evasion_alerts], [ttl_limit ]

noinspect 關閉狀態(tài)監(jiān)測能力。

keepstats [machine|binary] 保持會話統(tǒng)計,如果是“machine”選項就從機器以平坦的模式讀入,如果是“binary”選項就用統(tǒng)一的二進制模式輸出。

timeout 在狀態(tài)表中保存一個不活躍的流的最大時間值,如果發(fā)現(xiàn)活動就重新刷新對話并且這個會話被自動拾起。缺省值是30秒。

memcap 內(nèi)存消耗的最大值,如果超出這個值,frag2就強制削減那些不活躍的會話,缺省值是8MB。

detect_scans 打開portscan 的報警能力。

detect_state_problems 打開流事件報警能力,例如,沒有RST的數(shù)據(jù)包、帶有數(shù)據(jù)的SYN包和超出窗口序列號的包。

disable_evasion_alerts 關閉事件報警能力,例如,TCP重疊。

ttl_limit 設置ttl的極限值。

Stream4_Reassemble 格式:
preprocessor stream4_reassemble: [clientonly], [serveronly],[noalerts], [ports ]
clientonly 對一個連接的客戶端提供重組
serveronly 對一個連接的服務器端提供重組
noalerts 對于插入和逃避攻擊事件不發(fā)出報警
ports - 一個空格分隔的執(zhí)行重組的端口列表,all將對所有的端口進行重組。缺省對如下端口重組: 21 23 25 53 80 110 111 143 和 513

注: 在配置文件中僅僅設置stream4和stream4_reassemble 命令而沒有參數(shù),它們將會使用缺省的參數(shù)配置。Stream4引入了一個新的命令行參數(shù):-z 。在TCP流量中,如果指定了 –z 參數(shù),snort將只對那些通過三次握手建立的流以及那些協(xié)作的雙向活動的流(即,一些流量走一個方向而其他一些除了一個RST或FIN外走相反方向)檢測報警。當設置了-z 選項后snort就完全忽略基于TCP的stick/snot攻擊。

Conversation

Conversation 預處理器使Snort 能夠得到關于協(xié)議的基本的會話狀態(tài)而不僅僅是由spp_stream4處理的TCP狀態(tài)。

目前它使用和stream4相同的內(nèi)存保護機制,所以它能保護自己免受DOS攻擊。當它接收到一個你的網(wǎng)絡不允許的協(xié)議的數(shù)據(jù)包時,它也能產(chǎn)生一個報警信息。要做到這一點,請在IP協(xié)議列表中設置你允許的IP協(xié)議,并且當它收到一個不允許的數(shù)據(jù)包時,它將報警并記錄這個數(shù)據(jù)包。

格式:
preprocessor conversation: [allowed_ip_protocols ], [timeout ], [alert_odd_protocols], [max_conversations ]

Portscan2

這個模塊將檢測端口掃描。它要求包含Conversation預處理器以便判定一個會話是什么時間開始的。它的目的是能夠檢測快速掃描,例如,快速的nmap掃描。

格式:
preprocessor portscan2: [scanners_max ], [targets_max ], [target_limit ], [port_limit ], [timeout ]

  • scaners_max 一次所支持的掃描一個網(wǎng)絡的主機數(shù)
  • targets_max 分配代表主機的節(jié)點的最大數(shù)
  • target_limit 在一個掃描觸發(fā)前,一個掃描器所允許掃描的最大的主機數(shù)
  • port_limit 在一個掃描觸發(fā)前,一個掃描器所允許掃描的最大的端口數(shù)
  • timeout 一個掃描行為被忘記的秒數(shù)

Telnet Decode
telnet_decode 預處理器使snort能夠標準化telnet會話數(shù)據(jù)的控制協(xié)議字符。它把數(shù)據(jù)包規(guī)格和成單獨的數(shù)據(jù)緩存,這樣原始數(shù)據(jù)就能夠通過rawbytes content 修飾詞來記錄或者檢驗了。缺省情況下,它運行在21, 23, 25, 和119端口.

格式:
preprocessor telnet_decode:

RPC Decode

Rpc_decode 預處理器將RPC的多個碎片記錄組合成一個完整的記錄。它是通過將數(shù)據(jù)包放在標準緩存中來做到這一點的。如果打開stream4預處理器功能。它將只處理客戶端的流量。它缺省運行在 111和 32771端口。

格式:
preprocessor rpc_decode: [ alert_fragments ] [no_alert_multiple_requests] [no_alert_large_fragments] [no_alert_incomplete]

Perf Monitor

這個模塊是用來評估snort各方面性能的一個工具。它的輸出格式和參數(shù)格式都是變化的,在這里就不給出注釋了。

Http Flow

使用這個模塊可以忽略HTTP頭后面的HTTP服務響應。

第四章 輸出插件

    輸出插件使得Snort在向用戶提供格式化輸出時更加靈活。輸出插件在Snort的告警和記錄子系統(tǒng)被調(diào)用時運行,在預處理程序和探測引擎之后。規(guī)則文件中指令的格式非常類似于預處理程序。

    注意:如果在運行時指定了命令行的輸出開關,在Snort規(guī)則文件中指定的輸出插件會被替代。例如,如果在規(guī)則文件中指定了alert_syslog插件,但在命令行中使用了"-A fast"選項,則alert_syslog插件會被禁用而使用命令行開關。多個輸出插件是在snort的配置文件中指定的。當指定多個輸出插件時,它們被壓入棧并且在事件發(fā)生時按順序調(diào)用。關于標準的記錄和報警系統(tǒng),輸出模塊缺省把數(shù)據(jù)發(fā)送到 /var/log/snort.或者通過使用-l命令行參數(shù)輸出到一個用戶指定的目錄。在規(guī)則文件中通過指定output關鍵字,使得在運行時加載輸出模塊。

格式:
output :

例子:
output alert_syslog: LOG_AUTH LOG_ALERT

Alert_syslog

該插件向syslog設備發(fā)送告警(很像命令行中的-s開關)。該插件也允許用戶指定記錄設備,優(yōu)先于Snort規(guī)則文件中的設定,從而在記錄告警方面給用戶更大的靈活性。
可用關鍵字:

選項(Options)
LOG_CONS
LOG_NDELAY
LOG_PERROR
LOG_PID
設備(Facilities)
LOG_AUTH
LOG_AUTHPRIV
LOG_DAEMON
LOG_LOCAL0
LOG_LOCAL1
LOG_LOCAL2
LOG_LOCAL3
LOG_LOCAL5
LOG_LOCAL6
LOG_LOCAL7
LOG_USER
優(yōu)先級(Priorities)
LOG_EMERG
LOG_ALERT
LOG_CRIT
LOG_ERR
LOG_WARNING
LOG_NOTICE
LOG_INFO
LOG_DEBUG
格式:
alert_syslog:

Alert_fast
將報警信息快速的打印在指定文件的一行里。它是一種快速的報警方法,因為不需要打印數(shù)據(jù)包頭的所有信息。

格式:
alert_fast:

例子:
output alert_fast: alert.fast

Alert_full

打印數(shù)據(jù)包頭所有信息的報警。這些報警信息寫到缺省的日志目錄(/var/log/snort)或者寫到命令行指定的目錄。在日志目錄內(nèi),每個IP 都創(chuàng)建一個目錄。產(chǎn)生報警的數(shù)據(jù)包被解碼后寫到這個目錄下的文件里。這些文件的創(chuàng)建將大大降低snort的性能。所以這種輸出方法對大多數(shù)不適用,但那些輕量級的網(wǎng)絡環(huán)境還是可以使用的。

格式:
alert_full:

例子:
output alert_full: alert.full

Alert_smb

這個插件將把WinPopup報警信息發(fā)送給NETBIOS命名的機器上的一個文件。并不鼓勵使用這個插件,因為它以snort權限執(zhí)行了一個外部可執(zhí)行二進制程序,通常是root權限。那個工作站上接受報警信息的文件每行存放一條報警信息。

格式:
alert_smb:

例子;
output alert_smb: workstation.list

Alert_unixsock

打開一個UNIX套接字,并且把報警信息發(fā)送到那里。外部的程序/進程會在這個套接字上偵聽并實時接收這些報警數(shù)據(jù)。

格式:
alert_unixsock
例子:
output alert_unixsock

Log_tcpdump

log_tcpdump插件將數(shù)據(jù)包記錄到tcpdump格式的文件中。這便于使用已有的多種檢查tcpdump格式文件的工具,來對收集到的流量數(shù)據(jù)進行后處理工作。該插件只接受一個參數(shù),即輸出文件名

格式:
log_tcpdump:

例子:
output log_tcpdump: snort.log

database

該插件由Jed Pickel提供將Snort數(shù)據(jù)記錄到Postgres SQL數(shù)據(jù)庫中。更多的有關安裝和配置該插件的信息可以在Incident.org (http://www./snortdb)找到。這個插件的參數(shù)是數(shù)據(jù)庫名稱和一個參數(shù)列表。參數(shù)由格式parameter = argument來指定??捎脜?shù)如下:

host - 連接主機。如果指定了一個非零字串,就使用TCP/IP通訊。如果不指定主機名,就會使用Unix domain socket連接。
port - 連接服務器主機的端口號,或者是Unix-domain連接的socket文件名擴展。
dbname - 數(shù)據(jù)庫名。
user – 數(shù)據(jù)庫中身份認證用的用戶名。
password - 如果數(shù)據(jù)庫要求口令認證,就使用這個口令。
sensor_name 為snort指定一個你自己的名字。如果你不指定,這里就自動產(chǎn)生一個。
encoding 因為數(shù)據(jù)包負載和選項都是二進制的,所以沒有一個輕便簡單的方法把它存儲在數(shù)據(jù)庫中。沒有使用BLOBS,因為它們在穿越數(shù)據(jù)庫時不是那么輕便的。所以,我們提供了一個encoding 選項給你。你可以從下面的選項中選擇。它們有各自的優(yōu)缺點。
hex (default) 把二進制數(shù)據(jù)表示成十六進制字符串
storage requirements – 二進制的二倍容量
searchability – 很好用
human readability – 不是很好讀除非你很滑稽,要求郵件處理。
base64 把二進制數(shù)據(jù)表示成以64為基的字符串。
storage requirements二進制的1.3倍容量。
searchability – 沒有郵件處理是不可能的。
human readability –不易讀,要求郵件處理。
ascii 把二進制數(shù)據(jù)表示成 ascii 碼字符串。這是唯一的可以釋放數(shù)據(jù)的選項。非ascii碼數(shù)據(jù)用… 代替。即使你選擇了這個選項,ip和tcp選項數(shù)據(jù)還將用十六進制表示,因為那些數(shù)據(jù)用ascii碼標上沒有任何意義。
storage requirements – 稍微比二進制大,因為避免了一些字符(&,<,>)。
searchability – 對于搜索文本字符串很好用,而搜索二進制串是不可能的。
human readability – 很好用。
detail 你想存儲多少細節(jié)數(shù)據(jù),有如下選項:
full (缺省值)記錄一個引起報警數(shù)據(jù)包的所有的細節(jié)(包括ip/tcp選項和負載)。
fast 只記錄少量數(shù)據(jù)。如果選擇了這個選項,你將削減了潛在的分析能力,但這仍是一些應用的最佳選項。這將記錄下面的字段(timestamp, signature, source ip, destination ip, source port, destination port, tcp flags, and protocol)
此外,還必須定義一個記錄方法和數(shù)據(jù)庫類型。有兩種記錄方法,log和alert。設置為log類型,將啟動這個程序的數(shù)據(jù)庫記錄功能。如果你設置為log類型,輸出鏈表將調(diào)用這個插件。設置為alert類型,將啟動這個程序的數(shù)據(jù)庫報警輸出功能。
當前共有四種數(shù)據(jù)庫類型:MySQL, PostgreSQL, Oracle, 和 unixODBC-兼容數(shù)據(jù)庫。

格式:
output database: log, mysql, dbname=snort user=snort host=localhost password=xyz

CSV

CSV輸出插件可以將報警數(shù)據(jù)以一種方便的形式輸出到一個數(shù)據(jù)庫。這個插件要求兩個參數(shù),一個全路徑文件名和輸出模式選項。下面是模式選項列表。如果模式選項缺省,就按模式選項列表中的順序輸出。

timestamp
msg
proto
src
srcport
dst
dstport
ethsrc
ethdst
ethlen
tcpflags
tcpseq
tcpack
tcplen
tcpwindow
ttl
tos
id
dgmlen
iplen
icmptype
icmpcode
icmpid
icmpseq

格式:
output alert_CSV:

例子:
output alert_CSV: /var/log/alert.csv default
output alert_CSV: /var/log/alert.csv timestamp, msg

Unified

Unified輸出插件被設計成盡可能快的事件記錄方法。它記錄一個事件到一個報警文件和一個數(shù)據(jù)包到一個日志文件。報警文件包含一個事件的主要信息(ips, protocol, port, message id)。日志文件包含數(shù)據(jù)包信息的細節(jié)(一個數(shù)據(jù)包考貝及相關的事件ID)。

這兩個文件都是以spo_unified.h文件中描述的二進制形式寫的。以unix秒為單位的時間將附加到每個文件的后面寫出。

格式
output alert_unified:
output log_unified:

例子:
搠?敧?捯浵???o??< output alert_unified: snort.alert
output log_unified: snort.log

Log Null

有時創(chuàng)建這樣的規(guī)則是必要的,即在某些情況下能夠發(fā)出報警而不記錄數(shù)據(jù)包。當使用log_null插件時就相當于命令行的-N選項,但這個插件可以工作在一個規(guī)則類型上。

格式:
output log_null

ruletype info {
type alert
output alert_fast: info.alert
output log_null
}
 

自己動手編寫好的規(guī)則

當編寫snort規(guī)則時,首先考慮的是效率和速度。

好的規(guī)則要包含content選項。2.0版本以后,snort改變了檢測引擎的工作方式,在第一階段就作一個集合模式匹配。一個content選項越長,這個匹配就越精確。如果一條規(guī)則不包含content選項,它們將使整個系統(tǒng)慢下來。

當編寫規(guī)則時,盡量要把目標定位在攻擊的地方(例如,將目標定位在1025的偏移量等等)而不僅僅是泛泛的指定(如,在這匹配腳本代碼)。 Content規(guī)則是大小寫敏感的(除非你使用了nocase選項)。不要忘記content是大小寫敏感的和大多數(shù)程序的命令都是大寫字母。FTP就是一個很好的例子??紤]如下的規(guī)則:

alert tcp any any -> 192.168.1.0/24 21 (content: "user root"; msg: "FTP root login";)
alert tcp any any -> 192.168.1.0/24 21 (content: "USER root"; msg: "FTP root login";)

上面的第二條規(guī)則能檢測出大多數(shù)的自動以root登陸的嘗試,而第一條規(guī)則就不行。Internet 守護進程在接受輸入時是很隨便的。在編寫規(guī)則時,很好的理解協(xié)議規(guī)范將降低錯過攻擊的機會。
 

加速含有內(nèi)容選項的規(guī)則

探測引擎運用規(guī)則的順序和它們在規(guī)則中的書寫順序無關。內(nèi)容規(guī)則選項總是最后一個被檢驗。利用這個事實,應該先運用別的快速規(guī)則選項,由這些選項決定是否需要檢查數(shù)據(jù)包的內(nèi)容。例如:在TCP會話建立起來后,從客戶端發(fā)來的數(shù)據(jù)包,PSH和ACK這兩個TCP標志總是被置位的。如果想檢驗從客戶端到服務器的有效載荷,利用這個事實,就可以先進行一次TCP標志檢驗,這比模式匹配算法(pattern match algorithm)在計算上節(jié)約許多。使用內(nèi)容選項的規(guī)則要加速的一個簡便方法就是也進行一次標志檢驗?;舅枷胧?,如果PSH和ACK標志沒有置位,就不需要對數(shù)據(jù)包的有效載荷進行檢驗。如果這些標志置位,檢驗標志而帶來的計算能力消耗是可以忽略不計的。

alert tcp any any -> 192.168.1.0/24 80 (content: "cgi-bin/phf"; flags: PA; msg: "CGI-PHF probe";)

 

 
 

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多