Snort入侵檢測系統(tǒng)簡介

前言

防火墻可以比喻為辦公室門口的警衛(wèi),用來檢查進出者的身份。而入侵檢測系統(tǒng)就像是網(wǎng)上的警報器,當發(fā)現(xiàn)入侵者時,指出入侵者的來歷、他們正在做什么。入侵檢測系統(tǒng)被視為防火墻之后的第二道安全閘門。

實驗目的

1.掌握snortIDS工作機理
  2.應用snort三種方式工作
  3.熟練編寫snort規(guī)則

Snort IDS 概述

Snort IDS(入侵檢測系統(tǒng))是一個強大的網(wǎng)絡入侵檢測系統(tǒng)。它具有實時數(shù)據(jù)流量分析和記錄IP網(wǎng)絡數(shù)據(jù)包的能力,能夠進行協(xié)議分析,對網(wǎng)絡數(shù)據(jù)包內(nèi)容進行搜索/匹配。它能夠檢測各種不同的攻擊方式,對攻擊進行實時報警。此外,Snort是開源的入侵檢測系統(tǒng),并具有很好的擴展性和可移植性。

Snort IDS體系結(jié)構(gòu)

Snort體系結(jié)構(gòu)

Snort的結(jié)構(gòu)由4大軟件模塊組成,它們分別是:
  ?。?)數(shù)據(jù)包嗅探模塊——負責監(jiān)聽網(wǎng)絡數(shù)據(jù)包,對網(wǎng)絡進行分;
  ?。?)預處理模塊——該模塊用相應的插件來檢查原始數(shù)據(jù)包,從中發(fā)現(xiàn)原始數(shù)據(jù)的“行為”,如端口掃描,IP碎片等,數(shù)據(jù)包經(jīng)過預處理后才傳到檢測引擎;
   (3)檢測模塊——該模塊是Snort的核心模塊。當數(shù)據(jù)包從預處理器送過來后,檢測引擎依據(jù)預先設置的規(guī)則檢查數(shù)據(jù)包,一旦發(fā)現(xiàn)數(shù)據(jù)包中的內(nèi)容和某條規(guī)則相匹配,就通知報警模塊;
  ?。?)報警/日志模塊——經(jīng)檢測引擎檢查后的Snort數(shù)據(jù)需要以某種方式輸出。如果檢測引擎中的某條規(guī)則被匹配,則會觸發(fā)一條報警,這條報警信息會通過網(wǎng)絡、UNIXsocket、WindowsPopup(SMB)、SNMP協(xié)議的trap命令傳送給日志文件,甚至可以將報警傳送給第三方插件(如SnortSam),另外報警信息也可以記入SQL數(shù)據(jù)庫。

Snort三種工作方式

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

Snort規(guī)則

snort規(guī)則定義

Snort使用一種簡單的規(guī)則描述語言,這種描述語言易于擴展,功能也比較強大。Snort規(guī)則是基于文本的,規(guī)則文件按照不同的組進行分類,比如,文件ftp.rules包含了FTP攻擊內(nèi)容?!缸ⅰ筍nort的每條規(guī)則必須在一行中,它的規(guī)則解釋器無法對跨行的規(guī)則進行解析。Snort的每條規(guī)則都可以分成邏輯上的兩個部分:規(guī)則頭和規(guī)則體。

規(guī)則頭

規(guī)則頭包括4個部分:規(guī)則行為;協(xié)議;源信息;目的信息。下圖是對于規(guī)則頭的描述。


Snort規(guī)則格式

  snort規(guī)則頭Snort預置的規(guī)則動作有5種:
   (1)pass—動作選項pass將忽略當前的包,后繼捕獲的包將被繼續(xù)分析。
  ?。?)log—動作選項log將按照自己配置的格式記錄包。
  ?。?)alert—動作選項alert將按照自己配置的格式記錄包,然后進行報警。它的功能強大,但是必須恰當?shù)挠?,因為如果報警記錄過多,從中攫取有效信息的工作量增大,反而會使安全防護工作變得低效。 
  ?。?)dynamic—動作選項dynamic是比較獨特的一種,它保持在一種潛伏狀態(tài),直到activate類型的規(guī)則將其觸發(fā),之后它將像log動作一樣記錄數(shù)據(jù)包。
   (5)activate—動作選項activate功能強大,當被規(guī)則觸發(fā)時生成報警,并啟動相關的dynamic類型規(guī)則。在檢測復雜的攻擊,或?qū)?shù)據(jù)進行歸類時,該動作選項相當有用。
  除了以上5種預置的規(guī)則動作類型,用戶還可以定制自己的類型。

規(guī)則體

規(guī)則體的作用是在規(guī)則頭信息的基礎上進一步分析,有了它才能確認復雜的攻擊(Snort的規(guī)則定義中可以沒有規(guī)則體)。規(guī)則體由若干個被分別隔開的片斷組成,每個片斷定義了一個選項和相應的選項值。一部分選項是對各種協(xié)議的詳細說明,包括IP、ICMP和TCP協(xié)議,其余的選項是:規(guī)則觸發(fā)時提供給管理員的參考信息,被搜索的關鍵字,Snort規(guī)則的標識和大小寫不敏感選項。
下面是一個規(guī)則實例。
  alert tcp !192.168.0.1/24 any ->any 21 (content:"USER";msg: "FTP Login";)

  • alert表示規(guī)則動作為報警。
  • tcp表示協(xié)議類型為TCP協(xié)議。
  • !192.168.0.1/24表示源IP地址不是192.168.0.1/24。
  • 第一個any表示源端口為任意端口。
  • ->表示發(fā)送方向操作符。
  • 第二個any表示目的IP地址為任意IP地址。
  • 21表示目的端口為21。
  • content:"USER"表示匹配的字符串為“USER”。
  • msg:"FTPLogin"表示報警信息為“FTPLogin”。
    上面的規(guī)則也可寫成:

此外,還有一個雙向操作符<>,它使Snort對這條規(guī)則中,兩個IP地址/端口之間的數(shù)據(jù)傳輸進行記錄/分析,例如telnet或者POP3對話。下面的規(guī)則表示對一個telnet對話的雙向數(shù)據(jù)傳輸進行記錄:

log 192.168.0.1/24 any <> 192.168.0.1/24 23
  activate/dynamic規(guī)則對擴展了snort功能。使用activate/dynamic規(guī)則對,你能夠使用一條規(guī)則激活另一條規(guī)則,當一條特定的規(guī)則啟動,如果你想要snort接著對符合條件的數(shù)據(jù)包進行記錄時,使用activate/dynamic規(guī)則對非常方便。除了一個必需的選項activates外,激活規(guī)則非常類似于報警規(guī)則(alert)。動態(tài)規(guī)則(dynamic)和日志規(guī)則(log)也很相似,不過它需要一個選項:activated_by。動態(tài)規(guī)則還需要另一個選項:count。當一個激活規(guī)則啟動,它就打開由activate/activated_by選項之后的數(shù)字指示的動態(tài)規(guī)則,記錄count個數(shù)據(jù)包。
下面是一條activate/dynamic規(guī)則對的規(guī)則:
  activate tcp any any -> any 23(activates:111;msg:"Telnet Login";)    dynamic tcp any any -> any 23 (activated_by:111;count:20;)
  當發(fā)現(xiàn)Telnet默認使用的23端口有通信,activate規(guī)則會被觸發(fā)并啟動dynamic規(guī)則,然后dynamic規(guī)則將遵循配置,記錄后面的20個數(shù)據(jù)包。在上面的例子里activate規(guī)則的“activates”值為111,dynamic規(guī)則的“activated_by”值為111,這樣就把兩個規(guī)則關聯(lián)起來,而不是因為這兩個規(guī)則有相同的規(guī)則頭。

預處理

預處理器在調(diào)用檢測引擎之前,在數(shù)據(jù)包被解碼之后運行。通過這種機制,Snort可以以一種out of band的方式對數(shù)據(jù)包進行修改或者分析。
  預處理器可以使用preprocessor關鍵詞來加載和配置,常用到的預處理器如下:
 ?。?)HTTPdecode預處器HTTP解碼預處理模塊用來處理HTTPURL字符串,把它們轉(zhuǎn)換為清晰的ASCII字符串。
 ?。?)端口掃描器portscan端口掃描器會把由單個源IP地址發(fā)起的端口掃描從開始到結(jié)束的全過程記錄到標準日志。
 ?。?)stream處理器stream處理器為snort提供了TCP數(shù)據(jù)包重組的功能。在配置的端口上,stream處理器能夠?qū)CP數(shù)據(jù)包的細小片段進行重組,使之成為完整的TCP數(shù)據(jù)包,然后snort可以對其可疑行為進行檢查。
 ?。?)frag2處理器frag2預處理器為snort提供了IP分片重組的功能。frag2預處理器能夠?qū)Ψ制M行重組來定位分片攻擊,它的工作原理是將所有的分片重組構(gòu)造成一個包含完整信息的數(shù)據(jù)包,再將這個包傳給檢測引擎。

Snort應用

Snort采用命令行方式運行。格式為:snort –[options]<filters>。options為選項參數(shù);filters為過濾器。

Snort主要選項參數(shù):

  • -A<alert>設置報警方式為full,fast或者none。在full方式下,snort將傳統(tǒng)的報警信息格式寫入報警文件,報警內(nèi)容比較詳細。在fast方式下,snort只將報警時間,報警內(nèi)容,報警IP地址和端口號寫入文件。在none方式下,系統(tǒng)將關閉報警功能。
  • -a顯示ARP包。-b以tcpdump的格式將數(shù)據(jù)包記入日志。所有的數(shù)據(jù)包將以二進制格式記錄到snort.log文件中。這個選項提高了snort的操作速度,因為直接以二進制存儲,省略了轉(zhuǎn)換為文本文件的時間,通過-b選項的設置,snort可以在100Mbps的網(wǎng)絡環(huán)境中正常工作。
  • -c<cf>使用配置文件<cf>。文件內(nèi)容主要控制系統(tǒng)哪些包需要記入日志,哪些包需要報警,哪些包可以忽略等。
  • -C僅抓取包中的ASCII字符。
  • -d抓取應用層的數(shù)據(jù)包。
  • -D在守護模式下運行snort。
  • -e顯示和記錄數(shù)據(jù)鏈路層信息。
  • -F<bpf>從文件<bpf>中讀取BPF過濾信息。
  • -h<hn>設置<hn>(C類IP地址)為內(nèi)部網(wǎng)絡。當使用這個開關時,所有從外部的流量將會有一個方向箭頭指向右邊,所有從內(nèi)部的流量將會有一個左箭頭。這個選項沒有太大的作用,但是可以使顯示的包的信息格式比較容易察看。
  • -i<if>使用網(wǎng)絡接口文件<if>。
  • -l<ld>將包信息記錄到目錄<ld>下。設置日志記錄的分層目錄結(jié)構(gòu),按接收包的IP地址將抓取的包存儲在相應的目錄下。
  • -n<num>處理完<num>包后退出。
  • -N關閉日志功能,報警功能仍然工作。
  • -p關閉混雜模式的嗅探(sniffing)。這個選項在網(wǎng)絡嚴重擁塞時十分有效。
  • -r<tf>讀取tcpdump生成的文件<tf>,snort將讀取和處理這個文件。
  • -s將報警信息記錄到系統(tǒng)日志,日志文件可以出現(xiàn)在/var/log/messages目錄里。
  • -v將包信息顯示到終端時,采用詳細模式。這種模式存在一個問題:它的顯示速度比較慢,如果你是在IDS網(wǎng)絡中使用snort,最好不要采用詳細模式,否則會丟失部分包信息。
  • -V顯示版本號,并退出。

Filters過濾器

