Hyperscan與Snort的集成方案


概況

Hyperscan作為一款高性能的正則表達式匹配庫,非常適用於部署在諸如DPI/IPS/IDS/NGFW等網絡解決方案中。Snort (https://www.snort.org) 是目前應用最為廣泛的開源IDS/IPS產品之一,其核心部分涉及到大量純字符串及正則表達式的匹配工作。本文將重點介紹如何將Hyperscan集成到Snort中來顯著提升Snort的總體性能。具體集成代碼已公開在 https://01.org/node/4298。

Snort簡介

如圖1所示,Snort主要分成五個部分。報文解析器負責從不同的網絡接口接收到報文,並對報文內容進行初步的解析。預處理器是對解析過的報文進一步處理的插件,其功能包括HTTP URI歸一化,報文整合,TCP流重組等。檢測引擎是Snort當中最為核心的部分。它根據現有的規則,對報文數據進行匹配。匹配的性能對Snort總體性能起着至關重要的作用。假如匹配成功,則依據規則中定義的行為通知日志及報警系統。該系統可輸出相應的警報或者日志。用戶也可以定義輸出模塊來以特定形式(例如數據庫,XML文件)保存警報或日志。

Hyperscan 的集成


如圖2所示,Hyperscan與Snort的集成主要集中在以下四個方面:

純字符串匹配

用戶可以在Snort規則中定義匹配特定的字符串,並在相應報文中尋找該字符串。Snort中采用了Boyer-Moore算法進行匹配。我們用Hyperscan對這一算法進行替換以提升匹配性能。

PCRE匹配

Snort中使用了PCRE來作為正則表達式匹配的引擎。Hyperscan兼容了PCRE的語法規則,但不支持少數回溯及斷言語法。但是Hyperscan本身自帶有PCRE的預處理功能(PCRE Prefiltering),可以通過對PCRE規則進行變換以兼容Hyperscan。實際規則產生的匹配是變換后的規則所產生匹配的子集。因此可以使用Hyperscan進行預先掃描,若不產生匹配則實際規則也無匹配。若產生了匹配,可以通過PCRE的掃描來確認是否有真正的匹配。由於Hyperscan的總體性能高於PCRE,Hyperscan的預先過濾可以避免PCRE匹配帶來的過大時間開銷。

多字符串匹配

Snort中另外一個重要的匹配過程是多字符串的匹配。多字符串的匹配可以快速過濾掉無法匹配的規則以減少需要逐條匹配的規則數從而提升匹配的性能。Snort中使用了Aho-Corasick算法進行多字符串的匹配。我們用Hyperscan替代了這一算法並且帶來了顯著的性能提升。

Http預處理

除了引擎的匹配算法的集成,我們在預處理器中也添加了Hyperscan。在做Http預處理時,我們利用了Hyperscan搜索相關關鍵字來進一步加速預處理的流程。

性能數據

       我們選取了Snort自帶的VRT 規則(8683條)作為測試規則,同時以存有真實網絡流量信息的PCAP文件作為輸入進行測試。圖3展示了在Broadwell-EP平台下,原生Snort和經過Hyperscan加速的Snort在單核單線程下的性能對比。我們可以看到,Hyperscan極大提升了Snort的匹配性能,總體性能約是原始Snort性能的6倍。另外,我們對原生Snort與經過Hyperscan優化后的Snort在內存消耗方面進行了比較。由於原生Snort依賴於Aho-Corasick算法,需要將所有規則轉化成Trie樹結構,因此占用較大的內存。而Hyperscan擁有自身優化過的匹配引擎進行匹配,大量減少了匹配過程中對內存的消耗。如圖4所示,在這個測試中,總體上原始Snort所占用的內存是經過Hyperscan優化后的Snort的12倍。

總結

        經過Hyperscan集成后的Snort不管在總體性能還是內存消耗上都遠遠優於原始Snort。由此,Hyperscan展現了大規模規則匹配的強大能力,非常適用於以規則匹配為核心的DPI/IDS/IPS/NGFW等產品中。

原文:DPDK開源社區

 

 標簽: hyperscanpcresnort正則匹配正則表達式留下評論


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM