Snort入侵檢測系統簡介

前言

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

實驗目的

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

Snort IDS 概述

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

Snort IDS體系結構

Snort體系結構

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

Snort三種工作方式

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

Snort規則

snort規則定義

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

規則頭

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


Snort規則格式

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

規則體

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

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

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

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

預處理

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

Snort應用

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

Snort主要選項參數:

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

Filters過濾器

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

一.Snort數據包嗅探

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

二.Snort數據包記錄

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

三.簡單報警規則

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

文章原作者請聯系我,因為已經找不到原文出處。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容