Snort檢測原理與應用課件_第1頁
Snort檢測原理與應用課件_第2頁
Snort檢測原理與應用課件_第3頁
Snort檢測原理與應用課件_第4頁
Snort檢測原理與應用課件_第5頁
已閱讀5頁,還剩32頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Snort檢測原理與應用1、概述2、Snort規則3、Snort配置4、Snort檢測5、snort安裝1、概述

Snort是一個基于Libpcap的數據包嗅探器并可以作為一個輕量級的網絡入侵檢測系統(NIDS。所謂的輕量級是指在檢測時盡可能低地影響網絡的正常操作,一個優秀的輕量級的NIDS應該具備跨系統平臺操作,對系統影響最小等特征并且管理員能夠在短時間內通過修改配置進行實時的安全響應,更為重要的是能夠成為整體安全結構的重要成員。Snort作為其典型范例,首先可以運行在多種操作系統平臺,例如UNIX系列和Win2K(需要LibpcapforWin32的支持),與很多商業產品相比,它對操作系統的依賴性比較低:其次用戶可以根據自己的需要在短時間內調整檢測策略。就檢測攻擊的種類來說,據最新數據表明Snort共有2I類共1271條檢測規則,其中包括對緩沖區溢出,端口掃描和CGI攻擊等等。Snort集成了多種告警機制來提供實時告警功能,包括:syslog、用戶指定文件、LTNIXSocket、通過SMBClient使用WinPopup對Window客戶端告警。Snort的現實意義是作為開源軟件填補了只有商業入侵檢測系統的空白,可以幫助中小網絡的系統管理員有效地監視網絡流量和檢測入侵行為。2、Snort規則(1)規則描述語言規則是特征模式匹配的依據,描述語言易于擴展,功能也比較強大

每條規則必須在一行中,其規則解釋器無法對跨行的規則進行解析邏輯上由規則頭和規則選項組成。規則頭包括:規則行為、協議、源/目的IP地址、子網掩碼、方向以及源/目的端口。規則選項包含報警信息和異常包的信息(特征碼),使用這些特征碼來決定是否采取規則規定的行動。

2、Snort規則(2)規則描述語言舉例alerttcpanyany->/24111(content:"|000186a5|";msg:"mountdaccess";)

從開頭到最左邊的括號屬于規則頭部分,括號內的部分屬于規則選項。規則選項中冒號前面的詞叫做選項關鍵詞。注意對于每條規則來說規則選項不是必需的,它們是為了更加詳細地定義應該收集或者報警的數據包。只有匹配所有選項的數據包,Snort才會執行其規則行為。如果許多選項組合在一起,它們之間是邏輯與的關系。讓我們從規則頭開始。

2、Snort規則(3)規則頭:哪些數據包、數據包的來源、什么類型的數據包,以及對匹配的數據包如何處理。規則行為(ruleaction):Alert:使用選定的報警方法產生報警信息,并且記錄數據包;Log:記錄數據包;Pass:忽略數據包;Activate:報警,接著打開其它的dynamic規則;Dynamic:保持空閑狀態,直到被activate規則激活,作為一條log規則

2、Snort規則(4)協議(protocol):每條規則的第二項就是協議項。當前,snort能夠分析的協議是:TCP、UDP和ICMP。將來,可能提供對ARP、ICRP、GRE、OSPF、RIP、IPX等協議的支持。

IP地址:規則頭下面的部分就是IP地址和端口信息。關鍵詞any可以用來定義任意的IP地址。snort不支持對主機名的解析,所以地址只能使用數字/CIDR的形式,CIDR(無級別域內路由)指明應用于IP地址的掩碼。/24表示一個C類網絡;/16表示一個B類網絡;而/32表示一臺特定的主機地址。在規則中,可以使用否定操作符(negationoperator)對IP地址進行操作。它告訴snort除了列出的IP地址外,匹配所有的IP地址。否定操作符使用!表示。例如,使用否定操作符可以很輕松地對上面的規則進行改寫,使其對從外部網絡向內的數據報警。

2、Snort規則(5)端口號:有幾種方式來指定端口號,包括:any、靜態端口號(staticport)定義、端口范圍以及使用非操作定義。any表示任意合法的端口號。靜態端口號表示單個的端口號,例如:111(portmapper)、23(telnet)、80(http)等。使用范圍操作符:可以指定端口號范圍。有幾種方式來使用范圍操作符:達到不同的目的,例如:logudpanyany->/241:1024記錄來自任何端口,其目的端口號在1到1024之間的UDP數據包

2、Snort規則(6)方向操作符(directionoperator):方向操作符->表示數據包的流向。它左邊是數據包的源地址和源端口,右邊是目的地址和端口。此外,還有一個雙向操作符<>,它使snort對這條規則中,兩個IP地址/端口之間雙向的數據傳輸進行記錄/分析,例如telnet或者POP3對話。下面的規則表示對一個telnet對話的雙向數據傳輸進行記錄:log!/24any<>/2423

2、Snort規則(7)規則選項:規則選項構成了snort入侵檢測引擎的核心,它們非常容易使用,同時又很強大和容易擴展。在每條snort規則中,選項之間使用分號進行分割。規則選項關鍵詞和其參數之間使用冒號分割。下面是一些常用的規則選項關鍵詞,其中對部分重要關鍵詞進行詳細解釋:

2、Snort規則(8)

msg:在報警和日志中打印的消息;

logto:把日志記錄到一個用戶指定的文件,而不是輸出到標準的輸出文件;

ttl:測試IP包頭的TTL域的值;

tos:測試IP包頭的TOS域的值; id:測試IP分組標志符(fragmentID)域是否是一個特定的值

ipoption/fragbits/dsize/flags/seq/……3、Snort配置(1)Snort本身的一些配置,例如變量、預處理插件、輸出插件、規則集文件等,也是通過解析規則進行的。在snort2.0版本中,有一個總體規則文件snort.conf,大部分配置規則都在此文件中。3、Snort配置(2)Include

varriables

在snort規則文件中可以定義變量。格式為:var<name><value>,例如:varMY_NET_x0013_/24,/24]<alerttcpanyany->$MY_NETany(flags:S;msg:"SYNMETApacket";)。最重要的默認變量是HOME_NET、EXTERNAL_NET、HTTP_PORTS、RULE_PATH等,分別表示本地網絡的IP地址范圍、外部網絡的IP地址范圍、web服務的端口、規則集文件的路徑。

