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