在这里插入图片描述

Snort是最初于1998年开发的开源入侵检测系统(IDS)/入侵防护系统(IPS)

Snort标志性格式的规则是整个威胁情报业的事实标准,它借用当时几款流行的开源工具(这些工具用于给网络流量指定唯一的特征,当特征满足时,则产生告警。在IPS模式下,如果希望,也可以丢弃或者阻止通信),提供了一种简单的规则定义语言。作为最早的全功能开源IDS平台,它在安全社区非常普及。普及性促使Snort成熟,但是对它的底层架构是极大的考验。这个架构在被设计的时候并不是针对这么大的需求量来设计的。

开发人员已经开始其他项目,以解决Snort架构的缺陷。Suricata很大程度延续了Snort的基本思想,但同时利用了现代硬件的优势,并支持LUA脚本语言,以支持检测更加复杂的威胁。相比之下,Bro采取完全不同于Snort和Suricata的方式来解决核心问题。

本文中,我们将以一个高的角度讨论这三者的差异,优势和劣势,以及何时以及如何从最佳实践的角度使用它们。

Snort与Suricata规则

Snort规则的简单性和灵活性对威胁研究者有很大的吸引力,这些研究者可以给已知漏洞创建Snort规则,并快速的检测其效力。正因此,在一二十年的时间里,创建了大量的Snort规则库。

虽然Snort规则编写相对简单,但这也使得为复杂条件编写规则变得越来越复杂。比如,编写识别流向特定IP地址的流量的规则相对简单,编写查找http/web流中请求特定URL的规则则变得复杂。编写查找http请求肯定回应的规则依然复杂。

随着规则变得更复杂和网络速度的增加,Snort的架构开始使有意义的部署变得更具挑战性。Suricata于2009年推出,旨在尝试克服其中的一些挑战。它从一开始就提出一种架构,以支持与高级威胁保持同步发展。

Suricata提供了与Snort规则的兼容性,但引入了多线程以更好的利用现代硬件。这从理论上在同一硬件上可以应对更快网络和处理更多的规则。Suricata还支持LUA脚本语言,以提供更大的灵活性来创建规则,从而实现使用传统Snort规则难以或无法实现的条件。

#
alert http $HOME_NET any -> $EXTERNAL_NET any Options:msg:”ET TROJAN
Possible Zeus GameOver Connectivity Check”; flow:established,to_server;
urilen:1; content:”|3b| MSIE “; fast_pattern:only; http_user_agent;
content:!”Accept-Encoding|3a 20|”; http_header; content:”Host|3a
20|www.google.com|0d 0a|”; http_header;
pcre:”/^Accept\x3a\x20\*\/\*\r\nAccept-Language\x3a\x20[^\r\n]+\r\nUser-Agent\x3a\x20[^\r\n]+\sMSIE\s\d+\.\d+[^\r\n]+\r\nHost\x3a\x20www\.google\.com\r\nConnection\x3a\x20Close\r\n(?:\r\n)?$/H”;
classtype:trojan-activity; sid:2018242; rev:4;

示例1:识

别GameOver Zeus僵尸网络连接的Snort/Suricata规则

最后,如果你在自己的硬件上安装这些解决方案,Snort和Suricata有一些小差异。Snort很容易安装,可用作许多架构的预编译软件包,并且有许多应用程序来简化这个过程。Suricata则相对复杂,它必须从源码编译。虽然这对经验丰富的Linux用户来说不是一个大障碍,但仍然值得一提。

Bro IDS

从技术上讲,自1995年以来,Bro一直处于发展中,但该项目在2010年美国国家科学基金会的资助下得到了更多的支持和关注。Bro因其独特的灵活性和能力而受到关注,现在正从“最佳保密”的状态发展成为任何安全团队武器库的标准组成部分

#
Bro Script to perform the same detection

event
HTTP::log_http(rec: HTTP::Info) {

if
( /www\.google\.com/ in rec$host && |rec$uri| == 1 ) {

if
( rec?$user_agent && /MSIE [0-9]+\.[0-9]+/ in rec$user_agent) {

#
Found the things, print message to stdout

print
fmt(“Host %s performed GameOver Zeus Connectivity Check. UID:%s”,
rec$id$orig_h, rec$uid);

}}}

示例2:使用Bro脚本识别Game

Over Zeus僵尸网络连接

Bro采用了不同于Snort和Suricata的方法。Bro使用Bro脚本而不是规则来定义网络流量。Bro脚本结构上类似C++语言,使熟悉C++的开发者可以更轻松地为复杂的网络事件编写条件。

Bro对信息的输出也采取了不同的方法。Snort规则是围绕检测的是异常这样的思想设计的,而Bro在其日志中提供了很多的灵活性,并不会断言输出始终是告警。

因此,Bro脚本不仅可以用于查找特定威胁和触发告警,也可以查找和记录任何你想要跟踪的事件。你是否想创建一个表来跟踪发送给每个用户的http响应代码?是否想记录每个上传的.xls文件?Bro被设计成监控网络元数据的瑞士军刀。因此,对于那些希望持续监控网络行为的人来说,Bro不乏热烈的追随者。

虽然Bro可以用作传统的IDS,但用户使用Bro来记录详细的网络行为更频繁,并且可以保留长期记录,包括:

1> 所有HTTP请求和结果

2> 自动记录所有DNS请求(除开DNS服务器),以确定用户是否正在访问备用DNS系统,该系统的响应可能与内部服务器不同

3> 与MAC和IP地址相关的表

4> 自动监控用户名及其相关的IP地址

这些数据在以前只能通过长时间的抓包得到。使用Bro收集元数据不仅比抓包更有效地存储信息,还能以数据包捕获无法实现的方式进行搜索、索引、查询和报告。数据可以导到到你选择的解决方案中,例如SEIM、Splunk产品,甚至是一个像ELK堆栈(Elastisearch, Logstash, Kibana)这样的开放数据仓库,或者宏大的数据池解决方案中。

最重要的是,随着威胁环境的变化,你可能需要跟踪你网络上更多类型的信息。Bro集成了多个协议解析器,允许用户多个事件。使用Bro脚本,更改现有脚本收集协议事件的关键数据,或者创建新脚本补充现有数据收集都很容易。

不过,这种灵活性是有代价的。像Snort或Suricata这样的基于规则的解决方案,在监控一般的告警方面更加有效。Bro的深度包检测使得它对执行这些类型的任务要求更多的资源,并且可能要求像基于规则的系统一样要求自身的系统以线速执行。

此外,尽管Bro已经获得了更多的支持和关注,但Bro脚本携带的可用威胁检测规则仍然比Snort/Suricata要少,并且新的威胁检测规则通常会以Snort格式出现,尽快这种情况可能会随时间而改变。因此,如果你在寻找只是提供基本IDS功能的系统,那么与Snort规则相兼容的系统可能是可取的。

最后,安装Bro可能会极具挑战性,并且往往需要丰富的专业知识才能有效部署,Bro社区正在努力使这个过程简单化。不过,与Snort和Suricata相比,Bro的设置和维护对于有经验的用户来说最多也是具有挑战性。

保持平衡

一般地讲,每个解决方案都有其优势。基于规则的解决方案对已知威胁非常有用,因为它们往往与Snort规则相兼容,而Snort规则是威胁情报最大公共和私有存储库类别之一。Suricata可实现高性能流量检测,这意味着你可以处理更多的规则来应对大流量。最后,你无法检测到不可见内容,这样有利于性能提高。

另外,Bro提供的质量数据为网络基线、主机和服务分析、被动仓库收集、策略实施、异常检测和威胁搜索提供了原始材料,并为识别隐藏在你网络中的威胁提供了基础。它还提供详细的取证信息,以便在事件发生后回答关键问题:什么行为造成了破坏,我在将来要如何阻止它?以及还有哪些设备与受损设备进行了互动,以便我可以确定风险等级并给这些设备建立防护措施。

如果考虑Pereto原则(80/20规则),80%(或更多)事件将由在Suricata系统中很容易识别甚至被Snort规则阻塞的已知威胁引起。这些已知威胁往往不会成为最昂贵问题的根源。20%(或更少)的问题来自以前未知的威胁,这些威胁没有现成可用的特征。如果你的组织受到针对性攻击,则有可能来自这些类型的威胁,并且通常这些威胁更具破坏性且成本更高。

理想情况下,网络监控的最佳实践将包括一个Suricata应用,以快速识别已知特征的攻击。同时结合Bro以维护重要数据,这些数据不仅提供对Suricata产生的告警进行适当分类的上下文,还提供不仅包括事件本身,也包括整个威胁的全面时间表:什么导致了该事件,威胁产生之后会发生什么。

最后,将Suricata和Bro的输出关联起来作为猎杀威胁的起点至关重要。猎杀威胁假定你从一个理论或者假设开始,开始搜索你环境中的可用信息,以确定是否存在逃避检测的威胁。

这个过程可以从查看重要资产开始,以观察谁正在以及如何访问它,最终确定是否存在需要调查的异常。最基本的出发点之一是,你关注的系统可能会受到损害。如果使用Suricata的告警作为起点,可以以Bro中记录的与该告警相关的会话为支点,然后扩展到该事件之前和之后的连接,以查看是否有任何其他网络通信加强或解释该事件。

最后,将两种工具结合起来可以提供最好的解决方案。它提供准确的告警,划分告警所需的相关数据,并专注于最高优先级事件。最后,它提供积极威胁检测的基础,以确保高价值资产的有效性。

在这里插入图片描述

图1:Snort/Suricata与Bro优势互补

原文地址:https://bricata.com/resources/white-paper/bro-vs-snot-or-suricata/

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