snort 規則編寫

2021-09-21 11:50:50 字數 3678 閱讀 9950

snort規則分為兩個部分:規則的頭部和規則選項。首先,規則頭部包含著規則、動作、協議、源位址和目標位址、源埠、目標埠。第二部分是規則選項,它包含著乙個警告訊息和某資料報有關部分的資訊(如果要採取某個動作的話,就應當看一些這種資訊)。

例如:alert tcp any any -> 192.168.1.0/24 111 (content:"|00 01 86 a5|"; msg: "mountd access";)

上例中,圓括號之前的部分屬於規則的頭部,圓括號內部的屬於規則選項部分。

規則動作:

規則動作描述乙個資料報的「誰,在何處,什麼」的問題,並指明規則被激發後,在事件中應當做什麼。在編寫規則時,你可以從下面的關鍵字中選擇:

·alert –用選擇的警告方法生成乙個警告,然後記錄這個資料報。

·log -記錄這個資料報。

·pass – 忽略此資料報。

協議:規則的下一部分是協議。一些比較流行的協議包括tcp、udp、icmp等,不過snort支援許多其它的協議,並繼續增加新的協議。

源ip位址

緊跟著協議的部分是ip位址。它定義了資料報來自何處。你可以用「any」這個關鍵字來定義所有的ip位址。你甚至可以編寫乙個能夠匹配除你指定的ip位址之外任何位址的規則。這是通過使用「!」這個否定操作符實現的。

源埠它說的是資料報來自哪個埠。埠號也可以使用「any」關鍵字。你還可以通過使用「:」定義乙個範圍內的埠。例如,1:1000定義了從1到1000範圍內的所有埠。

方向操作符:

方向操作符「->」用於定義規則所適用的通訊方向。換句話說,即指明通訊進入或出自你計算機的什麼地方。

目標位址

下一部分是目標位址。它定義了資料報要到何方。與源位址類似,你也可以使用「any」關鍵字或定義乙個不會引起規則被激發的位址。

目標埠

緊隨目標ip位址的部分是目標埠號,即資料報設法連線的埠號。這兒的選項與源埠相同。

規則選項

圓括號內的所有內容稱為規則選項。乙個比較常用的關鍵字是「content」,不過你還可以用其它許多關鍵字。關鍵字「content」允許使用者設定規則,搜尋資料報有效負荷內的特定內容,並激發乙個響應。

例如:alert tcp any any -> 192.168.1.0/24 143 (content: "|90c8 c0ff ffff|/bin/sh";

msg: "imap buffer overflow!";)

通過上例可以看出,我們檢查了資料報是否包含了某種二進位制位元組(binary byte)碼和文字。

基本格式

動作 協議 源ip位址 源埠 方向 目標位址 目標埠 ( 規則選項)

增加乙個新規則

既然我們對要snort規則的語法有了乙個基本的了解,現在我們就可以向系統中增加一條新的規則:

首先以根使用者身份登入,並轉換到sysadm_r:

[test_server]# newrole -r sysadm_r

authenticating root.

password:

[test_server]# setenforce 0

下一步,編輯snort.conf檔案,需要使用自己喜歡的編輯器來修改/var/chroot/snort/etc/snort.conf。我們需要包括下面的行:

include local.rules

這會告訴snort,要求它使用儲存在local.rules中的新規則。

現在我們可以建立local.rules檔案:

[test_server]# cd /var/chroot/snort/etc

[test_server]# touch local.rules

下一部分比較有趣,因為我們需要編寫規則了。在乙個編輯器中開啟local.rules,並增加下面的行。注意,這個規則僅是示例,你需要保證不能在乙個真實的環境中使用哦:

alert tcp any any -> any 80 (msg: "sample alert";classtype:misc-attack;

sid: 2002973; rev:1;)

最後,重新啟動snort,以使新的規則生效

[test_server]# /etc/init.d/snortd restart

乙個簡單的例子

既然現在我們增加了一條新規則,現在解釋一下這條規則的作用,看一下其具體運用。

我們剛增加的規則是:

alert tcp any any -> any 80 (msg: "示例警告"; classtype:misc-attack;

sid: 2002973; rev:1;)

規則如何工作:

在使用者試圖訪問乙個web站點是,就會激發上面的規則。規則被激發後,會開啟警告,顯示乙個訊息。在這裡動作的關鍵字「alert」用所定義的方法 生成 乙個訊息,然後記錄這個資料報。我們正檢測的資料報的協議是tcp協議,而且所有的ip位址和埠號已經定義。目標位址在連線到埠80的任何 ip位址上定義。最後,規則選項的關鍵字「msg」告訴記錄器和警告引擎來顯示訊息「示例警告」。

測試現在你一定對自己的規則是怎樣執行的感興趣。為了看到規則的具體作用,你需要跟蹤snort的警告日誌。

[test_server]# cd /var/chroot/snort/var/log/snort

[test_server]# tail -f alert

開啟乙個web瀏覽器,輸入你的測試伺服器的ip位址。

現在可以檢視一下snort的警告記錄。你會看到來自snort的乙個訊息,這是由我們剛才增加的規則所引起的。

[**] [1:2002973:1] sample alert [**]

[classification: misc attack] [priority: 2]

12/12-15:35:22.130162 test_client:35524 -> test_server:80

tcp ttl:64 tos:0x0 id:35734 iplen:20 dgmlen:52 df

***a**** seq: 0x5f3b46f0 ack: 0x85067266 win: 0xb7 tcplen: 32

tcp options (3) => nop nop ts: 49925498 1529581

檢測有效負荷樣例

將下面的行新增到/var/chroot/snort/etc/local.rules中:

alert tcp any any -> any 80

(content:"index.pl";sid:12345678;rev:1;classtype:misc-attack;)

你可以看出,我們編寫了乙個規則,用以根據內容「index.pl」檢測任何連線到埠80的通訊。

注意在snort的警告日誌中,你應當能夠看到乙個與下面類似的訊息:

[**] [1:2002973:1] sample alert [**]

[classification: misc attack] [priority: 2]

12/13-08:13:20.545431 test_client:32950 -> test_server:80

tcp ttl:64 tos:0x0 id:11275 iplen:20 dgmlen:52 df

***a**** seq: 0x188a67a3 ack: 0xf74b200c win: 0xd8 tcplen: 32

tcp options (3) => nop nop ts: 64899598 45624

snort 規則編寫

Snort安裝使用規則

1 安裝libpcap 解壓 tar zxvf libpcap 1.0.0.tar.gz cd libpcap 1.0.0 配置 configure 編譯 make cd 安裝 make install 2 安裝pcre tar zxvf pcre 8.00.tar.gz cd pcre 8.00 ...

Snort 規則基本語法

一條snort規則分為規則頭和規則體 規則體內有規則選項,規則選項在圓括號內 規則頭 規則選項 alert icmp any any any any msg ping with tll 100 ttl 100 直接上例項,首先只需要知道一點,這條規則代表探測到ttl位100的icmp ping包的時...

snort規則byte test詳細解釋

自我的部落格 網上關於snort規則的解讀不夠詳細,有些規則甚至沒有具體的解釋。根據個人經驗,介紹幾個如下 byte test 測試乙個位元組的域為特定的值。能夠測試二進位制值或者把位元組字串轉換成二進位制後再測試。格式 byte test relative big little string he...