Snort Rule

Snort rule

snort rule格式: RulesHeader (RulesOption )
ex:root用ftp登入
alert tcp any any -> any any 21(content:”user root”)

………………………………………………………………………………………………..

RulesHeader

格式為action protocol srcip srcport -> dstip dstport
action:觸發規則後snort需要做的動作,通常是指定alert
protocol:協定支援tcp,udp,icmp,ip
srcip:指定來源ip,支援cidr格式,可使用$HOME_NET變數,支援否定模式
srcport:指定來源port,支援範圍設定
->:指定通訊方向,還支援<-及<>雙向
dstip:指定目地ip,支援cidr格式,可使用$HOME_NET變數
dstport:指定目地port,支援範圍設定

ps:
srcip,srcport,dstip,dstport
使用any,表示任何ip或任何port

ip否定模式,使用( ! )
ex:! 10.1.1.1表示不等於10.1.1.1

port範圍設定,使用( : )
ex:
1:1024表示port1到port1024
:1024表示小於等於1024的port
1024:表示大於等於1024的port

…………………………………………………………………………………………….

RulesOption

option有以下:
msg:規則名稱
flow:
to_server:由client向server發出請求訊號
establised:己建立連線之通訊
content:比對payload,有16進位格式和ascii格式
classtype:規則分類
gid:snort generator id,預設為1,一般情況下不用去設定
sid:snort signature編號,<100保留,100~1000000官方使用,>1000000為用戶自訂
rev:定義目前rule版本
uricontent:掃描uri中的攻擊語法
reference:指定其他相關參考資料

…………….

content比對
格式為content:”payload”
payload格式有以下
|hex| 表示16進位格式
ascii 表示ascii格式
ex:
content:”|00|” 表示00,16進位格式
content:”SMB” 表示SMB,ascii碼格式
content:”|53 4D 42|” 表示SMB,16進位格式

ps
nocase 比對資料中ascii碼不論大小寫都符合特徴值

content定位option
offset:絕對位移指標,起始位置是payload開始位置,預設為0
depth:offset長度
ps:若payload不在該資料或超出範圍都表示不符合該rule
distance:相對位移指標,起始位置是上次符合content位置加上distance長度
within:distance長度
ps:若payload不在該資料或超出範圍都表示不符合該rule

content判斷式比對
byte_test:< bytes_to_convert>,< operator>,< value>,< offset> [,[relative],[big],[little][string],[hex],[dec],[oct]]
bytes_to_convert
operator:比較式,有<, >, =, !
value:條件值
offset:絕對位移指標
relative:相對位移指標
big:big endian運算
little:little endian運算
string:ascii數值
hex:將數值轉成16進位
dec:將數值轉成10進位,預設值
oct:將數值轉成8進位

跳過x byte不掃描
byte_jump:< bytes_to_convert>,< offset> [,[relative],[big],[little][string],[hex],[dec],[oct],[align],[from_beginning]]
align:將byte_jump所取得的運算值,自動補數為4的倍數 ex:運算值為13,自動補數為16
from_beginning:位移指標回到packet payload起點開始跳躍

pcre比對
格式為pcre:”/re/parameter”
parameter:參數,i表示不分大小寫,R表示參數同規則選項
ps:snort2.x後支援pcre語法