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]
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主頁(//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
查看是否一致,結果一致,如下圖所示: