原文源自:https://www.jianshu.com/p/113345bbf2f7
前言
防火牆可以比喻爲辦公室門口的警衛,用來檢查進出者的身份。而入侵檢測系統就像是網上的警報器,當發現入侵者時,指出入侵者的來歷、他們正在做什麼。入侵檢測系統被視爲防火牆之後的第二道安全閘門。
Snort IDS概述
Snort IDS(入侵檢測系統)是一個強大的網絡入侵檢測系統。它具有實時數據流量分析和記錄IP網絡數據包的能力,能夠進行協議分析,對網絡數據包內容進行搜索/匹配。它能夠檢測各種不同的攻擊方式,對攻擊進行實時報警。此外,Snort是開源的入侵檢測系統,並具有很好的擴展性和可移植性。
Snort IDS體系結構
Snort的結構由4大軟件模塊組成,它們分別是:
(1)數據包嗅探模塊——負責監聽網絡數據包,對網絡進行分;
(2)預處理模塊——該模塊用相應的插件來檢查原始數據包,從中發現原始數據的“行爲”,如端口掃描,IP碎片等,數據包經過預處理後才傳到檢測引擎;
(3)檢測模塊——該模塊是Snort的核心模塊。當數據包從預處理器送過來後,檢測引擎依據預先設置的規則檢查數據包,一旦發現數據包中的內容和某條規則相匹配,就通知報警模塊;
(4)報警/日誌模塊——經檢測引擎檢查後的Snort數據需要以某種方式輸出。如果檢測引擎中的某條規則被匹配,則會觸發一條報警,這條報警信息會通過網絡、UNIXsocket、WindowsPopup(SMB)、SNMP協議的trap命令傳送給日誌文件,甚至可以將報警傳送給第三方插件(如SnortSam),另外報警信息也可以記入SQL數據庫。
Snort的3中工作模式
Snort擁有三大基本功能:嗅探器、數據包記錄器和入侵檢測。嗅探器模式僅從網絡上讀取數據包並作爲連續不斷的流顯示在終端上,常用命令snort -dev。數據包記錄器模式是把數據包記錄到硬盤上,常用命令snort -b。網絡入侵檢測模式是最複雜的,而且是可配置的。我們可以讓Snort分析網絡數據流以匹配用戶定義的一些規則,並根據檢測結果採取一定的動作。
從本質上說,Snort與tcpdump和snoop一樣,都是網絡數據包嗅探器。因此,嗅探器模式是Snort工作的基本模式。只要運行Snort時不加載規則,它就可以從網絡上讀取數據包並連續不斷地顯示在屏幕上,直到用戶按下Ctrl+C鍵終止。這時,Snort將顯示統計信息。Snort使用Libpcap網絡驅動庫。在這種模式下,Snort將網卡設置爲混在模式,讀取並解析共享信道中的網絡數據包。
在嗅探模式下,Snort也可以將這些信息記錄到日誌文件中。這些文件隨後可以用Snort或者tcpdump查看。這種模式的用戶並非很大,因爲現在很多可以記錄包的工具了。在這種模式下並不需要snort.conf配置文件。
入侵模式需要載入規則庫才能工作。在入侵模式下,Snort並不記錄所有捕獲的包,而是將包與規則對比,僅當包與某個規則匹配的時候,纔會記錄日誌或產生報警。如果包並不與任何一個規則匹配,那麼它將會被悄悄丟棄,並不做任何記錄。運行Snort的入侵檢測模式的時候,通常會在命令行指定一個配置文件。
Snort規則
Snort規則定義
Snort使用一種簡單的規則描述語言,這種描述語言易於擴展,功能也比較強大。Snort規則是基於文本的,規則文件按照不同的組進行分類,比如,文件ftp.rules包含了FTP攻擊內容。「注」Snort的每條規則必須在一行中,它的規則解釋器無法對跨行的規則進行解析。Snort的每條規則都可以分成邏輯上的兩個部分:規則頭和規則體。
規則頭
規則頭包括4個部分:規則行爲;協議;源信息;目的信息。下圖是對於規則頭的描述。
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預處理器能夠對分片包進行重組來定位分片攻擊,它的工作原理是將所有的分片重組構造成一個包含完整信息的數據包,再將這個包傳給檢測引擎。