1. 程式人生 > 其它 >Snort 入侵檢測系統

Snort 入侵檢測系統

Snort 入侵檢測系統

一、實驗目的

1.掌握snort IDS工作原理

2.應用snort 三種方式工作

二、實驗環境

系統環境:Windows環境, kali環境

三、實驗原理

1.snort IDS概述

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

2.snort IDS體系結構

Snort IDS體系結構圖,如下圖所示:

如上圖所示,snort的結構由4大軟體模組組成,它們分別是:

(1) 資料包嗅探模組——負責監聽網路資料包,對網路進行分析;

(2) 預處理模組——該模組用相應的外掛來檢查原始資料包,從中發現原始資料的“行為”,如埠掃描,IP碎片等,資料包經過預處理後才傳到檢測引擎;

(3) 檢測模組——該模組是snort的核心模組,當資料包從前處理器送過來後,檢測引擎依據預先設定的規則檢查資料包,一旦發現數據包中的內容和某條規則相匹配,就通知報警模組;

(4) 報警/日誌模組——經檢測引擎檢查後的snort資料需要以某種方式輸出。如果檢測引擎中的某條規則被匹配,則會觸發一條報警,這條報警資訊會通過網路、UNIXsocket 、Windowspopup(SMB)、SNMP協議的trap命令傳送給日誌檔案,甚至可以將報警傳送給第三方外掛(如snortSam),另外報警資訊也可以記入SQL資料庫。

3.snort應用

Snort採用命令方式執行。格式為:snort-[options]。Options為選項引數:filters為過濾器。

Snort命令 選項引數
-A <A=alert>報警方式:full(報警內容比較詳細),fast(只記錄報警時間),none(關閉報警功能)
-a 顯示ARP包
-b 以tcpdump的格式將資料包記入日誌
-c 使用配置檔案檔案內容主要控制系統哪些包需要記入日誌,哪些包需要報警,哪些包可以忽略等。
-C 僅抓取包中的ASCLL字元
-d 抓取應用層的資料包
-D 在守護模式下執行snort
-e 顯示和記錄資料鏈路層資訊
-F 從檔案中讀取BPF過濾資訊
-i 使用網路介面檔案
-N 關閉日誌功能,報警功能仍然工作
-p 關閉混雜模式的嗅探
-s 將報警資訊記錄到系統日誌,日誌檔案可以出現在/var/log/messages目錄裡
-V 顯示版本號

四、實驗步驟

1.啟動kali虛擬機器,在終端中輸入命令:apt-get install snort 進行安裝。(此處kali已安裝snort)

Snort安裝完成後,輸入命令:snort -v,檢視snort的版本資訊,如下圖所示:

2.自定義規則

使用自定義規則需要對snort配置檔案進行配置工作,輸入命令:leafpad/erc/snort/snort.conf,開啟snort配置檔案snort.conf,如下圖所示:

在開啟檔案51行做如下修改,將IP變數HOME_NET的值改為本機kali主機的IP地址,如下圖所示:

觀察snort.conf配置檔案可以發現規則檔案都在路徑RULE_PATH中,檔案113行可以看到,RULE_ PATH 的值為/etc/snort/rules,所以規則檔案都在/etc/snort/rules目錄下,如下圖所示:

在終端中輸入命令進入目錄:cd /etc/snort/rules,如下圖所示:

在/etc/snort/rules 中開始自定義自己的規則檔案,在/etc/snort/rules中開啟終端,輸入命令touch 70.rules建立新的規則檔案,如下圖所示:

返回snort.conf檔案中,將578行至696行全部新增#號註釋,在697行處新增如下內容用於在配置檔案中包含自定義規則檔案70.rules,此配置的目的是入侵檢測模式使用snort的時候,snort僅以規則檔案70.rules中自定義的規則來進行工作。如下圖所示:(在配置檔案snort.conf中包含自定義規則檔案70.rules完成配置檔案snort.conf修改後,儲存檔案)

接下來開啟70.rules檔案,新增一條簡單的規則,如下圖所示:
內容如下:alert tcp $EXTERNAL_NET any -> $HOME_NET 80 (msg:"Web Access";sid:1)

[註釋]:此條規則的含義為任何源地址不為kali本機地址,目標地址為kali本地地址,目標埠為80的TCP資料包都將觸發報警

  1. alert:生成一個告警,然後記錄這個包
  2. tcp:規則匹配資料包協議的型別為tcp
  3. $EXTERNAL_NET:IP地址,在snort.conf檔案中定義
  4. any:跟隨在IP地址之後的any表示任意埠號
  5. $HOME_NET:IP地址,在snort.conf檔案中定義
  6. 80:表示80埠
  7. msg:在報警和包日誌中列印的訊息
  8. sid:規則的id號

報警輸出檔案為/var/log/snort目錄下alert檔案,開啟一個新的終端,cd到報警檔案所在目錄/var/log/snort,使用tail -f命令動態的檢視alert檔案,即有新的報警資訊存入alert檔案時,新新增的報警資訊將輸出至終端顯示,如下圖所示:

在另一個終端中,啟動apache2命令為:/etc/init.d/apache2 start,使得其它主機可以訪問kali主機Web主頁,如下圖所示:

以入侵檢測方式啟動snort並新增-c命令使用配置檔案snort.conf,命令為:snort -A full -c /etc/snort/snort.conf(配置檔案中包含了自定義規則檔案70.rules),如下圖所示:

開啟本地主機,使用瀏覽器訪問kali主機Web主頁(http://192.168.70.137/),如下圖所示:

返回kali主機,可以得知alert檔案中新添加了報警資訊,從報警資訊可知,IP為192.168.70.1的主機訪問了kali本機的Web頁面,如下圖所示:

3.在70.rules檔案中繼續新增FTP規則,如下圖所示:
FTP規則命令如下:
alert tcp $EXTERNAL_NET any -> $HOME_NET 21 (msg:"USER LOGIN";content:"USER";sid:10000002;tag:host,10,packets,src;rev:1;)

snort.conf儲存後,輸入命令:snort -d -A full -c /etc/snort/snort.conf 啟動snort服務,這裡使用-d 引數是為了抓取應用層的資料包,如下圖所示:

Kali 主機中使用命令/etc/init.d/vsftpd start 開啟ftp服務,如下圖所示:

在本機中,使用使用者名稱:uftp,密碼:123456對kali主機FTP伺服器進行登入,登入成功後輸入命令quit退出登入,如下圖所示:

返回kali主機,可以看到alert新新增FTP報警資訊如下圖所示:

在/var/log/snort目錄下可以看到新增日誌檔案snort.log.163929377,輸入命令snort -dr snort.log.163929377,在終端開啟新增加的日誌檔案,日誌檔案中已捕獲使用者登入的使用者名稱及密碼,且日誌中儲存的資料包個數剛好為11(觸發規則的資料包和隨後包觸發規則源地址的資料包)。如下圖所示:

4.在70.rules檔案中繼續新增新的規則,如下圖所示:
alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg:"We are being pinged!";icode:0;itype:8;sid:10000003;rev:1;)

在kali終端輸入命令:snort -e -A full -c /etc/snort/snort.conf啟動snort, -e 命令用於抓取鏈路層資料包,如下圖所示:

在本地主機對kali 主機進行ping操作,如下圖所示:

返回kali主機,可以看到新新增的報警資訊,報警資訊中還包含了ping操作的主機MAC地址,如下圖所示:

[驗證]:開啟本地cmd輸入命令ipconfig /all 檢視是否一致,結果一致,如下圖所示: