NSM和入侵检测掌握IDS规则和警报的指南

第1章:网络安全监视简介

再次问好!我是托尼·罗宾逊(Tony Robinson),那个您可能会或可能不会怀疑他是否只是在那里写书和提供漫画救济的家伙。最近,我被要求撰写有关如何解释IDS / IPS事件的指南。但是在到达那里之前,我们必须要进行一些基础工作。

在本指南中,我们将介绍什么是网络安全监控,什么是IDS和IPS,如何解释Snort和Suricata的规则,当今最流行的IDS / IPS平台是什么,讨论阅读和分析IDS警报,如何做出判断关于基于支持证据的IDS / IPS警报的有效性,讨论必要时用于调整规则集和减少噪声的一些选项,最后但同样重要的是,我将为您提供一些针对NSM的预先构建的Linux发行版,以便您可以自己尝试。因此,既然我们已经处理了议程,那么让我们深入研究它。

 

网络安全监视(或简称NSM)是一种收集和/或分析网络流量以用于故障排除,或检测和故障排除异常(包括可能的威胁或正在采取的恶意操作)的实践。

 

NSM通常包含多个组件,但是为了简单起见,我将它们分为四类:被动收集,Netflow,完整数据包捕获(FPC)和入侵检测/预防系统(IDS / IPS)。

1.1:被动收集

被动收集是收集在网络段上观察到的某些网络协议请求和/或响应的操作。收集的数据可以是完整的协议事务,也可以只是部分收集。

 

被动收集的一些示例包括来自客户端和服务器的HTTP标头,SSL证书,DNS查询和响应,LDAP查询和响应等。一些能够执行被动收集的开源软件包括passivedns [1],HTTPry [2],Bro [3]和Suricata [4]

扫描二维码关注公众号,回复: 11559716 查看本文章

 

被动收集解决方案可以用于什么?假设您收到威胁情报报告。该报告可以提供给定威胁的基于网络的指标的列表。使用该列表并从网络中被动​​收集信息,您想知道您的网络或企业是否受到报告的威胁的攻击或破坏。

威胁报告中的网络指示器可能包括诸如SSL证书字符串,HTTP用户代理字符串,与战役相关联的DNS域之类的内容。您可以查询网络的被动HTTP,被动DNS和SSL被动收集日志以追溯搜索这些折中指标,以确定您的组织是否曾经受到这些攻击者的攻击或破坏。

1.2:Netflow

网络流或简称为“ Netflow”,由有关在一部分网络上观察到的各个连接的元数据组成。Netflow不关心单个数据连接/流的实际内容(流可以是TCP,UDP和/或ICMP),而是关心有关连接本身的数据,例如源和目标IP地址,源和目标端口(如果是TCP或UDP),已发送和/或已接收的数据包数量,已发送和/或已接收的字节数,连接持续时间等。除了记录此信息外,每个单独的数据连接或流均已指定流ID为NSM分析师提供跟踪和易用性。具有netflow收集功能的一些开源工具包括Bro,Suricata,nTop [5],SiLK [6]和Argus [7]

 

可能有人会想,如果您自己没有传输实际的内容,则有关连接的信息有什么用?如果您近年来一直关注国家安全新闻,那么您可能会熟悉Edward Edward Snow的漏洞利用,以及他如何揭露美国情报共同体(NSA)使用的许多元数据收集程序。这些程序或显示的文件很多都提到“元数据”。元数据通常被定义为“关于数据的数据”。对于电话,这可能是通话时间和/或观察到的电话号码。对于数据文件,可以是文件名,文件大小,文件的魔术标识符(例如,文件的类型是jpg,png,exe,txt等)以及创建文件的时间戳,最后访问和最后修改。元数据允许分析师通过查看有关正在传输的数据的信息来构建生活模式和/或确定联系。您可以推断出连接,也可以暗示重要的链接,而无需实际拥有对话的所有内容或实际上不知道文件的内容。

 

回到流程数据中,netflow允许您观察可能指示网络问题或恶意行为的模式。例如,如果您观察到一个100mb的大型数据连接,从而使您的网络处于闲置状态,那么可能值得仔细研究一下。什么时候建立连接?什么是src / dst IP地址对?使用了哪些端口?另一个示例可能是观察到网络中的主机每30分钟在该点上发送一个128字节的连接。这可能是信标行为,您可能会观察到网络上的恶意软件“回调”到Internet上的命令和控制主机。除此之外,流数据并不需要很大的空间(相比而言,捕获完整的数据包),这使得在较长时间内保留Netflow数据变得更加容易。

1.3:完整数据包捕获(FPC)

完整数据包捕获(简称FPC)被认为是网络安全监视的圣杯。顾名思义,FPC捕获给定网段上的所有流量,并将其存储到磁盘中以供以后检索。可以将它视为所有通过网络一部分的流量的记录器。这使您能够提取数据包捕获并对其执行任何操作-测试IDS警报,分析其Netflow统计信息,执行文件雕刻,针对它们执行被动收集分析等。

 

尽管完整的数据包捕获非常有用,但是设置起来非常麻烦,并且需要大量的磁盘空间来存储,尤其是长时间的存储。例如,让我们考虑监视100%充分利用的100mbps网络链接。每秒100兆位转换为每秒12.5兆字节。每分钟只有60分钟,一小时有60分钟,一天有24小时,因此我们执行以下简单计算来确定一天的存储需求:

 

12.5 * 60 * 60 * 24

 

因此,如果我们乘以12.5 * 60,就可以得到750MB的磁盘空间,以便在完全利用的100Mbps链路上存储60秒的网络流量。将750乘以60再乘以得到45,000MB。将其除以1024,就得到43.95 GB。您需要大约45 GB的磁盘才能在完全利用的100Mbps链路上存储一小时的流量。最后,取该数字43.95乘以24,则大约为1055 GB。再次将其除以1024,将得到大约1.03 TB。您将需要超过1TB的磁盘空间来存储一整天完全利用的100Mbps链路的流量。仅仅一天,这不考虑将其存储在数据库中以使其能够被查询,文件头占用额外的空间,将转储分为可管理的块等。

 

尽管FPC在调查警报,事件和可能的入侵方面非常有帮助,但是由于涉及的成本和维护成本过高,您会看到非常多的企业(甚至部分实施)实施它的可能性很小。一些开源的全包捕获平台包括netsniff-ng [8],OpenFPC [9]和Moloch [10]

1.4:IDS和IPS

现在,我们将重点放在IDS和IPS上。IDS是入侵检测系统的简写,而IPS是入侵防御系统的简写。IDS被动地分析网段上的流量。如果网络流量符合规则中定义的某些条件,则会发出警报(并通常记录警报)。一些系统还将捕获触发规则的一个或多个数据包。

 

IPS系统与IDS系统的工作方式非常相似,不同之处在于,它们不对流量进行被动监控,而是放置在某种网络阻塞点上(例如,可能在骨干交换机和面向Internet的防火墙之间,或者在两个骨干交换机之间,等等),流量必须通过IPS设备。这允许IPS设备实际丢弃符合规则的流量,从而允许IPS防止网络攻击(除了生成警报,记录警报和/或与该警报关联的数据包之外)。

虽然能够防止网络攻击听起来像是一项了不起的功能,但是,如果您的IPS使用的规则或签名不正确,则IPS可能会严重影响网络运行并丢弃其他合法流量。因此,测试,调整和持续维护是IPS部署的要求。IDS和IPS系统都需要不断的维护和保养,以确保它们不会产生“误报”,也不会针对其他合法流量发出警报。误报可能是由于签名不正确造成的,并且可能导致警报疲劳,由于其“嘈杂”,导致安全分析人员忽略了其他重要的IDS警报。

就像对待故事“哭狼的男孩”一样思考警觉疲劳。如果您从可能产生误报的系统中获得足够的警报,则分析人员可能会忽略该系统。这可能导致由于分析师完全忽略IDS而错过了真正合法的攻击。

 

如今,大多数IDS和IPS解决方案都是基于签名的。一些公司会说它们不是签名驱动的,而是说它们是“规则驱动的”。规则和签名只是轻微的分离度。底线是,如果没有规则或签名,则您的IDS或IPS只会让不受挑战的未知恶意流量通过。因此,从现在开始,将IDS / IPS规则和IDS / IPS签名视为可互换的术语。

 

最著名的开源IDS / IPS项目是Snort [11]和Suricata。但是,如果我至少不讨论兄弟,我将被解雇。

 

您可能已经看到,我在其他NSM功能和角色中也提到过Bro。Bro在技术上被归类为IDS,在某种程度上,它适合该功能,但实际上与Suricata,Snort或其他基于签名的IDS / IPS平台并没有什么不同。Suricata,Snort和大多数其他IDS / IPS平台是签名和规则驱动的,而Bro主要是异常驱动的。

第1章:网络安全监视简介

Bro具有独特的脚本语言,可让您定义要在网络流量中寻找的某些参数,这些参数在某些情况下可以像基于签名的检测一样起作用,并且在满足条件时可以采取某些措施。到目前为止,Bro的最大优势在于它是一个网络监视和被动收集金矿。新近编译的bro可以检测非标准端口上的协议标语,收集HTTP客户端和服务器标头,收集DNS请求和响应,IRC,SMTP,SSH,SSL证书,LDAP / Active Directory,类似Netflow的网络统计信息等等。

 

Bro需要特别注意的一点是,执行所有这些解析,协议检测和其他各种功能需要大量的CPU和内存。Bro比Snort或Suricata占用更多的CPU和内存,并且不旨在作为IPS来运行。它不应在生产网络上内联运行,而应从网络分接头,跨接端口或离线数据包捕获分析中运行。

第2章:IDS和IPS平台

在本章中,我们将更深入地讨论IDS和IPS平台。本章将主要关注Snort和Suricata IDS / IPS平台,因为它们很可能是您在大多数企业网络中都会遇到的平台,但我们还将讨论Bro以及一些特定于供应商的解决方案,例如FireEye,Palo Alto Networks和Checkpoint IPS。

 

2.1 Snort

Snort IDS / IPS平台最初于1998年发布,是Martin Roesch的tcpdump克隆版本。Marty后来发现,可以将他的tcpdump克隆配置为在网络流量中查找模式,并在这些模式上触发警报。碰巧的是,人们愿意为此功能付费,也愿意让某人管理编写模式(现称为“规则”)以检测企业网络上的恶意流量。因此Sourcefire和VRT(漏洞研究小组)诞生了。从那时起,Sourcefire被Cisco收购,并且Sourcefire中的许多技术和创新都集成到Cisco的安全产品中。

 

Snort的主要功能是入侵检测,通过网络交换机跨端口馈送或专用网络分路器检查流量,并针对从该流量中观察到的恶意或异常流量生成警报。此外,可以以串联(IPS)模式部署Snort,在这种模式下,流量必须经过传感器上的两个网卡,Snort如果配置为可以主动丢弃恶意数据包。

 

尽管这些是Snort的主要功能,但还有许多其他功能可用来对抗网络规避技术,例如fragrouting [12],重叠的IP片段[13],重复的TCP片段[14],会话拼接[15],低TTL [16]等。可以将Snort配置为处理IP数据包分段,TCP会话流重组,应用程序层协议解析和编码数据解码等。删除IP片段,TCP / UDP流重组,应用程序协议解析等统称为网络流量标准化。此过程是自动完成的,并在根据IDS签名评估流量之前执行,以确保snort在针对网络流量评估任何IDS规则之前能够看到完全重组,解码和去混淆的流量。

 

Snort IDS / IPS软件仍是开源的,并且可能会保留一段时间。尽管Snort本身是开源的,但规则本身却处于不同的许可证下-如果您想要涵盖最新威胁,则需要购买价格可能从30.00(单独,非企业使用)到400.00的订阅。每个传感器(企业使用)。如果您可以将服务延迟30天,可以通过在snort.org上注册免费获得其中一些相同的规则。TALOS规则集(由snort.org提供的规则集)维护良好,提供的大多数规则具有不言自明的警报消息,这些消息描述了触发的流量和/或引用了指向您可以访问的网站的元数据信息。

 

除了Snort的主要功能为IDS / IPS,和进行雕刻文件从网络流的内置归一化函数,Snort的也有实验支持[17]对于协议的一个主机(HTTP,FTP,SMTP,和SMB到仅举几例),以及通过新的OpenAppID预处理程序来识别网络应用程序的实验性支持[18]

 

Snort的大多数缺点都围绕着它的易用性或缺乏它。您选择管理传感器使用的规则的选择是手动修改配置/规则文件,还是使用令人困惑的命令行工具。维护Snort IDS / IPS传感器上的规则的推荐工具是pullpork 19 perl脚本。尽管此脚本功能强大且具有大量强大的功能,但它笨拙且需要花些时间来发挥其全部IDS规则管理潜力。

 

除了规则管理的复杂性外,Snort对于默认情况下可用的警报具有有限的输出机制。您可以输出到syslog,警报文本格式(吸入自己的基于文本的日志),以特殊的pcap格式输出导致警报触发的数据包,最后但并非最不重要的是Unified2。Unified2是二进制日志格式,其理由是Snort以这种二进制格式输出警报更加容易和快捷。

 

那么,您应该如何将这些二进制日志转换为便于分析人员使用的东西?第三方解析器。其中最受欢迎的是Barnyard2 [19]。Barnyard2支持将Unified2文件转换为多种不同的输出格式,其中最有用的可能是解析Unified2数据并将其转换为SQL以便存储在许多不同类型的数据库引擎(例如MSSQL,Oracle,Mysql)中的输出格式。等),用于基于Web的界面来查看您的警报和/或pcap。除了barnyard2之外,还有一个名为u2json [20]的较新的解析器,该解析器将Snort的二进制Unified2格式转换为JSON,以便与SIEM(例如Splunk)或开源ELK(Elasticsearch,Logstash,Kibana)堆栈集成。

关于Snort的最后一个缺点是很难有效地进行扩展。默认情况下,Snort不是多线程的。为了有效地将其扩展到超过1gbps的网络流量检查吞吐量,您必须运行多个snort进程,安装pf_ring,编译Snort的数据获取库以使用pf_ring,然后告诉snort绑定哪些CPU内核[21]。而且,如果您非常疯狂,想在IPS模式下完成所有这些操作,则必须使用metaflows组专门构建的pf_ring [22]。自2005年以来一直在开发的Snort 3.0,在撰写本文时,经过3年的开发,Snort 3.0于2014年首次发布Alpha版,目前仍处于Alpha发布状态(截至7/2017为Alpha 4)。因此,即使它承诺具有本机多线程功能(还有许多其他改进),也不要指望它很快就可用。

2.2Suricata

Suricata最初于2009年发布,是开放信息安全基金会(OISF)的产品,部分资金由国土安全部和海军的太空与海军作战系统司令部(SPAWAR)资助。Suricata的许多功能几乎与Snort相同-它具有相似的规则语言,相似的规范化功能(例如IP碎片整理,tcp流重组,重复/重叠段/片段的处理,应用程序层协议解码和模糊处理等)甚至包括对snort输出格式的支持,以便与打算与Snort一起使用的大多数Web应用程序和工具兼容(例如,unified2输出,与barnyard2兼容以及旨在显示Snort IDS警报的各种应用程序)。

 

虽然规范化功能对于保持检测IDS / IPS逃避技术的能力很有意义,但其他功能更多是为了向后兼容,以确保Suricata和Snort之间的某种程度的互操作性,而无需重新培训一群安全分析人员。了解新的IDS / IPS平台的来龙去脉。

 

尽管Suricata与Snort保持了许多兼容性,但Suricata引入了许多功能。默认情况下,Suricata是多线程的,这意味着扩展Suricata以便检查大型,数千兆位网络上的流量要容易得多。Suricata还支持使用图形卡来帮助卸载和扩展网络检查。

 

除了可扩展性之外,Suricata还具有比Snort记录更多数据的能力-默认情况下,Suricata支持记录DNS查询,HTTP标头和正文请求和响应,类似netflow的数据,SSL证书信息,并且还可以提取网络流中的文件,并将它们存储到磁盘(与Snort不同)。

最后,关于输出选项,Suricata有几个选项。它支持统一2输出,例如支持Snort工具和输出选项的Snort,但除了统一2,Suricata支持在“ eve.json”文件中输出到JSON。这使Suricata可以轻松轻松地集成到大多数SIEM中,包括ELK堆栈。

尽管Suricata与Snort类似,并且所使用的规则语言几乎相同,但存在一些兼容性问题,并且与Snort略有不同,这使Suricata与VRT规则集不兼容[23]。此外,这只是个人观点,但是VRT规则集比新兴威胁更为井井有条(与VRT / TALOS规则集不同,它有免费版和付费版),这是建议与Suricata一起使用的推荐规则集。有许多旧规则尚未被修剪或更新,许多规则没有引用URL或CVE编号或它们检测到的东西以及它们基于什么的背后的任何推理。但是,在他们的辩护中,我从新兴威胁小组的成员那里得知,规则集的清理和重组已列在待办事项中,有关新规则的建议通常要求提供描述性警报消息,并提供参考URL供用户理解警报更好。

除了提议的规则清除之外,Suricata还支持使用pullpork规则管理器根据部署的需要来修改,启用,禁用和更新规则集,以及Stamus 网络开发的Scirius 25 Web界面。

 

除了规则集和规则语言的工作方式不同之外,Suricata配置文件还基于YAML。使得配置文件与Snort的.conf文件略有不同。幸运的是,在配置文件中到处都是注释,这些注释描述了可用的选项以及某些配置选项可以执行的操作,从而轻松地从Snort的配置文件格式过渡。

2.3:特定于供应商的解决方案

除了Snort和Suricata,还有其他几种特定于供应商的IDS / IPS解决方案,例如FireEye,Palo Alto Networks,Checkpoint IPS和其他几种解决方案(这绝不是IDS / IPS供应商的详尽列表)。FireEye的IDS解决方案本质上是一个严格维护的Snort部署(不可用户修改),而PAN,Checkpoint和其他供应商则使用他们自己的解决方案。这些解决方案的大多数优点是,它们通常是专业级的,并由相对较大的企业安全公司提供支持,并且得到了良好的支持,以便客户根据需要获得有关部署问题,误报和/或错误的帮助。由于产品需要接受质量检查,因此在大多数情况下,硬件在售出之前都经过了质量测试,

另一方面,Snort和/或Suricata的优点在于您知道检测的工作原理以及签名/规则的外观。使用这些替代的IDS平台,您绝对不知道它们如何执行检测或它们的签名是什么样。您只需要接受他们的话,即他们已涵盖X事物并以其面值接受,因为它们是封闭源系统。

对于开源产品,软件本身是免费的,但支持也是免费的。这意味着,当您遇到问题时,您要么独自一人,要么是社区中其他用户的意愿,或者是开发人员一时的求助。他们可以选择帮助您与否。在大多数情况下,可以帮助您解决开源项目中的问题的志愿者是没有得到报酬的志愿者。不能保证您会及时获得帮助。不仅如此,您没有性能保证,也不保证该软件将与您选择用来运行该软件的硬件或操作系统兼容。这些只是休息。您要么为硬件和支持付费,要么自己运行并解决问题。没有回旋的余地。

2.4:哪个平台最好?

这是一个充满挑战的问题。我能给出的最佳答案是“取决于情况”。您当前的NSM部署是什么样的?您需要什么水平的检查吞吐量?您是否需要确保IDS / IPS软件始终可用?如果您选择运行开源IDS / IPS软件,您是否有熟悉某些怪癖或错误的分析师?您的分析师知道如何编写Snort / Suricata规则吗?你的预算是多少?所有这些因素都会对当时最适合您的解决方案产生一些影响。这里提出的每个解决方案都有成本,无论是需要花费时间和人力来维持的运营支出,还是需要大量资金来购买已包含成本支持的解决方案的资本支出。

 

如果我必须从头开始开发全新的NSM部署,并且只有我可以选择的开源IDS部署,则由于该项目具有大量功能和可伸缩性,因此我会心动地部署Suricata。如果我有商业解决方案的预算,我会考虑分析Gartner [24]和/或NSS Labs [25]报告,以了解不同的NSM供应商在性能和/或价格上的差异。请注意,尽管Gartner和/或NSS Labs的结果并不完全完美(也无法以任何便宜的方式获取其报告),但它们是业界目前衡量商业NSM产品性能的最佳工具。

第3章:Snort和Suricata规则解剖

本章旨在更好地理解Snort和Suricata的规则剖析。两种产品之间无论有何区别,都将进行讨论和注明。

 

 

3.1规则标题

Snort和Suricata规则由两部分组成:规则标头(如上图所示)和规则主体。规则的标头部分定义规则适用的IP地址,端口,协议和方向。此外,标头还定义了当规则的所有条件都为真时采取的操作。这是规则标头的示例(也如上图所示):

 

警报tcp $ HOME_NET任意-> $ EXTERNAL_NET $ HTTP_PORTS

 

上面的规则标题中的文本“警报”定义了当规则主体和标题的所有条件都满足时,我们希望该规则采取什么动作。当满足规则条件时,您可以告诉Snort或Suricata采取许多不同的操作,所以让我们分解一下:

 

警报-只需登录一个警告你配置的任何输出格式(如系统日志,unified2,警报日志,eve.json [Suricata]等)。通常,该AT A MINIMUM包含规则在其规则主体中配置的消息,源和目标IP地址对,TCP和/或UDP端口(如果流量为TCP或UDP),并且在Unified2和/或情况下前夕。json也可以记录触发事件的网络数据包。

 

通过-如果规则的所有条件都为true,则转发数据包并且不生成警报。此规则操作可用于辅助IDS / IPS调整,这是消除误报的高度针对性和准确的方法。假设您不想取消规则或设置阈值,或者对于已知的网络中正常运行的给定连接,规则误报很多,但您只是不想禁用该规则,您可以使用传递规则专门针对该对IP地址和/或端口/协议对或组,仅忽略规则主体描述的流量。

 

drop- 如果规则的所有条件都为true,并且传感器处于IPS模式,则配置为能够丢弃流量,丢弃流量并生成警报,与为“警报”操作配置的规则相同。

 

拒绝-如果满足规则的所有条件,则会发出警报(与“警报”操作相同),并且传感器将尝试将拒绝数据包发送到连接的源和目标。如果连接是TCP,则此数据包将是TCP重置。对于所有其他网络协议,将发送ICMP错误数据包。此外,如果传感器是串联的,则触发该规则的数据包或网络流量将被丢弃。

 

日志-如果满足规则条件,则不生成警报,只需记录触发规则的数据包即可。这是仅Snort的规则操作,根据我的经验,永远不会使用。

 

激活/动态-激活规则会生成警报,并用于打开动态规则。这些是仅Snort的规则操作,根据我的经验,永远不会习惯。如果一个规则“触发”或用作另一个规则的标准对您来说听起来像一个整洁的主意,则您应该考虑研究“ flowbits”规则主体选项,因为它的工作方式类似。

 

丢弃-假设有人查看了日志规则操作并决定应用传感器以IPS模式运行。但是,它将丢弃该数据包,并且不会对其进行记录。这是一个坏主意。您不想这样做,因为它可能会使网络故障排除成为噩梦。想象一下,在IPS模式下运行的传感器具有以下规则之一,并且它在无恶意流量时处于静默触发状态。你知道我要去哪里吗?以我的经验,我从未见过使用此规则操作,这可能是有充分理由的。这是仅Snort的规则操作。

 

自定义操作-Snort允许您定义自定义操作,如果您的规则触发,则该自定义操作将执行特定操作。如果要查看如何定义规则操作,请参阅《 Snort用户指南》的第3.2 [26]节。但是,根据我的经验,我没有看到很多人使用自定义操作,通常Snort提供的功能绰绰有余。

 

除了每个平台支持的规则操作外,您还需要了解以下事实:默认情况下,某些规则操作优先于其他规则操作。假设您有触发两个规则的网络流量,其中一个是通过规则,另一个是丢弃规则。Snort如何知道应该首先应用哪个规则操作?默认情况下,Snort按以下顺序应用规则操作(根据snort用户指南的第1.4.4节[27]):

 通过

删除(包括sdrop 和拒绝规则)

警报

日志记录

<自定义规则操作>

 

默认情况下,Suricata按以下顺序应用规则操作[28]

 通过

下降

拒绝

警报

 

因此,在上述情况下,通过规则将在丢弃规则之前应用,这意味着流量流将通过IPS而不会被丢弃(对于Snort和Suricata而言)。

这就是为什么通过规则在调整误报时非常有用的原因,因为默认情况下,它们会在其他任何警报操作之前应用。查看Snort [29]和Suricata [30]文档,以查看所有可用的规则操作。

3.2:规则主体

如果规则标头描述了要应用哪些IP地址,端口和/或协议规则,则规则主体是描述Snort或Suricata在给定流量流中寻找的内容的部分。有大量不同的修饰符和方法来描述您在网络流中寻找的内容。您可以做所有事情,从描述网络连接中有多少数据(例如isdataat),执行字节检查和/或按位操作(byte_test),特定内容匹配(通过content body选项)以及各种修饰符来描述数据应该看起来像(例如,不区分大小写的nocase,内容匹配的http_header仅限于HTTP连接的标头等)。如果您在网络流量中观察到一个不变的不变常数,

 

我可以花几天的时间来描述Snort和/或Suricata可用的所有规则主体选项,但我不会因此而受到限制。我们将改为执行以下操作:

 

-如果您对Suricata支持的规则选项的完整列表感兴趣,请在线获取官方文档[31]。特别是,您将需要查看第4章[32]。OISF执行了一项艰巨的任务,以确保对Suricata规则可用的规则主体选项进行了充分记录。

 

-如果您对Snort支持的规则选项的完整列表感兴趣,请查看《 Snort用户手册》[33]。特别是,第3章[34]包含了所支持规则选项的详尽列表。

 

-OISF(作为第4章的一部分)拥有有关Snort和Suricata [35]之间差异的大量文档,尤其是在编写IDS签名的领域。

 

让我们一起分析一些IDS规则,以便您可以更好地了解规则的工作方式。

 

首先,让我们从Snort TALOS规则集中选择一些内容。这条规则有些复杂,但是请遵循,最终我会说得通:

警报tcp $ EXTERNAL_NET任意-> $ HOME_NET $ HTTP_PORTS(消息:“服务器-WEBAPP趋势科技云安全智能防护服务器admin_notification.php命令注入尝试”;流:到服务器,已建立;内容:“ / admin_notification.php”; fast_pattern:仅; http_uri; content:“ spare_”; nocase; http_ client_body; pcre:“ /(^ |&)spare_(Community | AllowGroupIP | AllowGroupNetmask)= [^&] *?([\ x60 \ x3b \ x7c] | [\ x3c \ x3e \ x24] \ x28 |%60 |%3b |%7c |%26 |%3c%28 |%3e%28 |%24%28)/ Pim”;元数据:策略安全性ips下降,服务http;参考:cve,2016-6267; classtype:web-application-attack; sid:39913; rev:1;)

那是很多文字,不是吗?这条规则是做什么用的?当我想了解规则的用途时,请查看此规则的msg字段,这是我通常首先开始的地方:

 

msg:“服务器-WEBAPP趋势科技云安全智能防护服务器admin_notification.php命令注入尝试”;

 

根据msg字段,这是检测尝试利用趋势科技云安全智能防护服务器Web应用程序的攻击的规则。具体来说,这涵盖了尝试利用Web应用程序使用的admin_notification.php文件中的命令注入漏洞的攻击。命令注入漏洞是通常与Web应用程序相关的漏洞,用户在其中输入了可以利用其执行系统命令38的参数或变量。

 

在规则的结尾,我们看到了以下字符串:

元数据:策略安全性ips删除,服务http;参考:cve,2016-6267; 类别类型:网络应用攻击;sid:39913; 转:1;

 

首先让我们讨论元数据选项,因为这里有很多要解压的内容。您在该标记中首先注意到的是文本策略security-ips放置,security-ips将此规则标识为“基于连接的安全性”基本规则集的一部分。Pullpork规则管理器(如上所述)可以使用此文本来自动启用Cisco TALOS建议的基本IDS / IPS策略的预选规则组。TALOS规则集具有这样的元数据标签,用于标识作为TALOS / CISCO称为三个唯一“策略”或基本规则集的一部分而激活的规则。这些规则集是:

 

安全性上的连通性-极其精确的规则,对CPU /延迟的影响非常小,并且被认为足够重要,可以启用。

 

平衡-规则的均匀混合,可能出于检查目的而具有较高的CPU /等待时间成本,但是启用这些规则仍然相对重要。

基于连接的安全性-比“平衡”或“基于安全性连接”规则集更多的默认基础规则集,具有较重的基本规则集。此集合中的某些规则显着增加了CPU /等待时间。

 

您可以配置pullpork以启用TALOS规则集中的规则,这是这三个基本规则策略之一的一部分。然后,pullpork脚本将下载TALOS规则集(如果您还没有的话),解析所有规则的元数据标签,并仅启用具有与基本规则策略相对应的元数据标签的规则。例如,在pullpork.conf中,定义“安全性”策略,并首次运行pullpork。Pulledpork(使用您的Oinkcode)从snort.org下载规则,从tarball中提取规则,解析策略元数据标签,并启用具有“ security-ips”元数据标签的规则。有关此的更多信息,请查看pullpork随附的README.RULESET文件。

 

38     https://www.owasp.org/index.php/Command_Injection

39     https://github.com/shirkdog/pulledpork/blob/master/doc/README.RULESET

该政策的下降部分呢?不用太担心这个。与开源产品相比,这更多的是企业产品的元数据标签。但好的一面是,您可以轻松地执行正则表达式搜索“ [您想要启用的策略] drop”,并将其放入pullpork的dropsid.conf文件中,以转换该策略的所有规则,其后都带有单词“ drop”到您希望实施的基准规则策略,并通过pullpork自动将它们从警报操作规则转换为删除操作规则。如果您不是在IPS模式下部署Snort传感器,则在大多数情况下,您可以忽略IDS策略的删除部分。

元数据标记的service http部分与Snort的功能有关,称为主机属性表。您可以从其他NSM工具,漏洞扫描程序和/或网络扫描程序获取外部扫描数据,并在单个主机上构建XML信息表。Snort用户手册[36]中对主机属性表进行了更深入的讨论。。该标签允许您执行的操作是,对于主机属性表中的所有主机,无论该服务位于哪个TCP端口上,并且该主机上的端口是否存在,该主机都有一个标记为“ http”的服务条目如果要在snort.conf的HTTP_PORTS端口变量中包含,请确保将此规则应用于该端口上的流量,该流量可能会流向该特定服务器。简而言之,就是如果您不使用企业产品或主机属性表,那么这绝对对您没有任何帮助。但是,如果这样,您可以将某些IDS / IPS签名应用于snort.conf文件中未定义的端口号。

 

该参考选项告诉您该规则具有一个CVE(通用漏洞和披露)编号,用于标识此漏洞。您可以使用喜欢的搜索引擎搜索CVE 2016-6267,并获取有关此漏洞影响哪些软件版本的更多详细信息[37]。因此,拥有一个描述性规则msg字段和一个可靠的参考字段非常重要,以便分析人员能够查找与他们负责分析的警报相关的更多资源。

其他字段是关于规则的更多元数据,包括根据规则作者的规则类型(类类型),总体规则集合中的规则编号(sid)以及当前部署的规则的修订版本号(rev) 。非常重要的是,如果您对IDS规则进行了修改,则修订号将递增以反映该规则已被修改的事实。总的来说,到目前为止我们讨论的字段(msg,元数据,引用,类类型,sid和rev)都是规则元数据-这些字段可以告诉您更多有关规则本身的目的。这些不是可用的唯一规则元数据选项,但它们碰巧是最常见的。

 

现在,关于实际规则本身,让我们跳回一分钟,然后看一下规则标题:

 

警报tcp $ EXTERNAL_NET任意-> $ HOME_NET $ HTTP_PORTS

 

该规则标题指出,该规则适用于来自

snort.conf中任何源TCP端口上的EXTERNAL_NET变量,将在snort.conf中定义的HTTP_PORTS变量中定义的任何TCP目标端口上,向snort.conf中HOME_NET变量中定义的IP地址前进。简而言之,这是在查看您尝试检测Snort攻击的网络上传入的HTTP流量。

 

接下来,让我们看一下规则主体的其余部分:

 

流:到服务器,已建立;内容:“ / admin_notification.php”;fast_模式:仅;http_uri; 内容:“ spare_”;没事 http_client_body; pcre:” /(^ |&)spare_(Community | AllowGroupIP | AllowGroupNetmask)= [^&] *?([\ x60 \ x3b \ x7c] | [\ x3c \ x3e \ x24] \ x28 |%60 |%3b |%7c |%26 |%3c%28 |%3e%28 |%24%28)/ Pim”;

从顶部开始,您将看到关键字流。此关键字可用于描述流量应朝哪个方向行驶,或流量应来自哪个方向,以便触发此规则。除此之外,您还可以指定警报是否应在TCP连接,非tcp连接以及许多其他选项上触发[38]。在我们的例子中,flow:to_server已建立;表示流量应该流向服务器,并且必须与服务器建立TCP会话。

 

接下来,我们看到content关键字。此关键字定义消息,十六进制字节或我们感兴趣的特定包或网络流中的两者的组合[39]。有几个修饰符可定义有关特定内容匹配的特殊属性(例如,nocase修饰符告诉Snort使先前的内容搜索不区分大小写,以匹配大写或小写字母的任意组合),或将Snort的模式匹配引擎限制为协议对话(例如,http_uri修饰符告诉Snort将先前的内容限制为HTTP请求标头的HTTP URI部分)。在示例规则中,我们有两个内容匹配项。

第一个内容匹配,内容:“ / admin_notification.php” ;,具有两个修饰符,fast_pattern:only; 和http_uri;。fast_pattern修饰符告诉Snort,此特定内容匹配应仅由Snort的快速模式匹配引擎处理。此修饰符通常仅在规则中具有最长内容匹配项和多个内容匹配项的情况下使用,或者如果存在很多内容匹配项,则在整个集合中使用最独特的内容匹配项。从本质上讲,这是一种尝试提高性能的方法,它可以通过嗅探快速模式匹配器中的单个内容匹配来发现规则的其余部分是否适用[40]。该http_uri修饰符告诉Snort将此内容限制为HTTP请求标头[41]的URI部分。这是此内容匹配的另一个性能增强,它告诉Snort在网络流或数据包的特定部分中查找此内容。

我们的第二个内容匹配,内容:“ spare_” ;,有两个附加的修饰符,nocase; 和http_client_body;。nocase修饰符告诉Snort将先前的内容匹配视为不区分大小写[42]。先前的内容可以是大写,小写或大小写混合的,Snort仍将在其上匹配。http_client_body修饰符告诉Snort将此内容匹配限制为HTTP客户端请求主体开始的流或包的一部分[43]。与上面的http_uri修饰符非常相似,这是Snort的性能增强,它告诉Snort限制在包/流的特定部分中搜索此内容匹配项。

规则主体的下一部分是pcre关键字,而男孩则有点笨拙。对于您不认识的人,PCRE是Perl兼容正则表达式的简写。什么是正则表达式?您可以定义这种模式来描述要在大数据块中查找的内容/文本。这是很难掌握的技能,但在对在合理的时间内对大量数据进行排序的极其有用的技能中。

如果PCRE如此有用,为什么不是所有的snort规则都只是一系列正则表达式?因为调用引擎并执行PCRE regex(正则表达式的简写)搜索在计算上很昂贵。请记住,Snort必须处理从每秒数百个数据包(在小型部署中)到每秒数百万个数据包(在大规模部署中)的任何地方,因此计算量大的事情要花很多CPU周期和CPU时间才能完成。完成可能会导致延迟,数据包丢失或检测丢失。为此,在可以针对要编写规则以检测的特定事物识别出至少一个或多个恒定内容匹配之后,有效地利用pcre的规则通常会尝试这样做。

 

现在,您已经拥有了所有这些,让我们来看一下:

 

pcre:” /(^ |&)spare_(Community | AllowGroupIP | AllowGroupNetmask)= [^&] *?([\ x60 \ x3b \ x7c] | [\ x3c \ x3e \ x24] \ x28 |%60 |%3b |%7c |%26 |%3c%28 |%3e%28 |%24%28)/ Pim”;

 

让我们逐一分解一下:

-            表达式的“(^ |&)”部分表示“第一个字符可以是换行符(^)或与号(&)的开头。” 请注意,对于正则表达式,管道符号(|)表示“或”。

-            下一部分“ spare_(Community | AllowGroupIP | AllowGroupNetmask )=”是一个表达式,它与字符串“ spare_”和字符串“ Community”,“ AllowGroupIP”或“ AllowGroupNetmask”匹配,后跟一个相等的字符串(=)号。例如,此表达式可以在“ spare_Community =”或“ spare_AllowGroupIP =”或“ spare_AllowGroupNetmask =”上匹配。

-            下一部分,“ [^&] *?” 可以匹配任何一个或多个字符,只要它不是&字符即可。在这种情况下,括号内的克拉(^)符号表示“不是”,因此括号中的表达式表示为“不是&符”。紧跟在方括号后的表达式是

-            此表达式的最后部分,([[\ x60 \ x3b \ x7c] | [\ x3c \ x3e \ x24] \ x28 |%60 |%3b |%7c |%26 |%3c%28 |%3e%28 |%24%28),是一个巨大的字节模式集合,由“ |”分隔 符号。正则表达式中的“ \ x”表示接下来的两个字符是十六进制数字。前面带有百分比符号(%)的字符表示URL编码的字符。URL编码是一种对URL中的字符进行编码的方法,这些字符不一定是ascii字符,以便客户端发送请求的Web服务器可以理解它们。这也是攻击者常用的混淆方法。URL编码具有百分比符号(%),然后是一对十六进制数字,表示URL编码字符。例如,在上面的表达式中,%60是URL编码的反引号(`)[44]。知道了这一点,我们可以像下面这样分解正则表达式的这一部分:

-([[x60 \ x3b \ x7c]:匹配括号中的三个十六进制代码中的任何一个-十六进制60,十六进制3b或十六进制7c。

-| [\ x3c \ x3e \ x24] \ x28:或者,匹配十六进制28之外括号中的三个十六进制代码(十六进制3c,十六进制3e或十六进制24)中的任何一个。

- |%60 :或者在字符串上匹配“%60”

- |%3b :或者匹配字符串“%3b”

- |%7c :或者匹配字符串“%7c”

- |%26 :或者在字符串上匹配“%26”

- |%3c%28 :或者在字符串上匹配“%3c%28”

- |%3e%28 :或者在字符串“%3e%28” 上进行匹配

- |%24%28 ):或者在字符串“%24%28” 上进行匹配

 

那是很多管道和“或”语句。这意味着如果括号中的这些条件中的任何一个为true,并且出现了原始的十六进制数字或URL编码的字符串,则括号中的整个表达式为true。

 

我知道要接受很多东西,但是此表达式中还有最后一件事,我们必须在其末尾讨论“ / Pim”。这些字母中的每个字母都是“开关”或配置选项,它们会更改此正则表达式的执行方式:

-            我:配置普通快递是不区分大小写。只要找到该模式,任何大小写字母的混合都将返回true。

-            L:配置正则表达式对待“^”和“$”字符如何-分别是换行,行尾字符。

-            ,P:这是告诉Snort的尝试匹配针对原始HTTP身体无任何HTTP归一施加,包括URL解码一个哼特定选项。

 

我知道那是大量的信息。如果您想了解有关正则表达式的更多信息,请在线访问regex101 [45] [46]。如果您想了解有关正则表达式的更多信息作为参考,我创建了一个图表,该图表说明了我们刚刚分析过的规则的不同部分:

 

因此,既然我们已经一起审查了Snort规则,那么公平地做同样的事情,并从“新兴威胁”规则集中一起分析Suricata规则,这是公平的。为此,我选择了以下规则:

 

警报http $ HOME_NET任意-> $ EXTERNAL_NET任意(msg:“ ET TROJAN Formbook 0.3 Checkin”;流:to_server,已建立;内容:“ POST”; http_method;内容:“ config.php”; http_uri; isdataat:!1,相对;内容:“ Mozilla Firefox / 4.0”; http_user_agent;内容:“ dat =”;深度:4; http_client_ body; nocase; fast_pattern; pcre:” / ^ [a-z0-9 -_ / +] {1000, } / PRi”;元数据:previous_category TROJAN;参考:md5,6886a2ebbde724f156a8f8dc17a6639c;类类型:trojan-activity; sid:2024436; rev:2;元数据:受影响的产品Windows_XP_Vista_7_8_10_Server_32_64_Bit,sler_at_symbol,_symbol_ler,___ ,于2017_06_29更新;)

该规则展示了Suricata提供的许多独特功能。让我们从规则标题开始:

 

警报http $ HOME_NET任何-> $ EXTERNAL_NET任何

此规则标头指出,此规则适用于任何源TCP端口上来自suricata.yaml的HOME_NET变量中定义的IP地址的HTTP流量,将转向任何目标端口上的suricata.yaml的EXTERNAL_NET变量中定义的IP地址,因此只要将其解析为http流量即可。简而言之,这是在查看您尝试检测Suricata攻击的网络发出的HTTP流量。

 

让我们继续规则主体,并从关注msg字段开始:

 

msg:“ ET TROJAN Formbook 0.3 Checkin”;

 

msg字段表示这是“ ET TROJAN”规则集中的一条规则,特别是对于一部分名为formbook的木马恶意软件而言,此规则捕获版本0.3的Checkin网络流量。签入流量有时也称为信标,或者是一种恶意软件试图与其命令和控制建立联系时生成的流量。现在,就像Snort规则一样,我们将跳过规则的主要部分,直到规则的末尾,其余元数据为:

 

元数据:previous_category TROJAN;参考:md5,6886a2ebbde724f156a8f8dc17a6639c; 类别类型:trojan-activity; sid:2024436; 启:2; 元数据:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit,attack_target Client_Endpoint,部署范围,特征严重性(主要),created_at 2017_06_29,malware_family Password_Stealer,updated_at 2017_06_29;)

 

因此,这里发生了很多事情,但是请不要惊慌。与我们之前分析过的Snort规则不同,元数据标签是附加的上下文信息,可用于为我们提供有关此签名的更多信息。我们有两个与此规则关联的元数据关键字:

 

元数据:previous_category TROJAN;

 

字符串“ previous_category TROJAN ”是可用于规则组织和维护的信息,它使我们知道此规则可能已从其他规则类别移至“ ET TROJAN”规则类别,或者该规则可能已移至在不久的将来一个新类别。现在,让我们分析另一个元数据关键字:

 

元数据:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit,attack_target Client_Endpoint,部署范围,特征严重性(主要),created_at 2017_06_29,malware_family Password_Stealer,updated_at 2017_06_29;)

这个关键字有很多与之相关的字符串。所有这些字符串为我们提供了有关此规则的大量信息。例如,“ 受影响的产品Windows_ XP_Vista_7_8_10_Server_32_64_Bit ”告诉我们该木马针对Microsoft   Windows操作系统。字符串“ attack_target Client_Endpoin t”告诉我们这是一个针对客户端端点系统的木马。与Microsoft Windows的服务器版本相比,您更有可能在客户端操作系统上触发此规则。字符串“部署外围”告诉我们,该规则的编写者或维护者认为,此规则最适合在本地网络外围的IDS或IPS传感器上进行部署。字符串“ signature_severity Major”,告诉我们作者/维护者认为此规则的严重性很高。这意味着,如果此规则触发了警报,就好像警报来源的主机系统受到了威胁。考虑到该规则适用于办理登机手续/信标,主要严重程度似乎是合理的。除非存在任何误报,否则警报中标识的源IP地址可能会受到威胁,需要进行补救。

“ created_at 2017_06_29 ”和“ updated_at 2017_06_29 ”字符串服务器具有类似的用途,用于通知您上次写入规则的日期和上次修改规则的日期。对于确保您拥有该规则的最新版本或覆盖特定木马的较新变体,这可能是重要的信息。最后,字符串“ malware_family Password_Stealer ”表明该木马具有哪些功能。请注意,此标记可能是也可能不是功能的详尽列表。现在,让我们看一下尚未涵盖的其余元数据:

 

参考:md5,6886a2ebbde724f156a8f8dc17a6639c; 类别类型:trojan-activity; sid:2024436; 启:2;

 

就像Snort一样,有sid ,rev ,classtype 和reference关键字,它们的使用方式几乎相同。参考:md5,6886a2ebbde724f156a8f8dc17a6639c 告知我们可用的参考点是MD5文件哈希。使用此文件哈希,您可以搜索在线沙箱,恶意软件数据库,甚至您喜欢的搜索引擎,以查看是否可以找到此木马的文字,或下载该木马的副本以进行内部分析和逆向工程。classtype:trojan-activity 告诉我们,此规则分类为与特洛伊木马风格的恶意软件相关的活动。最后但并非最不重要的,sid:2024436; 转:2告诉我们新兴威胁规则集中的规则标识号以及该规则的修订版本号。

尽管Suricata(当前)没有Snort那样的任何基线规则集策略,但是您可以通过规则管理工具pullpork轻松使用这些元数据标签和/或其他几个条件来为Suricata制定自己的基线规则集。您可以简单地在pullporkenabledid.conf(或如果要在IPS模式下运行,dropsid.conf)文件中放入一个表达式或一组表达式,这将告诉Pullpork下载它们后要启用哪些规则。现在,所有这些,让我们看一下规则主体的其余部分:

流:到服务器,已建立;内容:“ POST”;http_method; 内容:“ config.php”; http_uri; isdataat:!1,相对;内容:“ Mozilla Firefox / 4.0”;http_user_agent; 内容:“ dat =”; 深度:4; http_client_body; 没事 fast_pattern; pcre:“ / ^ [a-z0-9 -_ / +] {1000,} / PRi”;

就像Snort一样,Suricata具有flow关键字,您可以使用它来确定

 

51  https://suricata.readthedocs.io/en/latest/rules/flow-keywords.html#flow

该规则的下一部分是内容搜索字符串“ POST”,后跟修饰符http_method。content关键字定义了我们要在网络流或数据包中查找的数据[47]。所述http_method 改性剂限制了先前的内容搜索到HTTP客户端头,其限定被用来连接到目标网络服务器的方法的部分[48] 。通过限制针对特定内容匹配来分析数据包或流的哪一部分来加快性能。有关HTTP方法的参考,您将需要阅读RFC2616 [49]

 

该规则的下一部分是另一个内容匹配,通过http_uri 修饰符在HTTP客户端请求标头的URI部分中查找“ config.php ” 。就像使用Snort(和上面的http_method修饰符类似)一样,http_uri 修饰符通过将内容搜索限制在包或流的某些部分来使您的规则更高效,更快捷。在这种情况下,我们只想搜索HTTP请求标头[50]的URI部分。

 

规则的下一部分使用isdataat关键字。顾名思义,这是一个简单的检查,它要求snort来查看数据包/流的有效载荷中是否有一定数量的数据字节[51]。例如,如果数据包/流的有效负载部分中包含50个字节或更多的数据,则isdataat:50 将返回true(并生成警报)。可以从数据包的有效负载部分的开头开始匹配,也可以从最后一个内容匹配开始相对匹配。在上述规则isdataat:!1,relative的情况下,这是检查是否在 最后一个内容匹配之后至少有 1个字节的数据,如果不存在,则检查为true。

 

下一个内容匹配项是查找带有修饰符http_user_agent的字符串“ Mozilla Firefox / 4.0”。您可能已经猜到了,这是另一个修饰符,用于限制要搜索有效匹配的数据包/流的哪一部分。HTTP用户代理是HTTP客户端请求标头中的字段,可以选择性地标识哪个浏览器或应用程序发出了HTTP请求[52]。它不是很高的保真度,可以轻松地进行修改或欺骗,但这仍然是HTTP客户端请求标头字段。我们正在寻找一个读取“ Mozilla Firefox / 4.0”的用户代理字符串。

 

下一个内容匹配有点麻烦:

 

内容:“ dat =”; 深度:4; http_client_body; 没事 fast_pattern;

因此,第一件事是我们正在http数据包/流中寻找字符串“ dat = ”。但是,修饰符正在做很多事情来缩小Suricata将在哪里寻找该字符串。深度修饰符告诉Suricata,先前的内容匹配通常应位于数据包/流的有效负载部分的前四个字节中。您会在depth 修饰符之后立即注意到http_client_body 修饰符。http_client_body 修饰符告诉Suricata在HTTP客户端请求的正文部分中查找先前的内容匹配项。通常,这是参数,用户输入或用户要上载到Web服务器的数据所在的位置,并且正如您所期望的那样,该位置位于HTTP客户端请求标头之后。在深度和http_client_主体之间,我们告诉Suricata,此内容匹配应位于HTTP客户端请求主体的前四个字节中。我们还看到了一个nocase修饰符,以使此字符串与大小写字母变体匹配,最后,我们有了fast_pattern修饰符。这个修饰符与Snort规则的fast_pattern:only修饰符几乎相同,因为它告诉Suricata此内容搜索应该是发送给Suricata使用的快速模式匹配引擎的内容,为了查看内容是否可以在正在评估的http流量中找到。就像使用Snort一样,最长的内容匹配是默认情况下快速模式匹配器使用的内容匹配,就像使用Snort一样,使用快速模式匹配内容匹配的目标是使用唯一的内容匹配。有时候,规则中较短的内容匹配可能最终会成为更有用,唯一的内容匹配,并且由于Suricata得不到太多的初步匹配,因此总体上意味着更好的规则性能。因此,在上述规则中,说此内容匹配(锚定在HTTP客户端主体的前四个字节中)应该是发送给快速模式匹配器的模式。就像Snort一样,快速模式匹配内容匹配的目标是要使用唯一的内容匹配。有时候,规则中较短的内容匹配可能最终会成为更有用,唯一的内容匹配,并且由于Suricata得不到太多的初步匹配,因此总体上意味着更好的规则性能。因此,在上述规则中,说此内容匹配(锚定在HTTP客户端主体的前四个字节中)应该是发送给快速模式匹配器的模式。就像Snort一样,快速模式匹配内容匹配的目标是要使用唯一的内容匹配。有时候,规则中较短的内容匹配可能最终会成为更有用,唯一的内容匹配,并且由于Suricata得不到太多的初步匹配,因此总体上意味着更好的规则性能。因此,在上述规则中,说此内容匹配(锚定在HTTP客户端主体的前四个字节中)应该是发送给快速模式匹配器的模式。

我们的Suricata规则的最后一部分是一个正则表达式,通过pcre关键字:

 

pcre:“ / ^ [a-z0-9 -_ / +] {1000,} / PRi”;

 

与Snort一样,Suricata具有一个PCRE模式匹配引擎,该引擎可以利用与perl兼容的正则表达式。此特定的正则表达式正在寻找以下任何字符:az,0-9或符号-,_,/或+,重复1000次或更多次。选项“ P”是Suricata特定的选项,它告诉pcre引擎在HTTP客户端主体中进行搜索。选项“ R”是另一个Suricata特定的选项,它告诉pcre模式匹配引擎相对于最后一个内容匹配开始搜索。在我们的例子中,这告诉模式匹配器在HTTP客户端请求主体的开头“ dat =”内容匹配之后开始寻找与express匹配的字符。就像Snort一样,“ i”选项使pcre模式匹配不区分大小写。有关Suricata的pcre关键字的更多信息,[53]

 

就像Snort一样,以下示例可以帮助您更好地理解Suricata规则的各个部分:

 

第4章:分析警报

现在,我们知道了Snort和/或Suricata规则的外观,您可以访问Snort和Suricata的规则文档,并且现在应该能够更有效地阅读规则。那么IDS警报呢?这是我设置的个人实验室环境中的IDS警报的集合。警报由Snort VM生成,并由Hurricane Labs Add-On for Unified2解析,这是一个Splunk应用程序,可在传感器上解析Snort的Unified2输出文件,并将其转换为JSON纯文本日志[54]。然后将这些日志从Snort传感器上的Splunk通用转发器安装发送到我实验室的Splunk索引器进行日志记录,并从Splunk搜索头(在同一系统上)进行检索以进行查询/检索[55]

 

从上面的屏幕截图中可以看到,有很多信息需要分析。当您承担调查IDS / IPS事件的任务时,以下是您希望能够回答的一些主要问题,这些问题的答案基于上面以粗体显示的数据:

警报的消息是什么?OS-OTHER Bash环境变量注入尝试涉及哪些源IP地址和目标IP地址?来源:172.16.6.2目标:

172.16.6.3

我们是否知道目标系统正在运行什么操作系统?

我们是否知道目标系统上托管了哪些网络服务?

使用了哪种传输协议?TCP协议

涉及的源端口和目标端口是什么?资料来源:42437目的地:21

什么是签名ID?32069

该事件发生的时间:2017年4月28日下午1:48

我们是否有触发事件的数据包?

是否有多个警报触发实例?如果是这样,他们是否遵循某种可识别的模式?没有

是否存在来自/来自同一主机的其他IDS / IPS警报,指示进一步的恶意行为?(例如,后开采活动,其他攻击抛出,暴力破解,SQL注入等)

 

除少数例外,大多数这些问题都可以立即通过警报本身提供的数据来回答。大多数IDS警报都会触发警报消息,有关攻击中使用的网络协议,攻击发生的时间,触发的签名,所涉及的源IP地址和目标IP地址以及源TCP和UDP端口的信息(如果适用)。无论您使用的是哪种IDS / IPS平台,无论是开放源代码还是封闭源代码,此信息都应该可用。

 

有时,根据您要登录的平台/ SIEM以及为IDS / IPS平台配置的输出格式,您可能能够获取触发IDS警报的数据包的副本。我们的Splunk附加组件可解析Unified2文件,它能够发送以Unified2格式记录的数据包,向您显示数据中的任何ASCII,人类可读的字符串,提供数据包的原始十六进制转储,并将此数据存储在Splunk中:

 

一些日志记录平台将允许您请求实际的pcap。其他人将向您显示一个十六进制字符串(如上图所示),还有更多内容将在base64中对十六进制转储进行编码,要求您在将十六进制字符串转换为数据包捕获之前对其进行解码。您可能想知道:如何将原始的十六进制转储转换为可以在Wireshark或其他网络分析工具中加载的数据包?这是您需要的:

 

具有以下实用程序的类Linux / Unix系统:

申请xxd

应用程序od

应用程序text2pcap (在基于debian / apt的linux发行版上,通常在运行apt-get install wirehark时提供)

复制/粘贴输出(例如SSH会话)或将包含我们的十六进制字符串的文件复制到Linux系统的能力

第4章:分析警报

方法1:无文件

 

将要转换的十六进制字符串复制回pcap到系统剪贴板。在上图中,这将是十六进制字符串:

 

00 15 5D 02 02 0E 00 15 5D 02 02 0D 08 00 45 00 00 E0 EC 10 40 00 40 06

E9 E1 AC 10 06 02 AC 10 06 03 A5 C5 00 15 26 5F 9A F6 24 2E BF 30 80 18

00 E5 B4 12 00 00 01 01 08 0A 00 24 77 17 00 11 28 76 50 41 53 53 20 28

29 20 7B 20 3A 3B 7D 3B 20 2F 62 69 6E 2F 73 68 20 2D 63 20 22 70 72 69

6E 74 66 20 27 5C 31 35 30 5C 31 35 30 5C 35 37 5C 31 34 32 5C 31 35 31

5C 31 35 36 5C 32 31 31 5C 33 34 33 5C 31 32 30 5C 31 32 33 5C 32 31 31

5C 33 34 31 5C 32 36 30 5C 31 33 5C 33 31 35 5C 32 30 30 27 3E 3E 2F 74

6D 70 2F 6C 4A 70 44 4F 20 3B 20 2F 62 69 6E 2F 63 68 6D 6F 64 20 2B 78 D

20 2F 74 6D 70 2F 6C 4A 70 44 4F 20 3B 20 2F 74 6D 70 2F 6C 4A 70 44 4F

20 3B 20 72 6D 20 2D 66 20 2F 74 6D 70 2F 6C 4A 70 44 4F 22 0D 0A

 

打开安装了xxd,od和text2pcap的SSH会话(如果尚未打开)。运行以下命令:

 

回声“ 00 15 5D 02 02 0E 00 15 5D 02 02 0D 08 00 45 00 00 E0 EC 10 40 00 40 06 E9 E1 AC 10 06 02 AC 10 06 03 A5 C5 00 15 26 5F 9A F6 24 2E BF 30

80 18 00 E5 B4 12 00 00 01 01 08 0A 00 24 77 17 00 11 28 76 50 41 53 53

20 28 29 20 7B 20 3A 3B 7D 3B 20 2F 62 69 6E 2F 73 68 20 2D 63 20 22 70

72 69 6E 74 66 20 27 5C 31 35 30 5C 31 35 30 5C 35 37 5C 31 34 32 5C 31

35 31 5C 31 35 36 5C 32 31 31 5C 33 34 33 5C 31 32 30 5C 31 32 33 5C 32

31 31 5C 33 34 31 5C 32 36 30 5C 31 33 5C 3331 35 5C 32 30 30 27 3E 3E

2F 74 6D 70 2F 6C 4A 70 44 4F 20 3B 20 2F 62 69 6E 2F 63 68 6D 6F 64 20

2B 78 20 2F 74 6D 70 2F 6C 4A 70 44 4F 20 3B 20 2F 74 6D 70 2F 6C 4A 70 44 4F 20 3B 20 72 6D 20 2D 66 20 2F 74 6D 70 2F 6C 4A 70 44 4F 22 0D 0A”

| xxd -r -p-| od -Ax -tx1 -v | text2pcap-file.pcap

 

这是将十六进制ASCII字符串发送到xxd命令,该命令将其从您看到的十六进制的ASCII字符串转换为十六进制的原始表示形式。从那里,我们将原始十六进制数据发送到具有特定参数的od命令,以将原始十六进制数据格式化为text2pcap命令可用于将原始数据转换为数据包捕获(pcap)的格式。最终结果是一个名为“ file.pcap”的文件:

 

方法2:复制文件

 

突出显示十六进制转储并将其复制到系统的剪贴板中。打开您选择的文本编辑器(对于Windows,我建议使用notepad ++,在OSX TextWrangler / BBEdit上),然后将十六进制转储复制到文本编辑器中。保存文件,确保将换行符转换为Unix样式(LF):

 

然后,使用SCP或您选择的文件传输方法,将此文件传输到Linux盒中进行转换,并使用以下命令(假设文本文件的名称为“ dump.txt”),最终结果应为名为“ dump.pcap”:

 

猫dump.txt | xxd -r -p-| od -Ax -tx1 -v | text2pcap-dump.pcap

 

无论使用哪种方法,都可以使用SCP或选择的文件复制方法将其从Linux系统复制回主工作站,以便在Wireshark中进行分析,或者如果您的Linux系统具有GUI,请打开wireshark进行分析该系统上的数据包捕获。

 

我将pcap文件从Linux框中复制到Windows框中,并在wirehark中打开了它。它能够解析帧,数据包和tcp标头,并确定这确实是FTP通信:

第4章:分析警报

 

那么,这个数据包捕获告诉我们什么?它确认源和目标IP,传输协议以及源和目标端口。它还可以让我们看到源系统试图发送什么样的有效载荷。从外观上看,目标系统正在运行FTP服务器,从外观上看,攻击者正试图使用​​FTP PASS参数执行命令注入漏洞。我们来看一下规则编号32069,注意元数据部分,尤其是任何参考关键字:

警报tcp $ EXTERNAL_NET任意-> $ HOME_NET 21(消息:“ OS-OTHER Bash环境变量注入尝试”;流:到服务器,已建立;内容:“通过”;深度:5;内容:“(){”;快速模式:仅;元数据:策略平衡ips下降,策略最大检测ips下降,策略安全ips下降,规则集社区,服务ftp;参考:cve,2014-6271;参考:cve,2014-6277;参考:cve, 2014-6278;引用:cve,2014-7169; classtype:attempted-admin; sid:32069; rev:3;)

 

根据参考关键字,我们可以根据此规则查找三个CVE编号;CVE 2014-6271 [56],2014-6277 [57],2014-6278 [58]和2014-7169 [59]。根据上面的规则标头,我们可以确认此规则是针对端口21 / tcp上的FTP服务器(或通过主机属性XML通过FTP服务标记的系统),以及通过交叉引用规则内容匹配的数据包捕获,我们可以确认ASCII文本“ PASS”(后跟一个空格)出现在数据包有效载荷的前五个字节中,然后在数据包有效载荷的其他地方依次出现序列“(){”。基于研究CVE编号以及其余有效负载,我们可以推测出攻击者正试图利用FTP连接到目标系统的“ shellshock”漏洞。

第5章:通过佐证做出判断

在继续第4章中的场景时,我们对攻击者正在尝试做的事情有更好的了解(利用“ shellshock”漏洞),我们还需要回答一些其他问题:

 

这次攻击成功了吗?

如果是这样,是否有进一步的恶意活动(例如后期利用)证据?

如果不是,那是假阳性吗?

是否需要进行任何IDS规则调整?

 

在做出最终判断之前,这些都是您需要收集进一步的网络,主机和资产信息的问题。

5.1:网络图和/或资产管理

强大的资产管理是能够正确解释IDS和IPS规则的重要组成部分。无论是票务系统,包含主机信息的电子表格,内部Wiki /融合,内部漏洞扫描程序日志,被动网络指纹套件(例如P0f [60],prads [61]或Bro),还是直接连接到要用您的眼睛查看系统的KVM或IPMI端口,您需要知道主机正在运行哪些操作系统和服务,才能更接近回答我们上面的问题。

 

就我的实验室而言,我知道172.16.6.2是运行Kali Linux的恶意主机,而172.16.6.3是运行Linux的主机,尤其是基于Ubuntu 8.04的Metasploitable 2,Ubuntu 8.04是Ubuntu Linux发行版的非常老的版本。 。太老了,负责Ubuntu的Canonical公司不再支持它了。不仅如此,此安装还运行着各种各样的服务,这些服务都是各种各样的旧有漏洞。有些是故意的。至少是我们的攻击者试图攻击的FTP服务器。

 

在现实世界中,您将不会如此轻松。您可能必须致电世界各地的数据中心的员工,以了解服务器正在运行的操作系统,或者通过数周的网络扫描来筛选,或者也许只有很少的更新电子表格/ Wiki。您用于资产管理和服务的任何系统检测,继续使用它们,不断改进它们,并确保经常更新信息,尤其是发现任何差异时。这肯定会帮助您进行将来的调查。

 

就我们的实验室网络而言,我知道目的地正在运行Linux。旧版本的Linux,可能安装了易受攻击的bash解释器版本。因此,我们知道攻击者针对的是正确的操作系统,但是服务容易受到攻击吗?是否有开发后活动的证据?

5.2:基于主机的安全性解决方案

要回答5.1节中的两个问题,您需要查看其他网络安全数据源。这些可能是诸如我们已经详细讨论过的其他NSM来源,以及来自基于主机的安全性解决方案中的数据之类的东西。基于主机的安全解决方案和数据是一个影响深远的术语,可以包含各种内容,例如系统日志,AV警报/隔离通知,文件完整性监控,内存转储,来自远程实时取证代理人的数据,系统以及应用程序日志,进程列表,网络连接(套接字和已建立的连接)等等。

 

我们不会进行日志分析或数据取证和事件响应(DFIR),但是您应该了解可以并且应该访问的基于主机的数据源。拥有这些数据可以增强您响应IDS警报,确定其是否为肯定结果以及确定主机是否需要补救的能力。考虑从主机反恶意软件和安全解决方案(例如Symantec,Eset,Sophos,Crowdstrike,Carbon Black,Cylance等反病毒端点)中提取日志,考虑从系统和安全日志(Linux / Unix:消息,syslog,dmesg,身份验证,安全,应用程序/服务日志等。Windows:应用程序,系统,安全性,审核,Sysmon等)

 

就我们的IDS警报而言,除了查看/ var / log中的各种日志以获取成功利用和/或利用后行动的任何证据外,我还可以轻松地检查netstat和ps命令的输出。破坏者:在我们的场景中,攻击者没有成功。发送正确的序列以触发“ shellshock”漏洞时,要使漏洞利用成功,必须满足某些条件,这些条件不存在,从而导致攻击,但利用失败。如果您是SOC / NSM分析师,或负责查看公司中的IDS警报,尤其是在DMZ网段或网络外围有IDS传感器的情况下,这将是您的常识。

 

坏家伙喜欢等到针对相对较新的漏洞或最新的漏洞的概念验证(PoC)漏洞可用后,对其进行修改以丢弃他们选择的有效负载,然后将其全部喷出

 

67     http://heartbleed.com/

68     https://www.symantec.com/connect/blogs/shellshock-all-you-need-know-about-bash-bug-vulnerability

69     https://technet.microsoft.com/zh-cn/library/security/ms17-010.aspx

70     https://securelist.com/wannacry-ransomware-used-in-wide-spread-attacks-all-over-the-world/78351/

通过互联网。我们用“令人伤心的67 ”看到了这一点,我们用“ shellshock 68 ”看到了这一点,最近,我们使用了影子经纪人和“永恒的69 ” Windows SMB漏洞(WannaCry 70)勒索软体蠕虫)。如果Internet上有一个带有公开服务的系统,那么无论他们瞄准的是错误的操作系统还是错误的服务软件版本,恶意分子都将利用他们的漏洞。简单地喷洒和祈祷所需的时间少于完善一系列潜在目标所需的时间。这意味着,在识别出漏洞之后,可以使用可导致远程执行代码的PoC攻击,攻击者将在Internet上进行全面传播。不管是Windows系统,还是已经安装了补丁/补救措施,攻击者都可以看到它遍及整个网络,并遍及您的外围和DMZ网络。这就是为什么修补远程代码执行漏洞通常非常重要的原因,

5.3:开源情报和外部数据源

有时您对IDS警报的调查不会轻易打开和关闭,有时您需要做一些额外的工作,并调查攻击源和/或文件哈希值以确定它们是否恶意或成功。 。在这里,可以使用公共搜索引擎,开源情报和与同行进行信息交换。互联网上有各种各样的针对恶意软件的开放源代码情报存储库,对其进行讨论将耗时30页,这超出了本指南的范围。因此,让我将其分解为功能强大,可靠且基本免费的开源情报资源:

 

1.         Alienvault OTX [62]:Alienvault的OTX是威胁情报交换,人们可以在其中发布有关最新威胁的信息。从恶意软件活动到用户管理的蜜罐中的数据转储,这可能是任何事情。可以搜索数据,以各种格式下载数据,具有API,并且是免费的。您要做的就是注册。

 

2.         病毒总数[63]:Virustotal是一个很好的资源。您可以将文件提交到全部病毒,然后将文件提交到多个防病毒引擎,以确定签名/扫描引擎是否将文件检测为恶意文件。最近,Virustotal已经获得了几种“下一代”反恶意软件解决方案,这些解决方案使用所谓的“ AI”或“机器学习”对产品也认为恶意的程度进行评分。除了提交文件之外,您还可以将域和URL提交给virustotal,以查看它们是否曾经被查看过和/或有多少信誉黑名单确定该URL或域是恶意的。Virustotal的最大功能来自于分析人员能够搜索文件哈希值(md5,sha1,sha256),以查看文件之前是否已提交,以及有多少引擎将该文件标记为恶意文件。这使分析人员无需将文件上传到Virustotal,即可确定他们正在调查的文件是否为恶意文件。这非常重要,因为一旦将文件提交给Virustotal,任何具有API访问权限或Virustotal Intelligence帐户的人都可以搜索文件哈希并下载文件。这可能会导致敏感信息从企业泄漏或在进行恶意软件调查时,可以作为对已被发现的威胁参与者的提示。

 

RiskIQ / passivetotal [64]:RiskIQ每天免费提供有限数量的数据/查询,但可用的数据量巨大。

Threatminer [65]:一种免费资源,其中包含针对各种恶意软件样本的各种IOC,且全部100%免费。

 

Threatcrowd [66]:另一个开源情报搜索引擎。威胁人群的伟大之处在于它可以通过节点可视化系统轻松进行数据透视。您可以从一个恶意IP地址开始,然后找到与该IP地址绑定的多个域,哈希和其他资源,这些资源,资源和哈希可以推动企业中的指标搜索和补救工作。

5.4:其他NSM数据源

除了IDS / IPS传感器之前,我们还讨论了其他NSM解决方案。这些其他NSM平台,甚至其他IDS / IPS警报都可以用来帮助确定触发的警报是否值得进一步调查或调整。考虑以下:

 

-            流量数据的本质是网络流量元数据的集合。利用此优势可以捕获未知的坏消息和/或使用加密通信的坏消息。在IDS警报发生之前或之后,是否还有其他可疑的异常流量?警报之后是否存在某种可能是恶意软件C2 /信标传播的流量模式(例如,在固定间隔内持续联系特定IP地址/域等)?如果可疑主机是流量增加的发起者(例如,出站流量增加可能表明数据泄漏),流量是否已经大幅增加?

 

-            被动收集的性质是收集有关应用程序层协议连接的信息。如果您正在记录HTTP客户端标头,则在发生警报后是否看到异常,非标准的HTTP用户代理字符串?异常的HTTP URL被记录了吗?如果您正在收集被动dns数据,是否看到对新域的DNS dns请求?这些请求的数量是否很小(例如,仅来自几个主机或DNS解析器)?这些新日志是否在IDS警报发生之时或前后发生?

 

-            可以将其他IDS警报设计为捕获利用后的操作(例如,已知不良RAT,木马等的恶意软件C2)。您正在调查的同一主机在同一时间或大约在同一时间是否还有其他IDS警报?这可能是利用后的行为,也可能是攻击者尝试其他利用方法的顽固攻击者。

 

-            如果您具有“完整数据包捕获”,请拉出触发警报的网络流,并从数据包捕获中开始雕刻文件和数据,尤其是在网络流量未加密的情况下。您可以轻松获取恶意软件样本和各种有趣的东西。

第6章:调音和降噪

因此,您已经对IDS警报是否属实做出了判断,并且没有生成令人讨厌的警报,因此您无需做太多事情。将警报标记为已审核,然后继续生活。如果特定规则嘈杂,您有什么选择来调整规则集?我们将讨论可用于调整Snort和Suricata IDS规则集和传感器以减少噪声的选项。我们将讨论抑制,阈值,BPF,通过规则,以及完全禁用该规则。请注意,这些选项中有许多是特定于Snort / Suricata的,其他IDS / IPS供应商具有不同的调优和规则管理方法,您将不得不与文档一起查找。

6.1:禁用规则

禁用IDS / IPS规则是最简单的方法。规则会产生大量误报吗?该规则是否与您的操作环境无关(例如,来自Windows主机为零的网段上的传感器的Windows利用警报)?也许禁用规则是您的正确选择。

 

对于Snort和Suricata,在您的规则集中禁用IDS规则就像在规则的规则标头前面放置一个八叉星(#)一样简单。这会完全注释掉该行,并阻止将规则加载到内存中。如果您有多个要禁用的规则怎么办?最好的选择是诸如pullpork之类的规则管理解决方案。

 

Pulledpork具有disablesid.conf文件,可让您指定其他字符串和/或表达式来搜索规则集,并让Pullpork处理为您禁用它们。例如,您在企业中运行Snort,并使用pullpork生成了默认的“基于连接的安全性”规则集,以应用于无源IDS传感器。该Snort规则集默认情况下启用了许多HP Openview规则,但是您不在环境中使用HP的Openview产品,因此您实际上并不关心HP Openview生成警报的66条规则中的任何一条。

打开disablesid.conf文件,并输入以下行:

pcre:HP OpenView

 

保存该文件,然后重新运行pullpork,包括pullspork文档建议使用的disablesid.conf文件(使用“ -i”标志),这就是您不必担心的66条规则。您还可以指定CVE号,MS漏洞标识号,Snort / Suricata sid号,甚至指定整个规则类别。

 

但是请记住,禁用IDS / IPS规则并不总是最好的方法。例如,如果IDS规则有效且是一个有效的问题,则可以考虑设置规则阈值,或者如果规则正在为一组主机生成大量误报,但是仍然可以考虑使用该规则对于您来说很有价值,可以考虑实施通过规则或BPF。

6.2:通过规则

正如我们之前建立的,可以将各种操作分配给Snort / Suricata IDS规则标头。传递规则是这样的规则:如果发生规则的内容匹配,则我们要转发数据包/流。Snort和Suricata均支持通过规则操作。不仅如此,默认情况下,通过动作对于Snort和Suricata都被认为是最高的动作优先级。这是什么意思?让我们举个例子:

 

我将为您提供一个实际的问题,以及如何解决通行证规则。几年前,一群绰号为“ Careto”的高级威胁参与者正在积极利用世界各地的目标。生成了有关其活动的威胁报告,并且当然编写了一套Snort规则以检测其植入物。让我们看一下sid 29760:

 

警报tcp $ HOME_NET任意-> $ EXTERNAL_NET $ HTTP_PORTS(msg:“ BLACKLIST User-Agent已知恶意用户代理字符串MSIE 4.01-Win.Trojan.Careto”;流:to_server,已建立;内容:“ Mozilla / 4.0 | 28 |兼容| 3B | MSIE 4.01 | 3B | Windows NT | 29 0D 0A |”; fast_pattern:仅; http_header;元数据:impact_flag红色,策略平衡ips丢弃,策略安全ips丢弃,规则集社区,服务http;参考:url ,www.virustotal.com / en /文件/ 19e818d0da361c4feedd456fca63d68d4b024fbbd3d9265f606076c7ee72e8f8 / analysis /; classtype:trojan-activity; sid:29760; rev:2;)

该规则正在寻找字符串“ Mozilla / 4.0(compatible; MSIE 4.01;

Windows NT)\ r \ n ”。这是一个非常简单的内容匹配和极其简单的检测。但是,与此有关的问题是,在HTTP端口上探测系统时,某些版本的HP OpenView产品会将其用作默认用户代理字符串。HP OpenView每隔几分钟使用此用户代理发送数百个探针。您会很快看到这很烦人的地方。在我们的示例中,假设有两个OpenView服务器;10.0.0.1和10.0.0.2。您知道它们并未感染此威胁参与者的植入物,并且您希望为它们停止警报,但对网络中的其他主机保持活动状态。考虑以下规则:

传递tcp [10.0.0.1,10.0.0.2]任意-> $ EXTERNAL_NET $ HTTP_PORTS(msg:“ PASS RULE用户代理字符串MSIE 4.01-Win.Trojan.Careto”;流:to_server,已建立;内容:“ Mozilla / 4.0 | 28 | compatible | 3B | MSIE 4.01 | 3B | Windows NT | 29 0D 0A |”; fast_pattern:仅; http_header;元数据:service http;引用:url,www.ourinternaldocumentation.corporation / passrules / orsomesuch; sid:1000000;转:1;)

 

您将此规则添加到local.rules文件,将其包含在您的Snort.conf中,然后重新加载Snort,突然您会发现从您的OpenView服务器触发的此规则的警报要少得多。但为什么?传递规则首先根据优先级进行评估,这意味着,如果发生与传递规则相匹配的流量,即使存在与警报规则操作相同的规则,该流量也会通过而不会生成警报。将通过规则视为一种外科手术调整方法。您希望规则内容匹配为真(例如警报规则),但是您希望与通过规则条件匹配的特定流量不生成警报(例如,去往或来自某个IP地址或一组IP地址,甚至是目标端口的特定子集)。

 

如前所述,Snort和Suricata都支持通过规则,您只需将它们作为本地规则(如在本地创建的规则),并将它们包含在所选IDS / IPS解决方案的配置文件中。有关如何在Suricata中包括本地规则的说明,请参阅文档[67]。对于Snort,方向几乎相同–确保您的其他snort规则中包含“ include /path/to/local.rules ”语句,并且local.rules文件中包含传递规则。

 

请注意,本地规则(是的,这也包括您的通行规则)必须为其分配一个唯一的sid。建议您的local.rules文件应使用1000000-1999999之间的sid号。每个本地创建的规则文件都需要一个sid号和一个rev号。即使您所做的只是复制警报规则并将其从“ alert ” 更改为“ pass ”并在规则标题中设置特定的IP地址,修订号也应始终从1开始。每次更改规则时,都会进行任何更改根本上,该修订号必须增加。除此之外,Suricata用户应注意,传递规则仍会将协议信息和统计信息记录到eve日志中。

6.3:BPF(伯克利包过滤)

BPF是一项与数据包捕获一样古老的技术。BPF是一种语言,可用于描述您要收集的网络流量。BPF的范围从非常简单到非常复杂。在这里,我不会涉及BPF的复杂性,但是在线上有大量出色的文档,它们是理解BPF语法77的出色参考。让我们尝试解决另一个现实示例,其中Snort或Suricata可以使用BPF。

您的组织已经指定了漏洞扫描程序系统,并定期安排了漏洞扫描。每次运行这些扫描时,扫描仪主机都会生成大量警报,因此,它们会抛出扫描,看起来像是对家庭网络中的服务器进行的利用尝试。您被要求找到一种方法来防止漏洞扫描程序在IDS上生成警报。假设您的三个漏洞扫描程序分别为172.16.1.2、10.0.0.2和192.168.1.2。这是BPF想要排除您的IDS评估来自这三台主机的任何流量的样子:

 

不是src主机(172.16.1.2或10.0.0.2或192.168.1.2)

 

这是一个非常简单的BPF,它会忽略所有以这些IP地址为源地址的流量。现在,您如何让Snort或Suricata来使用它?对于Snort,将BPF的内容放入运行Snort的用户可以访问和读取的文件中,并在snort.conf中使用“ config bpf_file:/path/to/your.bpf ”指令,或在“ -F / path / to / your.bpf”选项,根据他们的文档[68]。对于Suricata,方法大致相同。创建一个BPF,将其写入Suricata用户可以访问和读取的文件,然后使用“ -F /path/to/your.bpf ”命令行选项或“ bpf-filter:/ path / to / suricata.yaml文件[69]中的your.bpf”选项。

 

BPF过滤器非常容易学习,并且在没有任何警告的情况下非常容易出错。我的意思是,如果您弄乱了语法,或者忽略了比您最初打算忽略的流量更多的流量,BPF不会给您任何警告,这意味着如果您错误地使用了BPF,您可能会忽略大量的流量永远不知道 只要BPF语法有效,Snort或Suricata都会很乐意接受它。因此,您必须绝对确保您制作的BPF滤波器产生所需的结果,并且仅产生所需的结果,否则可能会在IDS / IPS传感器部署中导致较大的盲点。轻轻踩一下,生成数据包捕获,并在部署它们之前,使用tcpdump和您选择的IDS / IPS解决方案针对要使用的BPF测试数据包捕获。

6.4:压制

规则抑制是我从未真正使用过的东西,因为其他调整方法效果更好。但是,出于完整性考虑,通过抑制操作,您可以定义一系列规则,如果触发了它们的规则标准,或者规则来自特定的源IP,或朝向特定的目标IP,则这些规则将不生成警报。这似乎很有用,但是您要抑制的规则仍然启用,并且不仅如此,还必须在考虑抑制之前对其进行评估。换句话说,在每种情况下都考虑禁止规则,最好禁用它或使用通过规则。如果您有兴趣研究如何配置抑制,Snort和Suricata文档均提供了有关如何使用抑制的详细说明[70] [71]

 

6.5:阈值

规则阈值有些有趣。阈值可让您定义在给定的时间范围内警报可以发生多少次(限制),或者定义规则在警报被记录之前必须匹配的次数(阈值),或者您可以同时进行这两种操作(两者)。请注意,阈值是您可以在规则主体中实施的规则选项,此外,您还可以在snort.conf或suricata.yaml中指定阈值(请注意,根据Snort用户手册,阈值规则该选项被认为已弃用,并已由detection_filter 规则选项[72] [73]取代。此外,根据Snort用户手册,event_filters和阈值本质上是同一件事–“阈值是event_filter的别名[74]”)。为了简单起见,我们仅讨论设置全局阈值,即snort.conf或suricata.yaml文件中包含的阈值设置。

 

例如,如果您有警报来检测SSH暴力破解,并且知道相同的源IP地址将试图不断在外围对暴力暴露于Internet的IP地址(上帝帮助您,我希望您转过身来。关闭密码身份验证),但您仍想查看哪些IP地址正在攻击您的服务器,也许您会设置一个限制,规定每5分钟记录一次尝试对您进行暴力破解的源IP地址发出的单个警报(300秒)。看起来像这样(假设规则编号1337是检测SSH暴力攻击的规则):

 

阈值gen_id 1,sig_id 1337,类型限制,跟踪by_src,计数1,秒300

 

这告诉Snort或Suricata,无论有多少警报从特定的源IP地址在5分钟的窗口中触发了规则1337(从在这5分钟的窗口中记录的第一个警报开始),仅记录了一个警报。假设您现在想做相反的事情,并且您想告诉Snort或Suricata,您只想记录警报,如果警报在某个特定的时间窗口中出现了X次,看起来像这样(再次假设我们的规则编号)是1337年)

 

阈值gen_id 1,sig_id 1337,类型阈值,跟踪by_src,计数5,秒300

 

此阈值告诉Snort / Suricata,规则1337需要在5分钟内触发5次,然后才能记录警报。请注意,如果您处于IPS模式,则无论是否记录警报,如果规则匹配,数据包都将被丢弃。正是由于这个原因,我通常不经常使用阈值类型。我希望每个时间段至少记录一次警报,并让我知道发生了什么事。

我不想设置即使在记录单个警报之前也必须满足的阈值,因为总是有机会无法达到该阈值,而且我永远也不会看到该警报,否则会导致失去可见性(如果攻击者“足够慢”),或造成巨大的故障排除头痛(如果传感器是嵌入式的)。如果要了解有关如何设置阈值格式的更多信息,请参阅Snort或Suricata文档以获取更多详细信息[75] [76]

第7章:奖励内容-引导程序和预构建的NSM发行版

本指南重点介绍NSM技术和IDS / IPS   功能。尽管已尽力列出各个开源工具,但围绕网络安全监控构建了一些操作系统发行版(以及引导程序/构建脚本),其中包括几乎所有“开箱即用”的必需工具。立即开始使用NSM技术。

建议将这些解决方案中的某些解决方案用于非生产网络,并且可能适用于共享网络实验室环境,家庭实验室或家庭网络,或者仅用作概念验证,以显示开源NSM工具的功能。这是我为NSM爱好者所知的一小部分开源Linux发行版:

Security Onion [77]:Security Onion是在Ubuntu Linux上构建的Linux发行版,由Security Onion Solutions维护。我将其称为“ NSM发行版的Kali Linux”,其中提供了许多NSM工具,这些工具肯定可以满足每个人的需求。除了可以作为Linux Distro使用之外,还有一个Security Onion PPA,其中包含预构建的软件包,可以轻松地在现有的Ubuntu安装中轻松安装所需的组件,从而使您能够自定义仅安装工具和您想要的功能。

红洋葱[78]:有些地方不喜欢Ubuntu,并禁止您将它用于任何与生产有关的事情。由于企业许可,也许您的工作场所要求使用CentOS或Redhat。红洋葱是“ boostrap”脚本的集合,这些脚本将在Redhat或CentOS Linux安装之上安装一组预定义的工具。

RockNSM [79]:Rock NSM是由密苏里州网络(MOCYBER)构建和维护的另一个NSM引导解决方案。与Red Onion一样,RockNSM采取的方法与Security Onion发行版为您提供的各种选项稍有不同。相反,只有少量紧密集成的工具安装在现有的Redhat Enterprise Linux 7或CentOS 7 Linux安装之上。RockNSM并非以发行版的形式提供,而是以Vagrant [80](用于虚拟化平台)或利用Ansible的构建脚本[81]的形式提供,以获取所需的组件并即时进行安装。 

SELKS [82]:SELKS是由Stamus网络提供的基于Debian的Linux发行版,它预先安装了Suricata,ElasticSearch [83],Logstash [84],Kibana [85],Sirius和Evebox [86]。该发行版主要针对以Suricata为中心的IDS / IPS作为IDS平台而构建。

 


[1]  https://github.com/gamelinux/passivedns

[2]  https://github.com/jbittel/httpry

[3]  https://www.bro.org

[4]  https://suricata-ids.org

[5]  http://www.ntop.org/products/traffic-analysis/ntop/

[6]  https://tools.netsa.cert.org/silk/index.html

[7]   https://qosient.com/argus/downloads.shtml

[8]   http://netsniff-ng.org/

[9]   http://www.openfpc.org/

[10]   https://molo.ch/

[11]   https://www.snort.org/

[12]  https://tools.kali.org/information-gathering/fragrouter

[13]  https://s3.amazonaws.com/snort-org-site/production/document_files/files/000/000/032/original/target_based_frag.pdf?AWSAccessKeyId=AKIAIXACIED2SPMSC7GA&Expires=1501097853&Signature=ttDV9ycIPrONNq%2B7D

[14]  https://s3.amazonaws.com/snort-org-site/production/document_files/files/000/000/033/original/Stream5_ reassembly.pdf?AWSAccessKeyId = AKIAIXACIED2SPMSC7GA&Expires = 1501098338&Signature = q%2Bk2oMsdLqdRUpc% 3D

[15]  https://www.owasp.org/images/2/20/OWASP042509.pdf

[16]  https://www.sans.org/reading-room/whitepapers/detection/intrusion-detection-evasion-techniques-case-studies-37527

[17]  https://www.snort.org/faq/readme-file

[18]  https://github.com/Cisco-Talos/snort-faq/blob/master/docs/README.appid19  https://github.com/shirkdog/pulledpork

[19]  https://github.com/firnsy/barnyard2

[20]  https://idstools.readthedocs.io/en/latest/index.html

[21]  https://ossectools.blogspot.com/2011/07/running-load-balanced-snort-in-pfring.html

[22]  https://s3.amazonaws.com/snort-org-site/production/document_files/files/000/000/014/original/ PF_RING_Snort_Inline_Instructions_daq_062.pdf?AWSAccessKeyId = AKIAIXACIED2SPMSC7GA&Expires = 1501190549%R2C2F7C2H2F2C2F2C2E7B2C5E2C5E2C5E2B %3D

[23]  https://suricata.readthedocs.io/en/latest/rules/differences-from-snort.html 25  https://github.com/StamusNetworks/scirius

[24]  http://www.gartner.com/technology/home.jsp

[25]  https://www.nsslabs.com

[26]  https://suricata.readthedocs.io/en/latest/rules/differences-from-snort.html

[27]  https://github.com/StamusNetworks/scirius

[28]  https://github.com/StamusNetworks/scirius

[29]  http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node29.html

[30]  https://suricata.readthedocs.io/en/latest/configuration/suricata-yaml.html#suricata-yaml-action-order

[31]  https://suricata.readthedocs.io/en/latest/index.html

[32]  https://suricata.readthedocs.io/en/latest/rules/intro.html

[33]  http://manual-snort-org.s3-website-us-east-1.amazonaws.com/

[34]  http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node27.html

[35]  https://suricata.readthedocs.io/en/latest/rules/differences-from-snort.html

[36]  http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node22.html#targetbased

[37]  http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=2016-6267

[38]  http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node33.html#SEC-

TION00469000000000000000

[39]  http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node32.html#SEC-

TION00451000000000000000

[40]  http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node32.html#SEC-

TION004522000000000000000

[41]  http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node32.html#SECTION004517000000000000000

[42]  http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node32.html#SEC-

TION00455000000000000000

[43]  http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node32.html#SECTION004511000000000000000

[44]  https://www.w3schools.com/tags/ref_urlencode.asp

[45]  https://regex101.com/

[46]  http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node32.html#SECTION004526000000000000000

[47]  https://suricata.readthedocs.io/en/latest/rules/payload-keywords.html#content

[48]  https://suricata.readthedocs.io/en/latest/rules/http-keywords.html#http-method

[49]  https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

[50]  https://suricata.readthedocs.io/en/latest/rules/http-keywords.html#http-uri-and-http-raw-uri

[51]  https://suricata.readthedocs.io/en/latest/rules/payload-keywords.html#isdataat

[52]   https://suricata.readthedocs.io/zh_CN/latest/rules/http-keywords.html#http-user-agent

[53]  https://suricata.readthedocs.io/zh_CN/latest/rules/pcre.html#pcre-perl-compatible-regular-expressions

[54]  https://tools.kali.org/information-gathering/fragrouter

[55]  https://s3.amazonaws.com/snort-org-site/production/document_files/files/000/000/032/original/target_based_frag.pdf?AWSAccessKeyId=AKIAIXACIED2SPMSC7GA&Expires=1501097853&Signature=ttDV9ycIPrONUqq2b37AH

[56]  https://nvd.nist.gov/vuln/detail/CVE-2014-6271

[57]  https://nvd.nist.gov/vuln/detail/CVE-2014-6277

[58]  https://nvd.nist.gov/vuln/detail/CVE-2014-6278

[59]  https://nvd.nist.gov/vuln/detail/CVE-2014-7169

[60]  http://lcamt​​uf.coredump.cx/p0f3/

[61]  https://github.com/gamelinux/prads

[62]  https://otx.alienvault.com/

[63]  https://www.virustotal.com/#/home/upload

[64]  https://www.riskiq.com/products/passivetotal/

[65]  https://otx.alienvault.com/

[66]  https://www.virustotal.com/#/home/upload

[67]  https://suricata.readthedocs.io/en/latest/rule-management/adding-your-own-rules.html 77  https://biot.com/capstats/bpf.html

[68]  http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node16.html#SEC-

TION00313000000000000000

[69]  https://suricata.readthedocs.io/en/latest/configuration/snort-to-suricata.html#bpf

[70]  http://suricata.readthedocs.io/en/latest/performance/ignoring-traffic.html#suppress

[71]  http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node19.html#SECTION00343000000000000000

[72]  http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node35.html

[73]  http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node34.html#detection_filter

[74]  http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node19.html#event_filtering

[75]  http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node19.html#event_filtering

[76]  http://suricata.readthedocs.io/en/latest/configuration/global-thresholds.html#global-thresholds

[77]  https://github.com/Security-Onion-Solutions/security-onion

[78]  https://github.com/hadojae/redonion

[79]  http://rocknsm.io

[80]  https://www.vagrantup.com

[81]  https://www.ansible.com

[82]  https://github.com/StamusNetworks/SELKS

[83]  https://www.elastic.co

[84]  https://www.elastic.co/products/logstash

[85]  https://www.elastic.co/products/kibana

[86]  https://evebox.org

 

猜你喜欢

转载自blog.csdn.net/allway2/article/details/107874122