Snort的<filters>是標準的BPF格式的過濾器。
  Snort應用了BPF機制,可以在探測器上書寫和執(zhí)行BPF規(guī)則的文件。BPF機制允許用戶書寫快速的包分析規(guī)則,這些規(guī)則主要基于源、目的、和其他的頭信息。通過嗅探和BPF,我們可以只捕獲需要的流量,這樣就減輕了需要處理的數(shù)據(jù)量。
  BPF機制很容易理解,可以用于分析TCP、UDP、IP和ICMP協(xié)議。規(guī)則語法很像自然的口語,使用“and”和“or”作為規(guī)則操作符,用“not”作為取反符,此處還可以用括號來告訴引擎將一系列數(shù)據(jù)作為一個整體來處理。例如:ICMP捕獲:icmp。
  telnet請求數(shù)據(jù)包捕獲:tcp and dst port 23。記錄所有源自網(wǎng)絡192.168.0.0/24,目的是202.98.0.0/24的IP流量:ip and "src net 192.168.0 " and "dst net 202.98.0 "。

實驗步驟

本練習主機A、B為一組,C、D為一組,E、F為一組。首先使用“快照X”恢復Linux系統(tǒng)環(huán)境。

一.Snort數(shù)據(jù)包嗅探

1.啟動Snort進入實驗平臺,單擊工具欄“控制臺”按鈕,進入IDS工作目錄,運行Snort對網(wǎng)絡接口eth0進行監(jiān)聽,要求如下:
 (1)僅捕獲同組主機發(fā)出的icmp回顯請求數(shù)據(jù)包。
?。?)采用詳細模式在終端顯示數(shù)據(jù)包鏈路層、應用層信息。
?。?)對捕獲信息進行日志記錄,日志目錄/var/log/snort。
  Snort命令:
  snort –i eth0 –dev icmp and src 172.16.0.141 –l /var/log/snort
2.查看Snort日志記錄。
「說明」默認snort日志記錄最后一級目錄會以觸發(fā)數(shù)據(jù)包的源IP命名。可使用組合鍵Ctrl+C停止snort運行。

二.Snort數(shù)據(jù)包記錄

(1)對網(wǎng)絡接口eth0進行監(jiān)聽,僅捕獲同組主機發(fā)出的Telnet請求數(shù)據(jù)包,并將捕獲數(shù)據(jù)包以二進制方式進行存儲到日志文件中/var/log/snort/snort.log)。
Snort命令:
  snort –i eth0 –b tcp and src 172.16.0.141 and dst port 23
?。?)當前主機執(zhí)行上述命令,同組主機telnet遠程登錄當前主機。
?。?)停止snort捕獲(Ctrl+C),讀取snort.log文件,查看數(shù)據(jù)包內(nèi)容。Snort命令: snort –F /var/log/snort.log

三.簡單報警規(guī)則

(1)在snort規(guī)則集目錄ids/rules下新建snort規(guī)則集文件new.rules,對來自外部主機的、目標為當前主機80/tcp端口的請求數(shù)據(jù)包進行報警,報警消息自定義。snort規(guī)則:
  alert tcp any any -> 172.16.0.142 80 (msg:"Telnet Login")
?。?)編輯snort.conf配置文件,使其包含new.rules規(guī)則集文件,具體操作如下:使用vim(或vi)編輯器打開snort.conf,切換至編輯模式,在最后添加新行包含規(guī)則集文件new.rules。添加包含new.rules規(guī)則集文件語句 include &RULE PATH/new.rules
?。?)以入侵檢測方式啟動snort,進行監(jiān)聽。啟動snort的命令 snort –c snort.conf
以入侵檢測方式啟動snort,同組主機訪問當前主機Web服務。

文章原作者請聯(lián)系我,因為已經(jīng)找不到原文出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評論 19 139
  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據(jù)使用者...
    保川閱讀 6,077評論 1 13
  • 參考鏈接:blog.sina.com.cn/s/blog_976123090100w299.html 1、Snor...
    minlover閱讀 13,854評論 0 3
  • 1、第八章 Samba服務器2、第八章 NFS服務器3、第十章 Linux下DNS服務器配站點,域名解析概念命令:...
    哈熝少主閱讀 3,905評論 0 10
  • Snort規(guī)則被分成兩個邏輯部分:規(guī)則頭和規(guī)則選項。規(guī)則頭包含規(guī)則的動作,協(xié)議,源和目標ip地址與網(wǎng)絡掩碼,以及源...

友情鏈接更多精彩內(nèi)容