一個開放原始碼的高階NIDS系統(轉)

post0發表於2007-08-09
一個開放原始碼的高階NIDS系統(轉)[@more@]

在介紹Bro之前先總結一下幾個常見的開放原始碼NIDS系統:

Snort ( )

目前最著名最活躍的開放原始碼NIDS專案,定位於輕量級的入侵檢測系統,已經實現了網路探測器和許多第三方的管理及日誌分析工具,廣泛使用在對檢測準確性要求不高的非高速網路環境下。對其進行介紹及分析資料輔天蓋地,國內當前大多數的IDS產品都是在其基礎上修改出來的。Snort的成功之處在於其高效的整體設計編碼、簡潔明瞭的規則描述設計及已經成一定規模的攻擊檢測規則集,它的規則集已經被很多其他開放原始碼IDS專案所相容。

Prelude IDS ( )

目前比較活躍的開放原始碼混和IDS專案,比較注重IDS各元件的模組化設計,元件之間使用標準IDMEF格式進行通訊,從設計的方式來看定位於適應大型網路的需求,當前已經實現了網路探測器、日誌分析器、告警資訊集中檢視分析工具。其網路探測器部分基本上翻版了Snort的功能,完全相容 Snort的規則集。

Firestorm ( )

不太出名的開放原始碼NIDS專案,目前僅實現了探測器部分,完全相容Snort的規則集,功能上也基本上差不多,可以把告警資訊記錄到Prelude IDS的管理器,但自稱效能上比Snort強很多。

NetSTAT ( ~rsg/STAT/ )

一個學術界的開放原始碼的IDS專案,基於STAT(State Transition Analysis Technique,狀態遷移分析技術)描述攻擊的研究成果,使用特有的STATL語言描述攻擊,攻擊描述文字被STATL解釋工具轉換為C++程式碼編譯進檢測引擎來實現檢測功能,目前已經發布了STATL語言解釋轉換工具及一個基本的示例網路探測器部分(很少的幾個檢測功能例子)。要熟練使用這個IDS工具需要比較強的程式設計功底,但用此 IDS可以實現很複雜的檢測功能。

可以看到當前大多數開放原始碼的NIDS專案都以Snort為基礎,還有一些主要用於學術研究的IDS(比如NetSTAT),Snort是用於瞭解NIDS技術的很好入門方式,學術領域的IDS主要用於驗證某些思想概念的可行性,這類IDS一般實現使用複雜,注重檢測的嚴謹準確,如果商業化還需要很大的努力。Snort實現簡單,使用方便,但本質上只是一個可以匹配分析資料包payload的嗅探器而已,對於有豐富網路知識的網管來說是個稱手的網路流量過濾分析工具。由於只能對TCP/UDP/ICMP資料包的payload及某些資料包屬性做些簡單的匹配操作,而且沒有特定的規則關聯機制, Snort對於攻擊的檢測只能是粗線條的。當前的主流商業NIDS產品已經普遍採用細緻的應用層協議分析技術,應用層協議分析技術不僅能夠極大地提高檢測準確性和效率,更能帶來基於協議分析的異常檢測能力,基於規則類似病毒檢測的方式只能檢測已知攻擊,而基於異常分析的檢測卻可能檢測到某些未知攻擊,這點是新NIDS產品的發展熱點和方向,基於異常並結合誤用的IDS產品將會是未來IDS/IPS產品的主流。Snort雖然對一些應用層協議如HTTP、 PORTMAP、TELNET做了些簡單的解碼和處理,這些處理只是對匹配做的一些最佳化,遠沒有到協議分析的程度,Snort與當今主流IDS產品的差距越來越大,相對而言越來越落後,學習參考的價值越來越少。是不是存在技術上更有意思的開放原始碼的NIDS專案呢,我注意到了一個叫Bro的NIDS軟體,它幾乎提供了一切所希望見到的特性。

下面介紹一下Bro ( ),本文旨在分析Bro本身提供的一些很有意思且很有用的功能特性,不對其如何安裝、配置、使用做介紹,那部分的內容可以參考軟體包中的相關說明。

Bro是一個Vern Paxson實現的實時網路入侵檢測軟體,於98年對外發布,BSD license,它的最初設計目標是實現一個在100M網路下實時告警、機制與策略分離、高可擴充套件性的入侵檢測及網路監視審計系統。

Bro的系統結構如下圖示:

| 下發 ^ 實時

V 策略 | 告警

+-----------------------------+

| 策略指令碼直譯器 |

+-----------------------------+

| 事件 | 規則 ^ 事件

V 控制 | 控制 | 流

+--------+--------------------+

規則 +--------V-+ |

-----&gt| 規則引擎 | 事件生成引擎 |

+----------+ |

+-----------------------------+

| Tcpdump ^ 過濾出

V 過濾器 | 的流量

+-----------------------------+

| libpcap |

+-----------------------------+

^

| 網路資料包

+-----------------------------+

| 網路 |

+-----------------------------+

Bro的設計實現遵循分層的原則,利用libpcap從網路上獲取的資料包經過事件生成引擎和規則引擎被抽象成一系列的事件,這些事件被策略指令碼做進一步的深入分析,基本事件本身就可以觸發告警,策略指令碼分析基本事件以後既可以生成新的事件也可以觸發告警。如下詳細描述各個元件的功能,對於Bro 提供的高階功能特性分析會穿插其間:

$ libpcap

Bro使用libpcap庫來獲取網路資料包,這樣可以使Bro忽略具體的鏈路層細節,從而獲得最大的可移植性。當前Bro支援FreeBSD、Solaris、Linux、Digital Unix等作業系統。

libpcap從上層的事件生成引擎獲得Tcpdump格式的網路流量過濾器,從網路卡上過濾出Bro感興趣的那部分流量做進一步的分析。比如 “tcp port 80 or port 23”這個過濾器會從網路上過濾出源目的源口為80或23的TCP資料包做分析,也就是分析目標是HTTP和 TELNET協議相關的資料包。

$ 事件生成引擎

從libpcap獲取的資料包經過事件生成引擎,引擎首先對資料包頭做些合法性檢查,生成一系列事件,比如引擎收到一個TCP包會先檢查TCP頭的checksum是否正確,檢查透過以後引擎檢查包頭的標記位,如果是SYN標記引擎會啟動一個定時器並生成一個connection_attempt 事件,當引擎再收到一個對方的確認包時,引擎會關掉定時器並生成一個connection_established事件,如果收到一個RST包,引擎則會生成一個connection_rejected事件。這些事件都會被提交給上層的策略指令碼直譯器,如果使用者關心這些事件可以編寫策略指令碼定義相應的事件處理例程來處理。

在這一層,Bro還會對於一些應用層協議做更深層次的分析,比如對於HTTP協議,引擎會進一步分析資料包是請求還是回應、訪問的物件、請求的方法等資訊並生成相應的事件,比如http_request事件幷包含了相關的資料欄位。目前的最新版本軟體支援FINGER、FTP、HTTP、 IDENT、PORTMAP、SMTP等應用層協議的分析,隨著軟體的開發會有更多的應用層協議分析加入進來,Bro在這一層上實現了應用層的協議分析並向上層策略指令碼直譯器提供抽象出來的事件。

$ 策略指令碼直譯器

Bro的策略指令碼用於對事件生成引擎生成的事件進行分析處理,如果發現攻擊特徵引發相應的操作比如告警、記錄或生成新的事件。Bro的策略指令碼是用Bro語言編寫的類似NFR N-Code的全功能解釋執行的分析指令碼,Bro語言提供了豐富的資料型別、流程控制手段及許多有用的分析函式,從實現上功能上與N-Code非常相似甚至有過之。如此功能強大的指令碼語言可以對抽象出來的事件做充分細緻的分析,組合Bro事件生成引擎中應用層協議分析和 Bro指令碼的分析能力可以提供非常準確強大的入侵檢測功能

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-937921/,如需轉載,請註明出處,否則將追究法律責任。

相關文章