使用Bro进行威胁捕获

来源:https://sqrrl.com/threat-hunting-bro/

这个博客是我如何使用Bro IDS进行威胁搜索的一个快速概述。

具体地说:

当我开始捕获特定数据集时运行的查询示例。

为组织环境定制的风险触发模板示例

我做过一个威胁捕获的例子

演示我执行的威胁捕获如何映射到威胁捕获框架

还有一些你可以做的其他捕获的想法

一、Bro是什么?

Bro是一个基于Unix的开源网络监控框架。与网络入侵检测系统(NIDS)相比,Bro通常可以用来构建NIDS,但远不止这些。Bro还可用于收集网络测量数据、进行网络取证调查、流量基线等。Bro被比作tcpdump、Snort、netflow和Perl(或任何其他脚本语言)。它是在BSD许可下发布的。”——维基百科

基本上,Bro是一个协议分析器。它将接受来自PCAP文件或实时流量提要的网络事件,观察它,并将RDP、FTP、HTTP等单独的协议解析为单独的日志文件。Bro的最大优点之一是能够将网络事件转换为可操作/有用的元数据。元数据帮助我们提供上下文,这是快速发现潜在威胁的关键。

二、与标准化数据源相对应的Bro日志:

使用Bro进行威胁捕获_第1张图片

三、逻辑拓扑结构

使用Bro进行威胁捕获_第2张图片

四、使用Bro进行威胁捕获


使用Bro进行威胁捕获_第3张图片
这张图片显示了使用netflow和Windows身份验证日志完成的横向移动威胁捕获

在不同数据集之间创建关系

使用Bro进行威胁捕获_第4张图片

上面的图像显示了我在数据中的不同实体之间创建的所有关系的高级可视化。这个高级视图允许我快速、轻松地查看不同类型的数据是如何连接的,并允许我为链接分析搜索设置一个游戏计划。


使用Bro进行威胁捕获_第5张图片

上面的可视化在高级可视化上展开,并演示了在每个正在使用的数据源和每个定义的实体之间的所有低级字段映射。这是身份验证数据和网络数据之间IP地址字段的实际映射。

五、捕获例子

下面的例子说明了如何使用上面列出的假设和列举的数据和技术。

横向运动(Windows环境)

1、你在找什么?(假设)

假设:

攻击者可能试图通过利用PsExec在我的Windows环境中横向移动。

寻找:

利用PsExec二进制程序、服务和/或网络流量的主机到主机流量之间的异常。

C$|ADMIN$|IPC$”共享用在网络流量中。

2、调查(数据)

数据集:

为了识别PsExec的使用,您将主要关注应用程序协议元数据,包括:

Netflow(“flow”数据一般)

活动目录的日志

Windows安全事件日志

多因素身份验证(MFA)日志(如果windows主机使用MFA)

额外的UAC应用程序日志(如果存在)

EDR工具日志(如果存在)

3、发现模式和IOCs(技术)

(1)使用搜索在bro_notice日志中标识“Potentially Malicious Use of an Administrative Share”消息。

(2)获取步骤1的输出,并在确认主机通过SMB合法连接到目的地时删除主机。这应该只留下需要进一步分析的无法解释的SMB连接。

(3)取第2步的结果,并将数据堆叠起来,找出对研究假设有用的数据。例如:目标IP、使用的端口、连接持续时间/长度等。

4、告知和丰富分析

您发现的涉及横向移动活动的目标IP地址、路径和端口可以作为IOCs并添加到指示器数据库,以扩展自动检测系统。

您还可以创建包级签名,以便在您发现的管理共享连接可能再次出现的情况下触发警报。

要记住,每次捕获的过程中,总有很多不同的路径可以让捕获者在特定的假设下进行处理。

5、警报或分析驱动的搜索

使用Bro检测和警告PsExec活动的一种技术是使用自定义Bro脚本查找PsExec使用C$、ADMIN$和/或IPC$的共享。这些共享在Bro通知日志中添加了“Potentially Malicious Use of an Administrative Share”的通知消息。使用PsExec可以在目标系统上创建一个名为PSEXESVCexe的可执行文件。

PsExec是一种Windows管理工具,使用管理凭证通过SMB连接到网络上的不同系统。然而,SMB被合法地用于提供文件共享功能;错误配置可能允许恶意软件在整个网络中传播。把PsExec和mimikatz的密码窃取能力结合起来,你就得到了一个横向移动的方程式。

6、使用Bro检测PsExec活动

修改代码以供使用。代码来自于此。


使用Bro进行威胁捕获_第6张图片

7、通过Bro网络传感器检测PsExec流量

除了通过PsExec的SMB远程控制外,攻击者还会将其他二进制文件上传到受害者系统或使用更多的meterpreter模块。例如,用于从内存中转储密码的工具Mimikatz可以通过C$、ADMIN$和IPC$的共享上传到远程系统。Bro有检测Mimikatz通过SMB转移的能力,也有检查其哈希与VirusTotal的关系的能力。

如果不将bro日志转储到SIEM或其他日志聚合平台,我建议使用一个简单的grep命令来搜索PsExec使用流量, “grep -iE “C$|ADMIN$|IPC$””

使用Bro进行威胁捕获_第7张图片


最后,通过bro脚本所做的所有艰苦工作,我们能够可视化使用psexec从192.168.1.100移动到192.168.1.104的事件,并为psexec添加一个bro警告,以进一步验证主机之间的关系。虽然这张照片只显示了我为便于阅读而描述的确切活动,但这是我所期望的捕获的最终结果。所有额外的数据和可能的连接都已被调查,并被排除在原始大数据集之外,直到只剩下异常/可疑/恶意事件。我认为这是一次成功的捕获。如果我什么都没发现,我也会认为这是一种成功,因为捕获的目的不是每次都有积极的恶意事件发生,而是验证一个假设,用确定的是或否来回答一个问题。祝大家好运,捕获愉快。

六、威胁情报/ TTP驱动捕获

威胁情报驱动的捕获是由威胁情报报告、威胁情报提要、恶意软件分析、漏洞扫描和其他可信来源创建的。

对于本例,我们将对http用户代理进行捕获。

(1)HTTP用户代理分析

背景和目的

我想通过分析用户代理字符串来识别恶意软件。

用户代理(UA)字符串用于标识执行HTTP请求的应用程序或服务。与合法的应用程序相似,基于http的恶意软件可能使用不同的UA字符串来识别命令和控制(C2)服务器;恶意软件也可以使用普通的UA字符串(例如,合法的web浏览器使用的UA字符串)来融入正常的web流量。

这里描述的过程也可以用于分析其他HTTP头和值,但是用户代理是最常用的搜索和检测措施之一。

(2)假设

基于http的恶意软件可能在C2阶段使用不同的UA字符串。如果我们分析网络中的UA字符串并寻找异常值,那么我们可能会发现恶意软件。

在这种类型的分析中所作的假设是,所讨论的活动在活动网络中不会“正常”或过于普遍。理想情况下,这将导致通过其他检测机制错过的恶意活动或其他禁止活动的识别,将来可以使用UAs进行检测。

(3)所需的数据

1、HTTP代理数据

2、已知-坏UAs列表(外部威胁情报或内部威胁情报)

3、HTTP请求

           此搜索需要包含HTTP请求的元数据。

            这个数据应该包括

                      HTTP请求中使用的UA字符串

                       HTTP请求的源(端点、用户或IP地址)

                       HTTP请求中请求的URI。

(4)分析技术

堆栈计数(Stack counting)

字符串匹配(String matching)

标记(Tokenization)

异常值检测(Outlier detection)

(5)定义数据集

对于这个捕获,数据集是一组用于出站HTTP请求的UA字符串。这些UA字符串的标识可能因网络而异;但是,建议从更大的数据集开始(例如,所有的UA字符串或特定类型的UA字符串),并根据搜索结果的需要减小集合的大小。

HTTP请求中看到的任何UA字符串都可以考虑包含在数据集中。但是,您可能需要考虑根据已知的合法的UA字符串定义活动组。通过过滤掉这些字符串,异常值将更加明显。(但是,请记住,过滤掉合法的UA字符串不会帮助您识别恶意使用合法的UA字符串的攻击者!)在线上有一些用于标识通用UA字符串的资源,这里有一个。

这样的查询可以用来标识所有的UA字符串:

这样的查询可用于从结果中过滤出合法的UA字符串,这是减少数据集的一种方法。

如果您已经达到了这样的程度:为了迭代地确定网络上的异常情况,您可能会发现调整查询的时间框架是有用的。例如,如果每周运行一次UA报告,那么您可能只希望为您的报告提取一周的数据。随着时间的推移,将这些结果与前几周的结果进行比较也是值得的。

(6)确定候选人

根据您的数据集,创建一个返回您感兴趣的UA字符串的查询。在数据类型范围的搜索结果太多的情况下,这可能是必要的。分离UA字符串的一种方法是查找异常短或长的字符串。对于大多数人来说,这是一种相对标准的格式,我们首先必须确定一个通用的UA字符串长度。这个查询可以这样做:

接下来,我们需要使用前面查询中的平均长度数据隔离结果。一个简单的方法是查找任何比平均长度短的UA字符串,例如:

使用Bro进行威胁捕获_第8张图片

我们将结果限制在20个,这样我们就可以快速检查结果,以确保得到正确的结果。

在这一点上,我们需要扩大以上查询的限制,并审查结果,以确定调查候选人。

使用Bro进行威胁捕获_第9张图片

有了这些结果,从列表的顶部开始(这将是最短的UA字符串),并检查每个字符串的字符长度——记住平均的UA字符串长度和UA字符串的内容,找出您认为可能值得进一步研究的异常值。查询结果的示例如下:


使用Bro进行威胁捕获_第10张图片

还有一些其他的数据堆叠片,为了识别感兴趣的候选对象,我们可以检查这些数据堆叠片。在某些情况下,这些还可以帮助我们了解我们的网络和跨系统发生的功能。

接下来,我们可以尝试识别在少数宿主上观察到哪些UAs。这可能是有趣的情况下,一个攻击者是存在的或恶意软件被部署到只有几个系统。

最后,我们还可能对在整个网络中很少观察到UAs感兴趣。在某些情况下,这个查询的结果可能与前一个不同,这可能会引入其他候选项。

(7)描述

将整个UA字符串堆栈起来,查找罕见的情况。

不过,可能有很多这样的例子。每个web插件都会稍微改变一下UA字符串,但这并不意味着有什么不好。

考虑更详细的分析,包括

标记字符串并集中于标记数量最少、最独特的标记或某种组合的字符串

寻找不正常的短字符串或长字符串

查找已知的-坏的UAs列表

(8)额外Sqrrl使用

前面部分中标识的查询都可以作为行为图中探索的起点。然而,捕获的目的之一是减少重复次数,并重新应用在捕获中所学到的知识。因此,我们可以在Sqrrl中使用另外两种机制来监视用户代理的出现。

(9)捕获报告

我们可以将每个示例候选人调查查询转换为捕获报告,以便获得快速快照,以帮助定期识别其他候选人。捕获报告特别适合于数据堆叠。


使用Bro进行威胁捕获_第11张图片

(10)风险触发

虽然Hunt报告有助于从某些搜索中获取数据,但我们可以使用风险触发器来识别与UAs相关的感兴趣的观察结果,并自动使用这些观察结果来帮助产生感兴趣的实体。

在上面的一个例子中,我们确定短的UAs相对于其他的可能是可疑的。因此,我可能想要为使用UAs观察到的实体创建一个风险触发器,其时间比确定的阈值短。


使用Bro进行威胁捕获_第12张图片

触发器还提供了一个很好的区域来使用威胁情报数据,这些数据可以从任意数量的来源收集。也许最近有一个相关的威胁被发现使用恶意软件,利用一个稍微畸形的UA在正常长度范围内。我们可以实现一个触发器,以帮助提高内部实体的分数与观察到的模式匹配。

你可能感兴趣的:(使用Bro进行威胁捕获)