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

编辑于 2018-03-08

文章被以下专栏收录