Black Hat USA 2002 - An Introduction to Gateway Intrusion Detection Systems
三句話摘要
網關入侵偵測系統的設計、實作與演進,從 Hogwash 到內聯 Snort 的架構遷移。 內聯 Snort 通過整合 Hogwash 的網關偵測功能到 Snort 核心,並利用 Linux IPtables 完成防火牆部分,實現了一個統一、可維護、規則完善的入侵防禦系統,但須牢記:再強大的工具也只是深度防禦的一環,不能替代系統修補、正確配置與專業管理。 網關 IDS 與防火牆的本質差異:防火牆僅檢查目標位址、連接埠等表層資訊,網關 IDS 則對封包內容進行深度檢查,能發現防火牆無法偵測的漏洞利用程式。這使其特別適合防禦 Code Red 等蠕蟲,但前提是非常謹慎地配置規則以避免誤報。
重點整理
重點- 1
網關 IDS 與防火牆的本質差異:防火牆僅檢查目標位址、連接埠等表層資訊,網關 IDS 則對封包內容進行深度檢查,能發現防火牆無法偵測的漏洞利用程式。這使其特別適合防禦 Code Red 等蠕蟲,但前提是非常謹慎地配置規則以避免誤報。
- 2
Hogwash 架構困境與內聯 Snort 方案:Hogwash 作為 Snort 的獨立封裝存在維護負擔——每次 Snort 更新都需手動移植修改。講者說服 Snort 開發團隊將 Hogwash 功能整合直接進 Snort,使用 IPtables 的 IPQ 機制替代複雜的橋接程式碼,達成一套系統、一份規則、一個開發社群的目標。
- 3
機會性流重組與端口掃描偵測:由於無法進行傳統流重組,Hogwash 採用「機會性流重組」策略——只在偵測到部分匹配時才組合相鄰封包,預設快取 65,000 個封包,效率極高。端口掃描偵測則基於會話追蹤,20 個不同連接埠或 5 個不同目標機器即觸發封鎖,且可根據來源 IP 配置忽略清單。
- 4
內容替換與蜜罐整合:講者為蜜網專案開發的內容替換功能,可在封包通過時重寫有效載荷。例如將 `cmd.exe` 替換為 `yy.yy`,使漏洞利用失效但不暴露防禦行為,攻擊者看到的是正常 Web 伺服器回應而非被阻擋的跡象。
實用技巧與重點
乾貨- 核心工具與版本:
- Hogwash(GPL 授權,SourceForge.net 下載)
- Snort 入侵偵測系統(Snort.org)
- 內聯 Snort(整合 IPQ、netfilter、IPtables)
- 關鍵數字:
- 快取封包數:預設 65,000 個
- 連接埠掃描閾值:20 個不同連接埠或 5 個不同目標
- 閒置超時:預設 60 秒(可配置到 5-10 秒)
- Hogwash 規則集:典型 2-500 條規則
- Snort 流量處理:數百 Mbps 到近千 Gbps(視系統配置)
- 核心規則指令:
- `Drop`:丟棄封包 + 發送重置 + 記錄
- `Ignore`:丟棄封包,不發送重置
- `Sdrop`:丟棄 + 發送重置,但不記錄日誌(避免日誌爆炸)
- 內聯 Snort 配置步驟:
- 啟用核心 IPQ 模組:`modprobe ipq`
- IPtables 輸入鏈加入隊列規則:`-j QUEUE`
- 編譯時啟用內聯模式:`./configure --enable-inline`
- 安裝 libipq 與 libnet 開發庫(netfilter.org 下載)
- Red Hat 7.3 核心預設支援 IPQ;7.1-7.2 需重編核心
- 網關 ID 典型部署:防火牆 → 網關 IDS → DMZ 伺服器(郵件、Web、DNS)→ 內部網路
- 測試最佳實踐:
- 先將規則寫為 `alert`,確認無誤後再改為 `drop`
- 勿直接發布 drop 規則,需進行充分驗證
結論
結論“內聯 Snort 通過整合 Hogwash 的網關偵測功能到 Snort 核心,並利用 Linux IPtables 完成防火牆部分,實現了一個統一、可維護、規則完善的入侵防禦系統,但須牢記:再強大的工具也只是深度防禦的一環,不能替代系統修補、正確配置與專業管理。”
完整解析
詳細Jed Hail 是 Nitro Data Systems 首席安全架構師,其日常工作是為大型安全資訊資料庫建立資料管理解決方案。在本演講中,他深入探討網關入侵偵測系統(GIDS)——一種充當網路網關的 IDS,位於網路入口處分析通過的流量。與只能檢查目標位址、連接埠的防火牆相比,網關 IDS 對資料包進行更深入的檢查,判斷其中是否包含惡意內容,若發現則主動丟棄。理想情況下應能阻止任何已知漏洞,且現代偵測系統基本可靠地攔截已知漏洞程式。
Hogwash 是講者開發的開源網關 IDS,基於 Snort 入侵偵測系統。它在橋接防火牆和 IDS 之間找到平衡:像防火牆般轉發或丟棄決策,像 IDS 般檢查封包內容。Hogwash 提供三種處理模式——Drop(丟棄+重置+記錄)、Ignore(靜默丟棄)、Sdrop(丟棄+重置但不記錄),其中 Sdrop 特別適合 Code Red 等大量重複流量的情況,防止日誌被警報淹沒。
由於傳統流重組在網關 IDS 中不可行(無法重新注入新組合的封包),Hogwash 採用「機會性流重組」——僅在偵測到部分匹配時才組合相鄰封包。該演算法使用大型環形緩衝區(預設 65,000 個封包),實踐證明部分匹配極為罕見,快取能保留數天而無需頻繁重新整理。
講者特別強調了端口掃描偵測的重要性。該偵測器基於會話追蹤,記錄每個外部來源的連接資訊;若偵測到 20 個不同連接埠或 5 個不同目標機器的連接,則標記為掃描器並啟動丟棄機制。該設計考慮了偽造 IP 的防禦——攻擊者必須從每個偽造來源分別達到閾值,無法簡單分散攻擊。超時機制(預設 60 秒)意味著攻擊者必須保持活躍,停止後自動解除封鎖。
為蜜網專案開發的內容替換功能是另一大創新。由於封包通過設備,Hogwash 可重寫有效載荷。例如規則可偵測針對 IIS Web 伺服器 80 連接埠的 `cmd.exe` 命令,將其替換為無效字符串。這樣漏洞程式失效但攻擊者看不出防禦跡象——Web 伺服器只是返回「未找到」頁面,難以被偵測為蜜罐。
經過一年開發,講者決定將 Hogwash 功能整合進 Snort 本身,誕生了內聯 Snort。新架構拋棄複雜的橋接程式碼,改用 Linux IPtables 與 netfilter 的 IPQ 機制:IPtables 防火牆接收封包,若決定轉送則傳給用戶空間的 Snort,由 Snort 進行深度檢查後告知是否丟棄或轉送。該設計帶來多重優勢——IPtables 負責防火牆和 NAT 功能,Snort 專注偵測;Snort.org 官方規則資料庫支援內聯模式;開發者群體擴大,更新與維護集中統一;系統管理員只需維護一套 Snort 而非兩個平台。
編譯內聯 Snort 需手動啟用內聯模式選項,並安裝 libipq 與 libnet。核心須編譯進 IPQ 支援(IPtables 選項下)。配置時在 IPtables 輸入鏈加入 `-j QUEUE` 規則,先啟用佇列再啟動 Snort,否則防火牆會丟棄所有封包直到 Snort 上線。執行時使用 `-Q` 參數而非 `-i` 介面參數,Snort 將從 IPQ 接收封包。
現場演示中,講者運行內聯 Snort 並啟用了 12,200 條規則,其中大部分改寫為 drop 規則。當出席者運行 Nessus 掃描器嘗試連接埠掃描時,系統成功偵測並丟棄流量,掃描日誌記錄了所有被攔截的封包。講者指出,若無重置信號的丟棄會導致掃描器重試,甚至耗盡其系統資源——這是額外的防禦層。規則數量越多效能下降越快,實際部署通常採用 2-500 條精心選擇的規則,在千兆網路上可達接近千兆位元的吞吐量。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

