簡介
本檔案將說明Snort 3自7.4版開始新增的技術。
背景資訊
- Snort 3檢測模組以塊模式工作。儘管這種方法提供了效能優勢和實現簡單(相對),但在檢測跨多個資料塊的特徵碼方面卻存在一些限制。
- 為了簡化使用者體驗,Snort已經進行了一些改進,即:
- Flowbits允許規則編寫器使用使用者定義的屬性標籤網路流;該屬性可以在來自流的任何資料包上設定、清除和測試(它提供了一種推斷資料包上某些較大特徵的方法)。
- 流模組將有線包累積成重建包,該重建包比原始包更大且更有意義;根據重建的資料包評估IPS規則可提供更多機會來檢視整體情況並匹配更大的模式(簽名)。
- 在某些情況下,重建的資料包不僅顯示新資料,而且包括已由檢測處理的以前資料的一部分;同樣地,該累積資料塊允許探測向後跨越該流(在某種程度上)的簽名。
- 流分離器將流分成多個塊,但這個切點可能是攻擊者用來避免模式檢測的薄弱點;因此,Snort實施了一種抖動機制,使得拆分更加不可預測。這使對攻擊者的分析更加複雜。
快訊
狀態簽名評估是一種可以新增到簽名清單的新技術。它通過在多個塊上啟用IPS規則評估來擴展檢測能力。因此,如果當前塊缺少資料,則規則不會立即不匹配,而是等待更多資料到達。
支援的平台
最低軟體和硬體平台
|
支援的最低管理器版本
|
受管裝置
|
需要支援的最低受管裝置版本
|
備註
|
|
管理中心7.4.0
|
FTD
|
7.4.0
|
僅Snort 3
|
|
裝置管理員7.4.0
|
支援FDM管理的任何FTD
|
7.4.0
|
僅Snort 3
|
功能詳細資訊
功能功能說明
如何運作?
檢測模組工作流程如圖所示。在流量處理階段,模組已經載入了所有規則,並且它逐一接受資料塊,評估規則,並定義要對處理狀態簽名評估塊執行的操作。

有關計畫的附註:
- 一旦為當前資料塊定義了規則子集,則來自它的每個規則都將獨立於其他規則進行評估。
- 每個資料塊獨立於其他塊進行計算。
- 資料塊是為當前資料包評估的一組IPS緩衝區的抽象。
- Action是針對當前資料包評估的操作的清單;最終判決將在稍後決定。
要瞭解狀態簽名評估的工作原理,請看一下如何評估常見的IPS規則以及資料塊如何形成流。
通用規則評估
IPS規則可以以下列形式顯示:
action protocol source → destination ( option_1: parameters; option_2: parameters;
option_3: parameters; gid: 1; sid: 1; meta_option_1; meta_option_2; meta_option_3; )
其中:
action — 如果規則觸發,則對資料包執行IPS操作
protocol — 要匹配的協定
來源、目的地- IP位址和連線埠
option_1、option_2、option_3 -屬於規則評估的IPS選項
gid, sid -標識規則的唯一對(它們類似於後設資料選項)
meta_option_1、meta_option_2、meta_option3 — 規則後設資料(如消息、類型別或引用),這些選項不參與規則評估。
- 協定、源和目標組成一個規則報頭。對於網路流(接受用於評估的流),它就像一個過濾器。 括弧中的所有內容都是規則體。來自規則主體的IPS選項(規則後設資料除外)是為資料塊評估的選項。它們符合以下宣告:
- 選項嚴格按照從左到右的順序進行評估。
- 可以是兩種主要型別之一。
- buffer setter,選項為當前資料包選擇IPS緩衝區。
- 其他(模式搜尋、數學操作、游標操作、flowbit操作)
- 游標用於跟蹤所選IPS緩衝區中的位置。
- 選項可以是:
- 「absolute」,表示它不依賴於游標位置
- 「relative」,表示它從游標位置開始計算
- 如果某個選項嘗試將游標置於選定的IPS緩衝區之外,則該選項將失敗,並且整個規則不匹配(由於缺少資料)
- 最後一點是檢測模組的限制。如果Snort可以擁有無限的資源,則當資料可用時(有更多有線資料包到達),它會快取所有被視為對規則進行重複評估的資料。
資料流和IPS緩衝區
- 資料流是來自同一源的連續格式的位元組流。它是一種支援狀態評估的新概念。塊之間的規則評估必須在同一邏輯資料(無論是檔案、純TCP資料流還是JavaScript文本)內完成。
- 一般來說,檢測模組接收的資料塊可以:
- 來自不同的IPS緩衝區(例如,pkt_data和file_data不同)
- 屬於另一個流
- 不形成流(從原始資料包生成的緩衝區)
- 不形成連續流(ICMP、UDP)
- 不按順序(HTTP部分響應)
- 包含重複的資料(累積的塊,如http_inspect.script_detection或HTTP分塊響應)
- 該檢測模組可以只對來自同一流的塊進行排序,否則,該評估過程將看到來自交織塊的不需要的干擾。

附註:此處的範例顯示一個HTTP使用者端同時上傳和下載多個檔案的情況。
- 目前,只有兩個IPS緩衝區可以表示一個流:pkt_data和file_data,其中:
- pkt_data形成用於TCP協定的兩個流(客戶端到伺服器和伺服器到客戶端方向)
- file_data必須為檔案、MIME附件和其他協定資料(如HTTP HTML頁面和/或其他Content-Type)形成流
- 有狀態評估僅在資料流內完成。
規則延續
- 前面的部分以一條語句結尾,該語句稱,如果將IPS選項設定為當前IPS緩衝區之外的游標,則不匹配。但是,當IPS緩衝區形成資料流時,狀態簽名評估功能會逐步進入,並將規則評估上下文儲存在Snort流對象中。儲存的評估上下文(狀態)稱為規則繼續。狀態簽名評估將規則的最終判定延後,直到有更多的資料可用。
- 規則延續有三個主要部分:IPS緩衝區名稱、緩衝區源和目標游標位置(緩衝區源是資料流的唯一識別符號)。
- 當一個資料塊被檢測模組處理時,後續動作發生:-
- 狀態簽名評估會建立規則延續,並將其附加到流,如果:
- IPS選項(byte_jump、content、pcre或其他任何更新游標位置的內容)將游標設定在當前IPS緩衝區之後
- 當前IPS緩衝區支援資料流。
- 當前IPS緩衝區會立即形成資料流。
- 有狀態簽名評估會撤銷剛剛建立的規則延續,並在以下情況下將其從流中刪除:
- IPS規則已在當前資料塊上觸發(該規則與塊的其他位置匹配)
- 有狀態簽名評估拒絕待執行的規則連續性,並在以下情況下將其從流中刪除:
- IPS緩衝區不會形成連續的流(例如,塊中具有重複的資料,或者存在間隙(部分資料丟失或者塊順序不正確)。
- 有狀態簽名評估使用新的可用資料更新目標游標位置,條件是:
- 規則延續中的緩衝區源與所選緩衝區源相同
- IPS緩衝區形成連續流
- 在以下情況下,狀態簽名評估會將規則繼續傳送回IPS規則引擎:
- 目標游標定位在所選IPS緩衝區內的點(這意味著它最終收到了完成規則評估所需的所有資料)。
使用者配置
- 由於規則連續佔用記憶體,Snort無法儲存無限數量的記憶體。有一個配置選項用於控制限制:
- Detection.max_continuations_per_flow = 1024:流中同時儲存的最大連續數{ 0:65535 }
- 當有狀態簽名評估達到限制時,它用新規則替換最舊的規則延續。
- 駐留在流上的最舊規則繼續時間過長,這意味著它仍不滿足恢復規則評估的條件。
- 此外,還有大量掛接計數可用於微調IPS規則(必須成為主要焦點)和限制(如果需要):
- detection.cont_creations:建立的連續項總數(總計)
- detection.cont_resses:已召回的延期總數(總計)
- detection.cont_flows:使用連續值的流總數(總計)
- detection.cont_evals:符合條件的連續項總數(總計)
- detection.cont_matches:匹配的連續項總數(總計)
- detection.cont_mismatches:不匹配的連續項總數(總計)
- detection.cont_max_num:每個流同時連續的最大數量(最大值)
- detection.cont_match_distance:匹配連續跳轉的總位元組數(sum)
- detection.cont_mismatch_distance:不匹配連續跳轉的總位元組數(sum)
疑難排解
此功能是對現有檢測過程的增強,因此無法顯式進行故障排除。如果檢測失敗,必須檢查規則、配置或流量。
示例問題
問題:說明
問題: 解決方案
將以以下方式評估規則:
第一個封包(大小為8kB)上攜帶檔案標頭及部分正文:
- 已選擇IPS緩衝區file_data。游標指向第0位元組e1。
- 快速模式選項匹配並設定游標位置在幻數之後,指向位元組7f。
- byte_jump選項讀取兩個位元組的檔案體大小。游標按這兩個位元組更新。然後byte_jump計算超過32768個位元組的跳躍。
- 有狀態簽名評估會建立一個規則延續,其中需要24578個位元組(32768 — (8kB - 4個位元組的報頭 — 2個位元組的主體大小))。
- 整個規則不匹配,因為byte_jump選項無法將游標位置設定到那麼遠。
在第二個資料包(大小為16kB)上,攜帶檔案正文部分:
- 狀態簽名評估看到待處理的規則延續。
- 它會按緩衝區名稱選擇緩衝區,並看到file_data可用且新資料大小為16384。
- 更新的游標顯示仍需要8194位元組(24578 - 16384)
- 規則未恢復。
第3個資料包(大小為8198個)攜帶檔案正文部分和後設資料:
- 狀態簽名評估看到待處理的規則延續。
- 它會按名稱選擇緩衝區,並看到file_data可用,而新資料大小為8198。
- 更新的游標顯示緩衝區有足夠的資料,游標位置是8194。
- 狀態簽名評估將刪除規則繼續性。
- 狀態簽名評估從第2個內容選項恢復規則評估,游標指向位元組01。
- content選項在搜尋到的第二個位元組上查詢匹配項。
- 整個規則終於觸發。
限制詳細資訊和常見問題
限制和其他注意事項
- 由於狀態簽名評估實施,Snort在重新載入其配置時丟棄所有待執行的規則連續性。請注意,即使規則被丟棄,仍會佔用Snort記憶體,直到下一個資料塊被傳送到檢測模組。
- 狀態評估中IPS規則的規則延遲功能的作用與普通規則評估的作用相同。總結了不同資料塊上規則部分的評估時間。如果時間超過限制,則規則評估會執行短路,提前退出。
- Flowbits操作保留了它們的意義,儘管它們仍然像「靜態」選項一樣執行。
在當前已知上下文中執行flowbit設定/清除/測試操作。因此,如果在規則繼續中評估flowbit選項,它將考慮當前環境(flowbits集),而不是規則開始評估時的環境。
此外,規則編寫者必須注意快速模式位置。
即使它可以在規則的任何部分,也會在整個規則之前評估fast-pattern選項。它觸發規則評估。對於基於狀態簽名評估的規則,這意味著規則延續點必須位於fast-pattern選項之後。
此外,IPS規則在其評估中可以有多個規則連續性(一個接一個,而不是同時)。 由於規則正文中的任何選項都可以繼續使用,因此允許規則編寫器使用同一IPS規則在資料流中的不同位置執行額外檢查。