天天看點

Snort3規則編寫簡介

Snort3規則編寫簡介

本指南介紹了Snort3規則語言的一些新變化,目标是促進規則編寫文法從Snort2到Snort3的轉變。

規則頭

規則頭格式遵循以下格式:

Action Protocol Networks Ports Direction Operator Networks Ports
           

示例:

alert tcp $HOME_NET any -> $EXTERNAL_NETE $HTTP_PORTS (RULE_OPTIONS)
alert udp $EXTERNAL_NET $FILE_DATA_PORTS -> $HOME_NET any (RULE_OPTIONS)
           

在Snort3中,選項Protocol、Networks、Ports和Direction Operator是可選的,可以省略,表示比對任意;類似于用關鍵字any替換網絡和端口。

示例:

alert tcp (RULES_OPTIONS)
           

這個允許建立更快和更少備援的規則。實際上省略選項應該是有選擇性的,以避免在讀取規則時産生歧義。一個典型的場景是編寫規則來檢測内容,無論其方向(入站/出站)和協定(tcp、udp 或 icmp)如何。

Alert “http”服務關鍵字

在Snort2中,編寫規則以檢測HTTP URI、Header或Body中的内容時使用的協定定義為tcp。在Snort3中,一個新的協定關鍵字 http可用于HTTP内容檢測。這提供了以下好處:

  1. Snort可以檢測和對HTTP内容告警,無論端口如何(非标準端口上的HTTP)。是以,規則編寫者不必擔心某些惡意軟體正在通信的端口是否标準端口。
  2. 不再需要Snort2中metadata選項中定義的服務映射(例如:service http)。是以,免除了規則編寫者必須在規則中繼資料選項中定義服務映射的負擔。本指南将進一步讨論中繼資料選項。
  3. 使用Snort3中可用的新的粘性和動态緩沖區的能力允許對Snort3規則進行簡化和潛在的性能改進,具體如以下部分所述。

新的粘性緩沖區和動态緩沖區選擇器

粘性緩沖區(例如

file_data

sip_header

)允許規則編寫者在包含HTTP響應正文或SIP标頭等内容的特定緩沖區中定義檢測光标。粘性緩沖區必須先于被檢測的内容,并且在更改之前一直有效。Snort3引入了新的粘性緩沖區和選擇器專門用于HTTP内容檢測,例如

http_uri

http_header

。此外,Snort3在某些粘性緩沖區下添加了動态緩沖區選擇器作為子類别,例如http_header粘性緩沖區下的字段選擇器。使用字段選擇器,規則作者可以限制針對特定HTTP标頭的内容比對,其中标頭名稱不區分大小寫。

“http_uri”粘性緩沖區示例

在這個示例中,在Snort3中使用http_uri粘性緩沖區消除了使用

每個内容比對後的http_uri内容選項。

Snort3規則編寫簡介

“http_header”粘性緩沖區和“字段”動态緩沖區選擇器示例

在此示例中,使用http_header和字段選擇器允許規則編寫器将内容比對定位到HTTP請求标頭中的特定字段(不區分大小寫)。

Snort3規則編寫簡介

粘性緩沖區和已删除的PCRE選項示例

在Snort2中,post-re修飾符(B、U、P、H、M、C、I、D、K、S、Y)為正規表達式設定編譯時間标志。例如,pcre U的Snort特定修飾符用于比對解碼的URI緩沖區。

在Snort3中,一些post-re修飾符(B、U、P、H、M、C、I、D、K、S、Y)已被删除,以支援粘性緩沖區。

Snort3規則編寫簡介

帶有“bufferlen”選項的粘性緩沖區和URL長度示例

在Snort2中,檢查URI長度是通過urilen選項實作的。

在Snort3中,選項urilen被删除并被通用緩沖區bufferlen替換,該緩沖區适用于指定的粘性緩沖區。

Snort3規則編寫簡介

帶有“bufferlen”選項的粘性緩沖區和使用者代理長度示例

Snort3中通用緩沖區bufferlen的引入創造了新的檢測能力。例如,檢測HTTP請求頭中User-Agent的長度。

Snort3規則編寫簡介

Alert “file”關鍵字

規則中action後的file關鍵字适用于任何可以出現檔案的地方,而不管協定或編碼如何。這使規則編寫者免于以下負擔:

  1. 維護多個規則以檢測不同協定上的相同檔案或内容。
  2. 維護多個規則以檢測相同或不同方向的内容周遊。
  3. 添加新協定時建立或修改規則。
  4. 無需擔心并可能替換規則中的flowbits選項。

無論協定或方向如何,都可以檢測特定内容示例

此示例嘗試檢測通過HTTP(下載下傳)和SMTP(上傳)在網絡中傳輸的惡意内容。

Snort3規則編寫簡介

在Snort規則中使用file關鍵字也應該可以提高性能。以下示例展示了 Snort2和Snort3之間的規則文法差異,盡管它們很微妙。

檢測單個檔案類型示例

Snort3規則編寫簡介

檢測單個檔案類型和版本示例

Snort3規則編寫簡介

檢測單個檔案類型和多個版本示例

Snort3規則編寫簡介

檢測多個檔案類型示例

Snort3規則編寫簡介

檢測多個檔案類型和版本示例

Snort3規則編寫簡介

使用OpenAppID進行應用檢測

Snort3規則編寫簡介

Metadata規則選項

在Snort2中,中繼資料選項中的某些關鍵字(如engine、soid和service鍵)會影響Snort檢測行為,例如在提供主機屬性表時使用基于目标的服務辨別符的鍵。

在Snort3中,中繼資料現在是真正的中繼資料,對檢測沒有影響。Snort不關心中繼資料的内部結構/文法。

用中繼資料中的“服務”鍵替換中繼資料中的服務示例

Snort3規則編寫簡介

Remarks規則選項

繼續閱讀