3、Snort配置(3)預處理器:從snort-1.5開始加入了對預處理器(也叫預處理插件)的支持。有了這種支持,用戶和程序員能夠比較容易地編寫模塊化的插件,擴展snort的功能。預處理器在調用檢測引擎之前,在數據包被解碼之后運行。通過這種機制,snort可以以一種outofband的方式對數據包進行修改或者分析。預處理器可以使用preprocessor關鍵詞來加載和配置,格式如下:preprocessor<name>:<options>。例如:preprocessorminfrag:128。以下是一個預處理器的例子:

3、Snort配置(4)l

HTTPdecode預處理插件:HTTP解碼預處理模塊用來處理HTTPURI字符串,把它們轉換為清晰的ASCII字符串。這樣就可以對抗evasicewebURL掃描程序和能夠避開字符串內容分析的惡意攻擊者。這個預處理模塊使用WEB端口號作為其參數,每個端口號使用空格分開。格式:http_decode:<端口號列表>,例如:preprocessorhttp_decode:8080803、Snort配置(5)輸出插件:snort輸出模塊是從1.6版加入的新特征,使snort的輸出更為靈活。snort調用其報警或者日志子系統時,就會調用指定的輸出模塊。設置輸出模塊的規則和設置預處理模塊的非常相似。在snort配置文件中可以指定多個輸出插件。如果對同一種類型(報警、日志)指定了幾個輸出插件,那么當事件發生時,snort就會順序調用這些插件。使用標準日志和報警系統,默認情況下,輸出模塊就會將數據發送到/var/log/snort目錄,或者用戶使用-l命令行開關指定的目錄。在規則文件中,輸出模塊使用output關鍵詞指定:格式:outputname:<選項>,例如:outputalert_syslog:LOG_AUTHLOG_ALERT。下面是幾個常用的輸出插件:

4、Snort檢測(1)協議匹配。通過協議分析模塊,將數據包按照協議分析的結果對協議相應的部分進行檢測。比如對TCP包的標志位的匹配。

alerttcp$EXTERNAL_NETany->$HOME_NETany(msg:"SCANNULL";flags:0;seq:0;ack:0;reference:arachnids,4;classtype:attempted-recon;sid:623;rev:1;)其中就對TCP的flags、seq、ack進行了協議位置的匹配。協議匹配需要對特定協議進行分析,Snort對IP/TCP/UDP/ICMP進行了分析,但是沒有對應用協議分析。其它一些商用的IDS進行了高層的應用協議分析,可以顯著地提高匹配的效率。4、Snort檢測(2)字符串匹配。目前這是大多數IDS最主要的匹配方式,事件定義者根據某個攻擊的數據包或者攻擊的原因,提取其中的數據包字符串特征。通常IDS經過協議分析后,進行字符串的匹配。

比如:Snort中的一條事件定義,alerttcp$EXTERNAL_NETany->$HTTP_SERVERS$HTTP_PORTS(msg:"WEB-ATTACKSpscommandattempt";flow:to_server,established;uricontent:"/bin/ps";nocase;sid:1328;classtype:web-application-attack;rev:4;)該事件中要進行匹配的字符串就是"/bin/ps"。字符串匹配主要就是算法問題,因為IDS的規則多數屬于字符串匹配,因此優秀的字符串匹配算法也能夠顯著提高IDS的效率,比如Boyer-Moore、Aho-Corasick、Set-wiseBoyer-Moore算法。

4、Snort檢測(3)大小匹配,或者長度匹配。多數情況下,這也應該屬于字符串匹配的一種,不過,這種匹配方式對數據包中某段數據的長度而不是對具體的字符串進行匹配。

比如,通過數據長度限制來對緩沖區溢出攻擊進行檢測。比如:alerttcp$EXTERNAL_NETany->$HTTP_SERVERS$HTTP_PORTS(msg:"WEB-IISISAPI.idaattempt";uricontent:".ida?";nocase;dsize:>239;flow:to_server,established;classtype:web-application-attack;reference:bugtraq,1065;sid:1243;rev:6;)其中的關鍵字dsize

就是對數據包的負載進行匹配,如果請求的命令總長度大于239,那么就檢測出一條.ida溢出企圖的事件。

4、Snort檢測(4)累積匹配,或者量匹配。通過對某些事件出現的量(次數或者單位時間次數)來產生新的事件,比如,某個IP在1分鐘內統計出了100條CGI事件,那么就屬于一次CGI掃描事件。Snort的一些預處理插件可以進行此類匹配,例如portscan。

4、Snort檢測(5)邏輯匹配,或者是集合匹配。一些有更強事件檢測能力的IDS,通過對不同類型的事件組合來進行判斷,從而獲得新的事件。少數IDS對多種事件的組合來構成邏輯推理,增強檢測的智能。Snort對此類匹配支持的功能較弱,僅在stream等預處理插件中有一些。

4、Snort檢測(6)4、Snort檢測(7)4、Snort檢測(8)4、Snort檢測(9)對規則頭解析的結果填入RTN,對規則選項解析的結果填入OTN。抓取數據包后Snort要先進行一定程度的協議解析工作,主要是用相應的指針指向數據的各個域,這可以加快以后檢測的匹配速度。然后數據包需要經過各個預處理器進行預處理,例如IP碎片重組、HTTP解碼等。接下來就進入Snort的模式匹配過程,主要是遍歷規則樹試圖匹配各個規則節點。如前所述,Snort主要進行的是協議匹配、字符串匹配和長度匹配,而檢測引擎中沒有兩次或者多次匹配的過程,也就是累計匹配和邏輯匹配,因此它不能檢測分布事件,也不能檢測流量異常,而只能通過端口協議字符串等來檢測那些具有字符串數據特征的特定拒絕服務攻擊工具的事件,這可以從snort的DDOS規則集看得出來。當然Portscan和Stream4等預處理器的增加使snort在累計匹配和邏輯匹配上有一些表現,比如,Portscan預處理器可以跟蹤端口掃描事件的速率。4、Snort檢測(9)從Snort提供的規則也可以得到上面的結果,因為規則中所體現的基本都是對IP、ICMP、TCP、UDP這樣的三、四層上的協議進行了解析,而對更上面的協議,比如第七層的應用協議等基本沒有作協議分析,這些規則中主要進行的也是前三種方式的單包匹配。當然這里的重點不是在匹配算法上,而更看重整個檢測的結構和過程。首先能夠看到的問題就是snort的規則樹形結構過于簡單,也就造成可能某些RTN下的OTN鏈比較龐大;沒有對高層協議分析也是一個大問題,因為,協議分析可以更有效地定位匹配位置,加快匹配速率。因此,現在很多IDS將規則樹更平坦,盡量讓深度和寬度不失調,同時進行高層協議分析,這一代的IDS結構也就基本如此了。同時,有些IDS采用多層引擎的方式,來實現和加強累計匹配和邏輯匹配的檢測能力。其實現在Snort的結構發展也基本是對這些問題的解決。Snort獲取免費下載地址:Snort-1.8.tar.gz:源代碼包,適用于linux/solaris環境Snort-1.8-sol-2.7-sparc-local:二進制包,適用于solaris環境Snort-1.8-win32-source.zip:源代碼包,適用于win32/9x/nt/2000環境底層庫的安裝與配置(一)Libpcap:提供的接口函數主要實現和封裝了與數據包截獲有關的過程,下載網址:/libpcap.tar.zLibnet:提供的接口函數主要實現和封裝了數據包的構造和發送的過程,下載網址:/projects/libnet/dist/libnet-1.0.2a.tar.gz底層庫的安裝與配置(一)NDISpacketcaptureDriver:win32/9x/net/2000環境下抓包和處理數據包而提供的驅動程序,下載地址:/~mike/netgroup-serv.poloto.it/winpcap/install/default.htmLibcap的安裝檢查libcap檢查在/usr/local/lib/目錄下是否有libpcap.a在/usr/include/pcap/目錄下是否有pcap.h,pacp-namedb.h以及net子目錄,在/usr/include/pcap/net/目錄下是否有bpf.h文件。如果有,說明libcap已安裝成功,否則#tar–zxvf

libpcap.tar.z

解開壓縮包#cd

libpcap#./configure#make#makecheck#makeinstallLibnet的安裝#tar–zxvflibnet-1.0.2a.tar.gz#cdlibnet-1.0.2a#./configure#make#makeinstallNDISpacketcaptuerDriver安裝1、win9x執行下載的自解壓文件packet95.exe,并把解壓后的文件放到某一臨時目錄下打開控制面板->網絡->添加協議->選擇“磁盤安裝”->選擇“BPFPacketcaptureDriverforwin95/98vx.xx”->確定->重起計算機2、winnt執行下載的自解壓文件packetnt.exe,以后同上3、win2000執行下載的自解壓文件packet2k.exe,以后同上Snort安裝1.linux環境下安裝#tar–zxvfsnort-1.8.tar.gz#cdsnort-1.8#./configure#make#makeinstall至此,/usr/local/bin/目錄下已經存在snort文件,說明安裝已成功。Snort安裝2.win32環境下的安裝解開snort-1.8-win32-source.zip用vc++6.0打開位于snort-1.8-win32-source\snort-1.7\win32-prj\snort.dsw文件選擇“win32Release”編譯選項進行編譯。在Release目錄下會生成所需的snort.exe可知性文件。Snort使用Libpcap命令行Snort命令行Snort-?可以列出相應參數及其解釋Snort存在三種運行方式—嗅探器、抓包器、NIDS。使用祥解參見USAGE和SnortUserManual.pdf過濾器用來限制主機、網絡和協議的范圍,可以使用邏輯運算符把若干個過濾器聯合起來。整個過濾器由一個或多個元語組成,而每個元語則由一個或多個關鍵字加上一個相關值(字符串或數字)組成。關鍵字分為以下幾類:屬性類關鍵字:說明后面所根值得意義,這類關鍵

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論