首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Snort 規則編寫核心:content 選項與修飾符深度解析

     編輯:Java 相關知識

content 選項概述

content 是 Snort 規則中最核心的載荷匹配選項,用於在數據包 Payload 中搜索特定模式。匹配引擎採用 Boyer-Moore 算法,支持文本與二進制混合模式,默認大小寫敏感。

語法與特殊字符轉義

content: [!] "<pattern>";
  • ! 取反匹配(不包含該模式時觸發)。
  • 特殊字符 : ; \ " 必須轉義:
    ① 前綴 \(如 \:)
    ② 或用十六進制字節碼 |3A| 表示 :。

修飾符詳解

修飾符作用示例
nocase忽略大小寫匹配content:"USER root"; nocase;
rawbytes匹配原始數據,繞過預處理器解碼(如 Telnet/HTTP 解碼)content:"|FF F1|"; rawbytes;
depth:<n>從起始偏移處向後 n 字節內匹配(默認起始為 payload 開頭)content:"cgi-bin/phf"; offset:4; depth:20;
offset:<n>從 payload 開頭跳過 n 字節開始匹配同上
distance:<n>相對於上一個 content 匹配結束位置 再跳過 n 字節content:"ABC"; content:"DEF"; distance:1; 等價正則 /ABC.DEF/
within:<n>在 distance 指定位置起向後 n 字節內匹配content:"ABC"; content:"EFG"; within:10;

uricontent:URI 正規化後匹配

針對 HTTP URI 經預處理器正規化後的內容匹配(如 %2f → /,目錄遍歷序列被移除)。規則中必須寫正規化後的模式,否則無法匹配。

uricontent:"/winnt/system32/cmd.exe";

實戰示例

# 檢測 SMB 管道滲透
alert tcp any any -> any 139 (content:"|5c 00|P||00|I|00|P|00|E|00 5c|";)

# 非 GET 請求告警(前 3 字節非 GET)
alert tcp any any -> any 80 (content:!"GET"; depth:3; nocase;)

# Telnet NOP 指令檢測(需繞過 Telnet 解碼器)
alert tcp any any -> any 23 (msg:"Telnet NOP"; content:"|FF F1|"; rawbytes;)

最佳實踐建議

  1. 多 content 串聯:單條規則使用多個 content 降低誤報率。
  2. 優先用長模式:長模式匹配更精確,性能更好(Boyer-Moore 跳躍更大)。
  3. depth/offset 限制搜索範圍:避免全 payload 掃描,大幅提升性能。
  4. distance/within 處理相對位置關係:替代複雜正則,效率更高。
  5. 測試時使用 snort -T -c snort.conf 驗證規則語法與性能統計。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved