snort:工作流程及結構解析

1. 工作流程

在這裏插入圖片描述

2.名詞解釋

2.1 snort規則

snort的規則存儲在.rules文本文件中,並可以用文本編輯器修改。規則以類別分組。
不同類別的規則存儲在不同的文件中。最後,這些文件被一個叫做snort.conf的主配置文件引用。
Snort在啓動時讀取這些規則,並建立內部數據結構或鏈表以用這些規則來捕獲數據。
發現入侵特徵並利用規則捕獲它們是一項具有技巧性的工作,因爲在實時檢測中你應用越多的規則,那麼你將需要越多的處理能力,所以用盡量少的規則來捕獲儘量多的特徵是非常重要的。
Snort已經預先定義了許多入侵檢測規則,並且你可以自由添加自定義的規則。同時,你也可以移除一些內建規則以防止錯誤告警。

2.2 特徵

特徵是數據包中包含信息的特點。特徵用來檢測一種或多種攻擊行爲。例如,目標是你的web服務的包中如果出現scripts/iisadmin,可能意味着一個入侵嘗試。

2.3 snort日誌

日誌信息通常存放在文件中。默認情況下,Snort將這些信息存放在/var/log/snort目錄下,但是也可以在啓動Snort時用命令行開關來改變這個目錄。

2.4 蜜罐

蜜罐是一種以故意暴露已知弱點來愚弄黑客的系統。當黑客發現蜜罐時,通常會在它上面耗費一些時間,在此期間,你可以記錄黑客的行爲,從中找出黑客的活動情況和所使用的技術。一旦你瞭解了這些技術,你可以利用你得到的信息來加固你真正的服務器。

現在有很多種構建和放置蜜罐的方法。在蜜罐上應該運行一些公開的服務,這些服務包括Telnet服務(端口23),HTTP服務(端口80),FTP服務(端口21)等等。你應該將蜜罐放在你緊靠你應用服務器的某個位置,這樣黑客容易錯誤的將蜜罐當成真正的應用服務器。例如,如果你的應用服務器的IP地址勢192.168.10.21和192.168.10.23,那麼你可以將你的蜜罐的IP地址設爲192.168.10.22,同時設置你的防火牆和路由器,使黑客對服務器某些端口的訪問重定向到蜜罐上面,那麼入侵者就會把蜜罐當成是真正的服務器。你應當仔細的考慮告警產生機制,以使你的蜜罐受到威脅的時候可以立刻得到信息。將日誌存放在其他機器上是個好主意,這樣即使黑客侵入了蜜罐,也無法刪除日誌文件。

那麼什麼時候你應該安裝蜜罐呢?那要根據你的情況來決定:

如果你的機構有足夠的資源用來追蹤黑客,那麼你應該建立一個蜜罐。所謂資源包括硬件以及人力。如果你沒有足夠的資源,那麼安置蜜罐就沒有什麼必要,要知道獲取你不會用到的信息是沒有什麼意義的。

僅僅當你可以以某種方式來用蜜罐取得的信息的時候,蜜罐纔是有用的。
如果你想收集有關行爲的證據來起訴黑客,那麼你也可以用到蜜罐。

理想的情況下,蜜罐應該看起來像一個真實的系統,你可以製作一些假的數據文件,假的賬戶等等,使黑客信以爲真,這樣才能使黑客在上面逗留足夠長的時間,從而你可以記錄更多的活動。

你可以在上面取得更多的信息,可以找到一些你感興趣的資料,是你能夠對蜜罐有進一步的瞭解。你也可以去了解他們的開放源碼的密罐的相關信息。其他一些可以取得更多信息的地方是:

蜜罐網站
南佛羅里達蜜罐項目網站

2.5 TCP流追蹤

Snort新增加了一種叫做Stream4的預處理器,這種預處理器能夠同時處理數千併發的數據流。
它可以重新組裝TCP數據流,並進行狀態檢測。這就意味着你可以組裝一個特定的TCP會話,並從利用多個TCP包進行攻擊的方式中找出異常。你也可以查找流向或(和)流出某個服務器端口的數據包。

3. snort結構解析

3.1 包解碼器

包解碼器從不同的網絡接口中獲取包並準備預處理或者送到探測引擎。
即流程圖中的數據包截取子系統

3.2 預處理器

預處理器是用於排列或者修改數據包的組件或者插件,以便之後的探測引擎做出一些操作來發現數據包是否用來入侵。

一些預處理器也可以通過發現數據包頭部異常來執行一些探測工作,併產生告警。

預處理器也用於包分片的組裝。例如,可能入侵特徵的一部分在一個數據包分片上,而另外一部分在別的分片上面。爲了使探測引擎能夠準確的分析特徵,就需要組裝所有的分片。

Snort的預處理器能夠組裝數據分片,解碼HTTP URI,重新組裝TCP流等等

3.3 探測引擎

探測引擎是最爲重要的部分。它的作用是探測數據包中是否包含着入侵行爲。

探測引擎通過Snort規則來達到目的。規則被讀入到內部的數據結構或者鏈表中,並與所有的數據包比對。如果一個數據包與某一規則匹配,就會有相應的動作(記錄日誌或告警等)產生,否則數據包就會被丟棄。

探測引擎可以剖析數據包,並將規則應用在包的不同部分,例如

  • 包的IP頭
  • 包的傳輸層頭,包括TCP、UDP或其他傳輸層協議頭,也可以是ICMP頭。
  • 應用層頭。應用層頭包括DNS頭,FTP頭,SNMP頭,SMTP頭等等還有很多。有時你可以用一些間接的方法來獲得應用頭信息,比如位偏移等等。
  • 包載荷。這意味着你可以建立這樣一種規則,用探測引擎來尋找傳輸的數據中的字符。

在不同版本的Snort中,探測引擎有不同的工作方式。在所有1.x版的Snort中,一旦探測引擎將數據包匹配到某個規則的時候,就會停止進一步的過程,然後根據規則產生告警或者記錄日誌,這就意味着即使如果包匹配多條規則,僅僅第一個規則被應用,並不再進行其他的匹配,這樣做有好處,但是除了下面的情況:如果包匹配的第一個規則是低優先級的,就只產生低優先級的告警,即使這個包也匹配高優先級的後面其他規則。這個問題在第二版的Snort中得到了修正:包先對所有的規則進行匹配,然後再產生告警,在對所有的規則進行匹配之後,選擇最高優先級的規則告警。

3.4 日誌和告警系統

依據在包中所找到的東西,一個包可以用來記錄行爲或者產生告警。
日誌可以存爲簡單的文本文件、tcpdump格式文件或者其他的形式。在默認情況下,所有的日誌文件都存放在/var/log/snort目錄中。你可以在命令行中用-l選項來修改日誌和告警存放的位置。

3.5 輸出模塊

輸出模塊或插件可以根據你指定的保存日誌和告警系統產生的輸出信息的方式來執行不同的動作。
基本上這些模塊用來控制日誌和告警系統產生的輸出信息的格式。根據配置,輸出模塊可以做下列事情:

  • 簡單的在/var/log/snort/alerts文件或其他文件中記錄日誌
  • 發送SNMP trap
  • 將日誌記錄到類似於MySQL或Oracle的數據庫中。
  • 產生XML輸出
  • 修改路由其或者防火牆的配置
  • 向Windows主機發送SMB消息

4. 如何保護IDS自身

  • 不要在你運行IDS探測器的機器上運行任何服務
  • 你的IDS應該安裝從廠商那裏得到的最新的補丁
  • 配置你的IDS機器,使其不會對ping(ICMP echo)做出迴應
  • 如果你在Linux機器上運行IDS,請用netfilter或iptables來阻止任何不必要的數據,這時Snort仍然可以看到所有的數據包
  • 如果你的IDS機器僅僅用來做入侵檢測,那麼除非完全有必要,不要在上面進行任何其他的活動以及設立其他用戶賬號
  • 你可以在隱祕端口上運行Snort,這種端口僅僅監聽進入數據包而不向外部發送任何的數據包。在隱祕端口上我們用一種特殊的電纜,在你運行Snort的主機上,將端口的1針和2針短路,3針和6針連到對端。
  • 你也可以在一個沒有配置IP地址的接口上運行Snort。例如在Linux機器上,你可以用ifconfig eth0 up這樣的命令來激活沒有配置IP地址的接口eth0。這種方法的好處是,因爲Snort主機沒有IP地址,因此沒有人可以訪問它。你可以在eth1上配置IP地址用來訪問這個探測器。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章