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]
Snort命令 | 選項引數 |
---|---|
-A | <A=alert>報警方式:full(報警內容比較詳細),fast(只記錄報警時間),none(關閉報警功能) |
-a | 顯示ARP包 |
-b | 以tcpdump的格式將資料包記入日誌 |
-c | |
-C | 僅抓取包中的ASCLL字元 |
-d | 抓取應用層的資料包 |
-D | 在守護模式下執行snort |
-e | 顯示和記錄資料鏈路層資訊 |
-F | |
-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資料包都將觸發報警
- alert:生成一個告警,然後記錄這個包
- tcp:規則匹配資料包協議的型別為tcp
- $EXTERNAL_NET:IP地址,在snort.conf檔案中定義
- any:跟隨在IP地址之後的any表示任意埠號
- $HOME_NET:IP地址,在snort.conf檔案中定義
- 80:表示80埠
- msg:在報警和包日誌中列印的訊息
- 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
檢視是否一致,結果一致,如下圖所示: