Snort VS Suricata

0x00 寫在前面

在網上查詢了很多關於Snort和Suricata的資料,沒有看到什麼針對兩者區別的分析文章。倒是在國外網站看到一篇,詳細對二者進行了測試,並對測試結果進行了整理和總結。文章比較老了,發佈於2011年,但是其中的某些測試結果還是挺有參考意義的。文章中的測試結果並不一定適用於Snort和Suricata目前的版本。據說Snort 3.0做了很多的改進,但是由於網上關於Snort 3.0的文章比較少,所以也未對3.0版本做研究。現將這篇文章翻譯如下,雖然文中的部分測試結果不適用於目前的版本,但是也有一定的參考價值。

0x01 描述

多年來,Snort(由SourceFire開發和維護)一直是開源入侵檢測/防禦系統(IDS / IPS)的實際標準。它的引擎結合了簽名,協議和基於異常的檢測的優點,並成為世界上應用最廣泛的IDS / IPS。

Suricata是由OISF(開發信息安全基金會)開發,它也是基於簽名,但是集成了創新的技術。該引擎嵌入了一個HTTP規範化器和分析器(HTP庫),可提供非常先進的HTTP流處理,從而能夠在OSI模型的第七層(應用層)上解析流量。

隨著越來越多的伺服器將網卡升級到10GB/40GB乙太網,對線路上的硬體進行計算密集型的入侵檢測越來越困難。Suircata是一款支持IDS和IPS的多線程入侵檢測系統,與傳統Snort相比,Suircata的多線程和模塊化設計上使其在效率和性能上超過了原有Snort,它將 CPU 密集型的深度包檢測工作並行地分配給多個並發任務來完成。這樣的並行檢測可以充分利用多核硬體的優勢來提升入侵檢測系統的吞吐量,在數據包的深度檢測上效果優越。並且Suircata可以兼容現有的Snort規則簽名,還增加了對ipv6的支持,已經逐漸成為傳統Snort入侵檢測系統的代替方案。

針對接收相同有效payloads的兩個平台進行了測試。基於這些測試,將討論結論以展示這兩種產品的優點和局限性。

0x02 概覽

0x03 環境和方法

平台

原文中測試環境都比較老:針對基於ESX VMWare伺服器上託管的Debian 5 Lenny分發的兩個相同平台進行了測試。另外,在2個測試平台上安裝了以下先決條件:

  • libpcap版本1.1.1
  • PCRE版本:7.6 2008-01-28
  • ZLIB版本:1.2.3.3

規則

使用了三套規則,如下:

所有規則都被激活了(甚至是默認被注釋的規則)。

配置文件

測試中使用的配置文件:

  • Suricata:suricata.yaml
  • Snort:snort.conf

評分方法

以下評分已用於評估測試結果:

  • 0:不符合標準或最低限度滿足標準
  • 1:符合標準
  • 2:超出標準(主要用於逃避測試)

另外,每個測試組都有一個優先順序。總和是通過加權加總數(SUM [給定組的優先分數的總和])來計算的。

捕獲

日誌文件用於分析:

  • Suricata:tail -f /var/log/suricata/fast.log
  • Snort:tail -f / var / log / snort / alert

Tcpdump / Wireshark用於追蹤惡意軟體和病毒。

測試中使用的工具

對於測試,使用了以下工具:

  • Scapy:偽造任何類型的數據包。此外Scapytain已被用來保存有效載荷和方便重播。
  • Netcat:將特定主機/埠上的有效載荷與echo一起發送
  • Hping:執行DoS
  • Nmap:執行來自多種類型的埠掃描
  • tcpdump:捕獲流量並分析它(例如過濾器)
  • tprep:重放捕獲文件
  • Hydra:暴力破解

0x04 測試結果

對Snort和Suricata進行了超過三十個單元測試,得分整理如下:

測試規則

這些測試旨在測試引擎根據規則觸發警報的能力(VRT :: Snort,SO規則和EmergingThreats)。

在一系列8次攻擊中,Suricata和Snort都在基於規則的基本攻擊檢測方面顯示了其能力。

  • 出於某些原因,規則文件中的某些規則會默認進行注釋,所以我們不得不手動取消注釋。
  • 由於語法識別問題,Suricata不會載入一些規則(處理了69個規則文件,成功載入了11326個規則,105個規則失敗)。Suricata目前正致力於在引擎中集成缺少的關鍵字(例如file_data,http_raw_uri)。
  • Snort有一個名為sfportscan的預處理器,它比Suricata的優勢是可以檢測Nmap埠掃描。Suricata已觸發警報,但沒有提示是埠掃描。

不規則的流量(不符合RFC)

這些測試旨在測試引擎面對非RFC兼容數據包的行為。在一組4次攻擊中,Suricata和Snort都未能檢測到不規則的流量。我不知道是不是因為免費規則的原因,但文件bad-traffic.rules是空的。

碎片化的數據包

這些有效payloads 是分片數據包,用於測試引擎重構和檢測攻擊企圖的能力。Snort的spp_frag3預處理器在一系列2次測試中隱射了死亡ping和nestea攻擊,它已經證明了它能夠重新構造數據包並成功觸發適當的警報。另一方面,Suricata只觸發了第二次攻擊的警報。

多次登錄失敗

這項測試測試了引擎根據服務檢測多個不良登錄的能力(例如,針對FTP的暴力)。Suricata嵌入了這種能力(例如flowint)。這是因為在Suricata上已經通過使用flowint進行了手動警報規則配置。規則如下:

alert tcp any any -> any any (msg:"Counting Failed Logins"; content:"incorrect"; flowint: username, notset; flowint:username, =, 1; noalert; sid:1;)alert tcp any any -> any any (msg:"More than two Failed Logins!"; content:"incorrect"; flowint: username, isset; flowint:username, +, 1; flowint:username, >, 2; sid:2;)

Suricata已經證明了它能夠檢測到針對FTP服務的多個不良登錄(vsFTPd)。警報已根據規則從第三次錯誤登錄中觸發。另一方面,Snort似乎基於閾值檢測多個不良登錄。

繞過技巧

這些測試旨在測試引擎利用諸如碎片,加密等方式規避技術檢測攻擊企圖的能力......

測試了15種繞過技巧。

Snort和Suricata都展示了他們檢測攻擊者是否能夠檢測誘餌攻擊的能力,即使在第七位,以及帶有碎片的Nmap掃描。

Snort似乎比Suricata更擅長探測某些繞過技巧,尤其是以下幾種:

  • 隨機URI編碼(非UTF8)
  • 目錄自引用(/./)
  • 預先安排長的隨機字元串
  • 假參數
  • 更改URL的大小寫
  • 使用Windows目錄分隔符()
  • 使用二進位值0x0b作為請求間隔符

另外,在我們的測試活動中,Suricata尚未檢測到JavaScript混淆。

惡意軟體和病毒

這些測試旨在測試引擎檢測惡意軟體和病毒的能力。

已經對14種惡意軟體和病毒進行了測試。Suricata比Snort有更好的檢測水平,Suricata和Snort都已經證明了它們檢測病毒的能力。

shellcode

這項測試旨在測試引擎檢測shellcode的能力。

在一組11個shellcode中,Suricata檢測到9個shellcode,Snort檢測到7個shellcode。

Suricata在檢測shellcode方面更好。

拒絕服務

這些測試旨在測試引擎面臨的拒絕服務時的檢查功能。

在一組3次測試中,Suricata和Snort都檢測到針對SSH和MSSQL服務的3次DoS嘗試。已觸發的警報主要來自Emerging Threats的規則。

客戶端攻擊

這項測試包括發送通常用於客戶端攻擊的惡意文件,以測試引擎觸發客戶端攻擊警報的能力。

測試結果表明,Snort比Suricata更好地檢測客戶端攻擊,Snort的檢測率為82%,Suricata檢測率為49%。

性能

未對性能進行測試,因為沒有多餘的CPU硬體。但根據這篇文章:

holisticinfosec.blogspot.com

「Suricata在多個CPU硬體的條件下運行可顯著提高性能「。

內聯/阻塞功能

這一點尚未經過測試。不過,根據AlienVault的說法,Suricata和Snort都兼容並具有相似的阻塞功能。

0x05 結論

針對Suricata和Snort進行了300多次測試。並非所有功能都經過了測試(比如IP / DNS信譽,性能......),但測試主要是為了測試兩款IDS的檢測功能。

Snort和Suricata都基於一套規則。大多數測試表明,VRT :: Snort和EmergingThreats規則是互補的,並且都需要所有攻擊類型的檢測進行優化。另外,Snort和Suricata都展示了他們基於規則簽名檢測攻擊的能力。

Suricata提供了Snort未來可以實現的新功能:多線程支持,捕獲加速器,但互聯網上的文檔較少。另外,由於不兼容(不支持某些關鍵字),Suricata不接受來自VRT :: Snort和EmergingThreats的一些規則。這些缺失關鍵字的問題應該在將來的Suricata版本更新中得以改善。

另一方面,Snort已經成熟。它仍然是一個非常強大的IDS / IPS,在互聯網上有多文檔資料,能夠正確檢測大部分惡意軟體和規避技術。它的預處理器對重構分段數據包非常有用。

狀態檢查特徵的比較表明,Snort和Suricata有不同的方法。Snort基於規則和閾值的檢測來跟蹤觸發規則的次數,而Suricata引入會話變數(例如通過flowint)來啟用計數器。這些變數可以配置手動規則(local.rules文件)用來觸發事件。Suricata的一個優點是它能夠理解OSI模型的第7級,這增強了其檢測惡意軟體的能力。Suricata已經證明它比Snort更有效地檢測惡意軟體,病毒和shellcode。

綜上所述,Snort仍然是生產環境中IDS / IPS的標準。它穩定,易於配置和,並且文檔資料健全。儘管如此,Suricata是一種新興的IDS / IPS,它可以革新檢測技術,並且Snort在將來的版本中肯定會實現其中的一些功能(支持多線程)。我們仍然會推薦Snort用於生產環境,但應密切關注Suricata,因為此結論可在不久的將來被快速更新。

0x06 寫在後面

原文中測試的Suricata版本為1.x的,snort的版本為2.9.0。目前Suricata的最新版本為4.0.4,Snort也已經發展到3.0版本了。如今二者的差異化還是有待研究。

目前一直在對比Snort和Suricata的方案,不過還是要根據企業自身的現狀,選取最合適的方案。

0x07 原文鏈接

Suricata VS Snort:Suricata-vs-snort - aldeid

推薦閱讀:

Suricata規則介紹、以及使用suricata-update做規則管理

TAG:IDS入侵檢測系統 | 網路安全 | 網路監控 |