snort源碼分析 一 (整體說明)

簡介

       snort 有三種工做模式:嗅探器、數據包記錄器、網絡入侵檢測系統。嗅探器模式僅僅是從網絡上讀取數據包並做爲接二連三的流顯示在終端上。 數據包記錄器模式把數據包記錄到硬盤上。網路入侵檢測模式是最複雜的,並且是可配置的。咱們可讓 snort 分析網絡數據流以匹配用戶定義的一些規則, 並根據檢測結果採起必定的動做。算法


功能介紹

       snort 有三種工做模式:嗅探器、數據包記錄器、網絡入侵檢測系統。嗅探器模式僅僅是從網絡上讀取數據包並做爲接二連三的流顯示在終端上。 數據包記錄器模式把數據包記錄到硬盤上。 網路入侵檢測模式是最複雜的, 並且是可配置的。 咱們可讓 snort 分析網絡數據流以匹配用戶定義的一些規則, 並根據檢測結果採起必定的動做。shell


嗅探器網絡

      所謂的嗅探器模式就是 snort 從網絡上讀出數據包而後顯示在你的控制檯上。首先,咱們從最本的用法入手。若是你只要把 TCP/IP 包頭信息打印在屏tcp

幕上,只須要輸入下面的命令:源碼分析

./snort -v

      使用這個命令將使 snort 只輸出 IP 和 TCP/UDP/ICMP 的包頭信息。 若是你要看到應用層的數據,可使用:性能

./snort -vd

       這條命令使 snort 在輸出包頭信息的同時顯示包的數據信息。 若是你還要顯示數據鏈路層的信息,就使用下面的命令:spa

./snort -vde

       注意這些選項開關還能夠分開寫或者任意結合在一塊。 例如: 下面的命令就和上面最後的一條命令等價:插件

./snort -d -v –e


數據包記錄器 命令行

       若是要把全部的包記錄到硬盤上,你須要指定一個日誌目錄,snort 就會自動記錄數據包:日誌

./snort -dev -l ./log

      固然, ./log 目錄必須存在, 不然 snort 就會報告錯誤信息並退出。 當 snort在這種模式下運行, 它會記錄全部看到的包將其放到一個目錄中, 這個目錄以數據包目的主機的 IP 地址命名,例如:192.168.10.1 若是你只指定了-l 命令開關,而沒有設置目錄名, snort 有時會使用遠程主

機的 IP 地址做爲目錄,有時會使用本地主機 IP 地址做爲目錄名。爲了只對本地網絡進行日誌,你須要給出本地網絡:

./snort -dev -l ./log -h 192.168.1.0/24

        這個命令告訴 snort 把進入 C 類網絡 192.168.1 的全部包的數據鏈路、TCP/IP 以及應用層的數據記錄到目錄./log 中。

       若是你的網絡速度很快, 或者你想使日誌更加緊湊以便之後的分析, 那麼應該使用二進制的日誌文件格式。 所謂的二進制日誌文件格式就是 tcpdump 程序使用的格式。使用下面的命令能夠把全部的包記錄到一個單一的二進制文件中:

./snort -l ./log -b

       注意此處的命令行和上面的有很大的不一樣。 咱們勿需指定本地網絡, 由於全部的東西都被記錄到一個單一的文件。你也沒必要冗餘模式或者使用-d、-e 功能選項,由於數據包中的全部內容都會被記錄到日誌文件中。你可使用任何支持 tcpdump 二進制格式的嗅探器程序從這個文件中讀出

數據包,例如:tcpdump 或者 Ethereal。使用-r 功能開關,也能使 snort 讀出包的數據。snort 在全部運行模式下都可以處理 tcpdump 格式的文件。例如:若是你想在嗅探器模式下把一個 tcpdump 格式的二進制文件中的包打印到屏幕上,

能夠輸入下面的命令:

./snort -dv -r packet.log

      在日誌包和入侵檢測模式下,經過 BPF(BSD Packet Filter)接口,你可使用許多方式維護日誌文件中的數據。 例如,你只想從日誌文件中提取 ICMP 包,

只須要輸入下面的命令行:

./snort -dvr packet.log icmp


網絡入侵檢測系統 

      snort 最重要的用途仍是做爲網絡入侵檢測系統(NIDS), 使用下面命令行可

以啓動這種模式:

./snort -dev -l ./log -h 192.168.1.0/24 -c snort.conf

      snort.conf 是規則集文件。 snort 會對每一個包和規則集進行匹配, 發現這樣的包就採起相應的行動。若是你不指定輸出目錄,snort 就輸出到

/var/log/snort 目錄。

注意: 若是你想長期使用 snort 做爲本身的入侵檢測系統,最好不要使用-v選項。由於使用這個選項,使 snort 向屏幕上輸出一些信息,會大大下降 snort的處理速度,從而在向顯示器輸出的過程當中丟棄一些包。此外,在絕大多數狀況下,也沒有必要記錄數據鏈路層的包頭,因此-e 選項也能夠不用:

./snort -d -h 192.168.1.0/24 -l ./log -c snort.conf

這是使用 snort 做爲網絡入侵檢測系統最本的形式,日誌符合規則的包,

以 ASCII 形式保存在有層次的目錄結構中。

    

結構說明

    以下圖所示,snort符合基於模式的匹配的入侵檢測系統的基本結構。

即:

  1. 嗅探網絡中的數據包

  2. 拆包

  3. 篩選匹配

  4. 執行匹配上的對應動做 


流程說明

        結合上面的結構說明能夠明確的理解snort運行的如下流程。

  1. 由於要嗅探因此要作好數據獲取的準備工做。

  2. 插件是使snort更加靈活,譬如輸出插件使snort能夠選取多種日誌輸出方式。

  3. 規則鏈表則是用於匹配的規則的儲存。

  4. 初始化快速匹配引擎則是爲了使對配匹配的規則進行預處理,減小查找時間。

  5. 以上初始化完成後,就進入      獲取包->拆包->匹配->動做->獲取包...的持續處理過程當中。




總結

   綜上所述,snort的關鍵在於兩點:

  1. 靈活性-由於做爲入侵檢測系統須要與網絡的發展同步跟進才能保證代碼的功能,所以總體結構必需擁有較高的穩定性和健壯性。

  2. 算法-程序運行中匹配是很頻繁的操做,所以良好的匹配篩選算法是該程序性能保證的必要條件。



參考文章

  1. 《snort中文手冊》

  2. 《snort入侵檢測系統源碼分析》

相關文章
相關標籤/搜索