乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Snort 中文手冊(cè)

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


      Snort 用戶手冊(cè)

       

      第一章 snort簡(jiǎn)介

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

      嗅探器

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

        ./snort -v

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

            ./snort -vd

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

        ./snort -vde

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

        ./snort -d -v –e

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

          如果要把所有的包記錄到硬盤(pán)上,你需要指定一個(gè)日志目錄,snort就會(huì)自動(dòng)記錄數(shù)據(jù)包:

            ./snort -dev -l ./log

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

        如果你只指定了-l命令開(kāi)關(guān),而沒(méi)有設(shè)置目錄名,snort有時(shí)會(huì)使用遠(yuǎn)程主機(jī)的IP地址作為目錄,有時(shí)會(huì)使用本地主機(jī)IP地址作為目錄名。為了只對(duì)本地網(wǎng)絡(luò)進(jìn)行日志,你需要給出本地網(wǎng)絡(luò):

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

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

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

        ./snort -l ./log -b

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

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

            ./snort -dv -r packet.log

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

            ./snort -dvr packet.log icmp

      網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)

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

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

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

          注意:如果你想長(zhǎng)期使用snort作為自己的入侵檢測(cè)系統(tǒng),最好不要使用-v選項(xiàng)。因?yàn)槭褂眠@個(gè)選項(xiàng),使snort向屏幕上輸出一些信息,會(huì)大大降低snort的處理速度,從而在向顯示器輸出的過(guò)程中丟棄一些包。

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

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

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

      網(wǎng)絡(luò)入侵檢測(cè)模式下的輸出選項(xiàng)

          在NIDS模式下,有很多的方式來(lái)配置snort的輸出。在默認(rèn)情況下,snort以ASCII格式記錄日志,使用full報(bào)警機(jī)制。如果使用full報(bào)警機(jī)制,snort會(huì)在包頭之后打印報(bào)警消息。如果你不需

      要日志包,可以使用-N選項(xiàng)。

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

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

          使用-s選項(xiàng)可以使snort把報(bào)警消息發(fā)送到syslog,默認(rèn)的設(shè)備是LOG_AUTHPRIV和LOG_ALERT。可以修改snort.conf文件修改其配置。

          snort還可以使用SMB報(bào)警機(jī)制,通過(guò)SAMBA把報(bào)警消息發(fā)送到Windows主機(jī)。為了使用這個(gè)報(bào)警機(jī)制,在運(yùn)行./configure腳本時(shí),必須使用--enable-smbalerts選項(xiàng)。
      下面是一些輸出配置的例子:

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

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

          使用二進(jìn)制日志格式和SMB報(bào)警機(jī)制:  

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

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

      基礎(chǔ)

          snort使用一種簡(jiǎn)單的,輕量級(jí)的規(guī)則描述語(yǔ)言,這種語(yǔ)言靈活而強(qiáng)大。在開(kāi)發(fā)snort規(guī)則時(shí)要記住幾個(gè)簡(jiǎn)單的原則。

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

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

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

      規(guī)則高級(jí)概念

      Includes:


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

      格式:

      include:

      注意在該行結(jié)尾處沒(méi)有分號(hào)。被包含的文件會(huì)把任何預(yù)先定義的變量值替換為自己的變量引用。參見(jiàn)變量(Variables)一節(jié)以獲取關(guān)于在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"沒(méi)有定義用"default"替換。
      $(var:?message) - 用變量"var"的值替換或打印出錯(cuò)誤消息"message"然后退出。

      例子:

      var MY_NET $(MY_NET:-192.168.1.0/24)
      log tcp any any -> $(MY_NET:?MY_NET is undefined!) 23

      Config

      Snort的很多配置和命令行選項(xiàng)都可以在配置文件中設(shè)置。

      格式:

      config [: ]

      Directives

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

      規(guī)則頭

      規(guī)則動(dòng)作:

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

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

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

      ruletype suspicious
      {
      type log output
      log_tcpdump: suspicious.log
      }
      搠?敧?捯浵???o??< 下面這個(gè)例子創(chuàng)建一條規(guī)則,記錄到系統(tǒng)日志和MySQL數(shù)據(jù)庫(kù)
      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當(dāng)前分析可疑包的ip協(xié)議有四種:tcp 、udp、icmp和ip。將來(lái)可能會(huì)更多,例如ARP、IGRP、GRE、OSPF、RIP、IPX等。

      Ip地址

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

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

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

      這個(gè)規(guī)則的ip地址代表"任何源ip地址不是來(lái)自內(nèi)部網(wǎng)絡(luò)而目標(biāo)地址是內(nèi)部網(wǎng)絡(luò)的tcp包"。
      你也可以指定ip地址列表,一個(gè)ip地址列表由逗號(hào)分割的ip地址和CIDR塊組成,并且要放在方括號(hào)內(nèi)“[”,“]”。此時(shí),ip列表可以不包含空格在ip地址之間。下面是一個(gè)包含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";)

      端口號(hào)

      端口號(hào)可以用幾種方法表示,包括"any"端口、靜態(tài)端口定義、范圍、以及通過(guò)否定操作符。"any"端口是一個(gè)通配符,表示任何端口。靜態(tài)端口定義表示一個(gè)單個(gè)端口號(hào),例如111表示portmapper,23表示telnet,80表示http等等。端口范圍用范圍操作符":"表示。范圍操作符可以有數(shù)種使用方法,如下所示:

      log udp any any -> 192.168.1.0/24 1:1024
      記錄來(lái)自任何端口的,目標(biāo)端口范圍在1到1024的udp流

      log tcp any any -> 192.168.1.0/24 :6000
      記錄來(lái)自任何端口,目標(biāo)端口小于等于6000的tcp流

      log tcp any :1024 -> 192.168.1.0/24 500:
      記錄來(lái)自任何小于等于1024的特權(quán)端口,目標(biāo)端口大于等于500的tcp流


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

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

      方向操作符

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

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

      Activate 和 dynamic 規(guī)則:

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

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

      Actevate規(guī)則除了類(lèi)似一條alert規(guī)則外,當(dāng)一個(gè)特定的網(wǎng)絡(luò)事件發(fā)生時(shí)還能告訴snort加載一條規(guī)則。Dynamic規(guī)則和log規(guī)則類(lèi)似,但它是當(dāng)一個(gè)activate規(guī)則發(fā)生后被動(dòng)態(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ī)則選項(xiàng)

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

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

      msg

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

      logto

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

      ttl

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

      TOS

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

      id

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

      Ipoption

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

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

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

      格式:

      ipoption: option;

      Fragbits

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

      格式:
      fragbits: ;

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

      dsize

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

      格式:
      dsize: [<>][<>];
      說(shuō)明:“> <”號(hào)是可選的。

      content

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

      Content關(guān)鍵字的選項(xiàng)數(shù)據(jù)比較復(fù)雜;它可以包含混合的文本和二進(jìn)制數(shù)據(jù)。二進(jìn)制數(shù)據(jù)一般包含在管道符號(hào)中("|"),表示為字節(jié)碼(bytecode)。字節(jié)碼把二進(jìn)制數(shù)據(jù)表示為16進(jìn)制數(shù)字,是描述復(fù)雜二進(jìn)制數(shù)據(jù)的好方法。下面是包含了一個(gè)混合數(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ī)則前面有一個(gè)“!”。那么那些不包含這些內(nèi)容的數(shù)據(jù)包將觸發(fā)報(bào)警。這對(duì)于關(guān)注那些不包含一定內(nèi)容的數(shù)據(jù)包是有用的。

      offset

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

      格式:
      offset: ;

      depth

      depth也是一個(gè)content規(guī)則選項(xiàng)修飾符。它設(shè)置了內(nèi)容模式匹配函數(shù)從他搜索的區(qū)域的起始位置搜索的最大深度。它對(duì)于限制模式匹配函數(shù)超出搜索區(qū)域指定范圍而造成無(wú)效搜索很有用。(也就是說(shuō),如果你在一個(gè)web包中搜索"cgi-bin/phf",你可能不需要浪費(fèi)時(shí)間搜索超過(guò)凈荷的頭20 個(gè)字節(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選項(xiàng)用于取消content規(guī)則中的大小寫(xiě)敏感性。它在規(guī)則中指定后,任何與包凈荷進(jìn)行比較的ascii字符都被既作為大寫(xiě)又作為小寫(xiě)對(duì)待。

      格式:
      nocase;

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

      flags

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

      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
      在這些標(biāo)志之間還可以使用邏輯操作符:
      + ALL flag, 匹配所有的指定的標(biāo)志外加一個(gè)標(biāo)志。
      * ANY flag, 匹配指定的任何一個(gè)標(biāo)志。
      ! NOT flag, 如果指定的標(biāo)志不在這個(gè)數(shù)據(jù)包中就匹配成功。
      保留位可以用來(lái)檢測(cè)不正常行為,例如IP棧指紋攻擊或者其他可疑的行為。

      格式:
      flags: [,mask value];

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

      seq

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

      格式:
      seq: ;

      ack

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

      格式:
      ack: ;

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

      Window

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

      格式:
      window:[!];

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

      格式:
      itype: ;
       

      Icode

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

      格式:
      icode: ;

      Session

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

      格式:
      session: [printable|all];

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

      Icmp_id

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

      格式:
      icmp_id: ;

      Icmp_seq

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

      格式:
      icmp_seq: ;

      Rpc

      這個(gè)選項(xiàng)查看RPC請(qǐng)求,并自動(dòng)將應(yīng)用(Application)、過(guò)程(procedure)和程序版本(program version)譯碼,如果所有三個(gè)值都匹配的話,該規(guī)則就顯示成功。這個(gè)選項(xiàng)的格式為"應(yīng)用、過(guò)程、版本"。在過(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關(guān)鍵字可以對(duì)匹配一條Snort規(guī)則的流量進(jìn)行靈活的反應(yīng)(flexible reponse -FlexResp)。FlexResp代碼允許Snort主動(dòng)地關(guān)閉惡意的連接。該插件合法的參數(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ù)包
      在向目標(biāo)主機(jī)發(fā)送多種響應(yīng)數(shù)據(jù)包時(shí),這些選項(xiàng)組合使用。多個(gè)參數(shù)之間使用逗號(hào)分隔。

      格式:
      resp:

      使用resp選項(xiàng)時(shí)要小心,因?yàn)楹苋菀拙蜁?huì)使snort陷入無(wú)限循環(huán)中,例如如下規(guī)則:
      alert tcp any any -> 192.168.1.1/24 any (msg: "aiee!"; resp: rst_all;)

      content_list

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

      格式;
      content-list: ;

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

      React

      注意,使用這個(gè)功能很容易使網(wǎng)絡(luò)流量陷入回路。React關(guān)鍵字以匹配一個(gè)規(guī)則時(shí)所作出的靈活的反應(yīng)為基礎(chǔ)?;镜姆磻?yīng)是阻塞一些引人注意的站點(diǎn)的用戶的訪問(wèn)。響應(yīng)代碼允許snort積極的關(guān)掉有冒犯行為的訪問(wèn)和/或發(fā)送一個(gè)通知給瀏覽者。這個(gè)通知可以包含你自己的注釋。這個(gè)選項(xiàng)包括如下的基本修飾詞:

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

      格式:
      react: ;

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

      reference

      這個(gè)關(guān)鍵字允許規(guī)則包含一個(gè)外面的攻擊識(shí)別系統(tǒng)。這個(gè)插件目前支持幾種特定的系統(tǒng),它和支持唯一的URL一樣好。這些插件被輸出插件用來(lái)提供一個(gè)關(guān)于產(chǎn)生報(bào)警的額外信息的連接。
      確信先看一看如下地方:
      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

      這個(gè)關(guān)鍵字被用來(lái)識(shí)別snort規(guī)則的唯一性。這個(gè)信息允許輸出插件很容易的識(shí)別規(guī)則的ID號(hào)。
      sid 的范圍是如下分配的:

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

      格式:
      sid: ;

      rev

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

      格式:
      rev:

      Classtype

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

      格式:
      classtype:

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

      Priority

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

      格式:
      priority: ;

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

      格式:
      uricontent:[!];

      Tag

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

      格式:
      tag: , , , [direction]

      type

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

      例子:
      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關(guān)鍵字允許檢測(cè)IP協(xié)議頭。這些協(xié)議可以是由名字標(biāo)識(shí)的,參考/etc/protocols文件。在規(guī)則中要謹(jǐn)慎使用ip_protocol關(guān)鍵字。

      格式:
      ip_proto:[!] ;

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

      SameIP

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

      格式:
      sameip;

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

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

      Flow

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

      選項(xiàng):
      to_client 觸發(fā)服務(wù)器上從A到B的響應(yīng)。
      to_server 觸發(fā)客戶端上從A到B的請(qǐng)求。
      from_client 觸發(fā)客戶端上從A到B的請(qǐng)求。
      from_server觸發(fā)服務(wù)器上從A到B的響應(yīng)。
      established 只觸發(fā)已經(jīng)建立的TCP連接。
      stateless 不管流處理器的狀態(tài)都觸發(fā)(這對(duì)處理那些能引起機(jī)器崩潰的數(shù)據(jù)包很有用。
      no_stream 不在重建的流數(shù)據(jù)包上觸發(fā)(對(duì)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

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

      格式:
      fragoffset:[<|>]

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

      Rawbytes

      Rawbytes關(guān)鍵字允許規(guī)則查看telnet 解碼數(shù)據(jù)來(lái)處理不常見(jiàn)的數(shù)據(jù)。這將使得telnet 協(xié)議代碼獨(dú)立于預(yù)處理程序來(lái)檢測(cè)。這是對(duì)前面的content 的一個(gè)修飾。

      格式:
      rawbytes;

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

      distance

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

      格式:
      distance: ;

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

      Within

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

      格式:
      within: ;

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

      Byte_Test

      測(cè)試一個(gè)字節(jié)的域?yàn)樘囟ǖ闹?。能夠測(cè)試二進(jìn)制值或者把字節(jié)字符串轉(zhuǎn)換成二進(jìn)制后再測(cè)試。

      格式:byte_test: , , , [[relative],[big],[little],[string],[hex],[dec],[oct]]
      bytes_to_convert 從數(shù)據(jù)包取得的字節(jié)數(shù)。
      operator 對(duì)檢測(cè)執(zhí)行的操作 (<,>,=,!)。
      value 和轉(zhuǎn)換后的值相測(cè)試的值。
      offset 開(kāi)始處理的字節(jié)在負(fù)載中的偏移量。
      relative 使用一個(gè)相對(duì)于上次模式匹配的相對(duì)的偏移量。
      big 以網(wǎng)絡(luò)字節(jié)順序處理數(shù)據(jù)(缺?。?。
      little 以主機(jī)字節(jié)順序處理數(shù)據(jù)。
      string 數(shù)據(jù)包中的數(shù)據(jù)以字符串形式存儲(chǔ)。
      hex 把字符串?dāng)?shù)據(jù)轉(zhuǎn)換成十六進(jìn)制數(shù)形式。
      dec 把字符串?dāng)?shù)據(jù)轉(zhuǎn)換成十進(jìn)制數(shù)形式。
      oct 把字符串?dāng)?shù)據(jù)轉(zhuǎn)換成八進(jì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 選項(xiàng)用來(lái)取得一定數(shù)量的字節(jié),并把它們轉(zhuǎn)換成數(shù)字形式,跳過(guò)一些字節(jié)以進(jìn)一步進(jìn)行模式匹配。這就允許相對(duì)模式匹配在網(wǎng)絡(luò)數(shù)據(jù)中進(jìn)行數(shù)字值匹配。

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

      bytes_to_convert 從數(shù)據(jù)包中選出的字節(jié)數(shù)。
      offset 開(kāi)始處理的字節(jié)在負(fù)載中的偏移量。
      relative 使用一個(gè)相對(duì)于上次模式匹配的相對(duì)的偏移量。
      big 以網(wǎng)絡(luò)字節(jié)順序處理數(shù)據(jù)(缺?。?br>little 以主機(jī)字節(jié)順序處理數(shù)據(jù)。
      string 數(shù)據(jù)包中的數(shù)據(jù)以字符串形式存儲(chǔ)。
      hex 把字符串?dāng)?shù)據(jù)轉(zhuǎn)換成十六進(jìn)制數(shù)形式。
      dec 把字符串?dāng)?shù)據(jù)轉(zhuǎn)換成十進(jìn)制數(shù)形式。
      oct 把字符串?dāng)?shù)據(jù)轉(zhuǎn)換成八進(jìn)制數(shù)形式。
      align 以32位為邊界對(duì)轉(zhuǎn)換的字節(jié)數(shù)對(duì)齊,即轉(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";)

      第三章 預(yù)處理程序

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

      preprocessor :

      例子:
      preprocessor minfrag: 128

      HTTP Decode

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

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

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

      格式:
      portscan:

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

      Portscan Ignorehosts

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

      格式:
      portscan-ignorehosts:

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

      Frag2

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

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

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

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

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

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

      例子:
      preprocessor frag2: memcap 16777216, timeout 30

      Stream4

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

      Stream4 格式:

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

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

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

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

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

      detect_scans 打開(kāi)portscan 的報(bào)警能力。

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

      disable_evasion_alerts 關(guān)閉事件報(bào)警能力,例如,TCP重疊。

      ttl_limit 設(shè)置ttl的極限值。

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

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

      Conversation

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

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

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

      Portscan2

      這個(gè)模塊將檢測(cè)端口掃描。它要求包含Conversation預(yù)處理器以便判定一個(gè)會(huì)話是什么時(shí)間開(kāi)始的。它的目的是能夠檢測(cè)快速掃描,例如,快速的nmap掃描。

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

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

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

      格式:
      preprocessor telnet_decode:

      RPC Decode

      Rpc_decode 預(yù)處理器將RPC的多個(gè)碎片記錄組合成一個(gè)完整的記錄。它是通過(guò)將數(shù)據(jù)包放在標(biāo)準(zhǔn)緩存中來(lái)做到這一點(diǎn)的。如果打開(kāi)stream4預(yù)處理器功能。它將只處理客戶端的流量。它缺省運(yùn)行在 111和 32771端口。

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

      Perf Monitor

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

      Http Flow

      使用這個(gè)模塊可以忽略HTTP頭后面的HTTP服務(wù)響應(yīng)。

      第四章 輸出插件

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

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

      格式:
      output :

      例子:
      output alert_syslog: LOG_AUTH LOG_ALERT

      Alert_syslog

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

      選項(xiàng)(Options)
      LOG_CONS
      LOG_NDELAY
      LOG_PERROR
      LOG_PID
      設(shè)備(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)先級(jí)(Priorities)
      LOG_EMERG
      LOG_ALERT
      LOG_CRIT
      LOG_ERR
      LOG_WARNING
      LOG_NOTICE
      LOG_INFO
      LOG_DEBUG
      格式:
      alert_syslog:

      Alert_fast
      將報(bào)警信息快速的打印在指定文件的一行里。它是一種快速的報(bào)警方法,因?yàn)椴恍枰蛴?shù)據(jù)包頭的所有信息。

      格式:
      alert_fast:

      例子:
      output alert_fast: alert.fast

      Alert_full

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

      格式:
      alert_full:

      例子:
      output alert_full: alert.full

      Alert_smb

      這個(gè)插件將把WinPopup報(bào)警信息發(fā)送給NETBIOS命名的機(jī)器上的一個(gè)文件。并不鼓勵(lì)使用這個(gè)插件,因?yàn)樗詓nort權(quán)限執(zhí)行了一個(gè)外部可執(zhí)行二進(jìn)制程序,通常是root權(quán)限。那個(gè)工作站上接受報(bào)警信息的文件每行存放一條報(bào)警信息。

      格式:
      alert_smb:

      例子;
      output alert_smb: workstation.list

      Alert_unixsock

      打開(kāi)一個(gè)UNIX套接字,并且把報(bào)警信息發(fā)送到那里。外部的程序/進(jìn)程會(huì)在這個(gè)套接字上偵聽(tīng)并實(shí)時(shí)接收這些報(bào)警數(shù)據(jù)。

      格式:
      alert_unixsock
      例子:
      output alert_unixsock

      Log_tcpdump

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

      格式:
      log_tcpdump:

      例子:
      output log_tcpdump: snort.log

      database

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

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

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

      CSV

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

      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ì)成盡可能快的事件記錄方法。它記錄一個(gè)事件到一個(gè)報(bào)警文件和一個(gè)數(shù)據(jù)包到一個(gè)日志文件。報(bào)警文件包含一個(gè)事件的主要信息(ips, protocol, port, message id)。日志文件包含數(shù)據(jù)包信息的細(xì)節(jié)(一個(gè)數(shù)據(jù)包考貝及相關(guān)的事件ID)。

      這兩個(gè)文件都是以spo_unified.h文件中描述的二進(jìn)制形式寫(xiě)的。以u(píng)nix秒為單位的時(shí)間將附加到每個(gè)文件的后面寫(xiě)出。

      格式
      output alert_unified:
      output log_unified:

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

      Log Null

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

      格式:
      output log_null

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

      自己動(dòng)手編寫(xiě)好的規(guī)則

      當(dāng)編寫(xiě)snort規(guī)則時(shí),首先考慮的是效率和速度。

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

      當(dāng)編寫(xiě)規(guī)則時(shí),盡量要把目標(biāo)定位在攻擊的地方(例如,將目標(biāo)定位在1025的偏移量等等)而不僅僅是泛泛的指定(如,在這匹配腳本代碼)。 Content規(guī)則是大小寫(xiě)敏感的(除非你使用了nocase選項(xiàng))。不要忘記content是大小寫(xiě)敏感的和大多數(shù)程序的命令都是大寫(xiě)字母。FTP就是一個(gè)很好的例子。考慮如下的規(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ī)則能檢測(cè)出大多數(shù)的自動(dòng)以root登陸的嘗試,而第一條規(guī)則就不行。Internet 守護(hù)進(jìn)程在接受輸入時(shí)是很隨便的。在編寫(xiě)規(guī)則時(shí),很好的理解協(xié)議規(guī)范將降低錯(cuò)過(guò)攻擊的機(jī)會(huì)。
       

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

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

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

       

       
       

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

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類(lèi)似文章 更多