为CrowdStrike猎鹰活动建立网络安全湖屋(第二部分
在网络防御方面,可见性至关重要——你无法防御你看不见的东西。在现代企业环境下,可见性指的是监视和说明所有端点设备、网络通信和关键资产的能力。事件日志允许安全团队构建正常、预期行为的基线,并构建识别异常活动的规则。当然,前提是首先要收集这些日志并进行搜索。这个重要的部分经常被忽视。幸运的是,借助Databricks Lakehouse平台的强大功能,可以轻松构建可扩展、健壮且具有成本效益的网bob体育客户端下载络安全分析程序。
在第一部分在这个系列中,我们经历了建立一个网络安全湖屋的过程,使我们能够收集和操作CrowdStrike Falcon的日志数据。在这篇博客文章(第二部分)中,我们将探索具体的用例,包括数据探索、自动丰富和分析开发。在本博客的最后,您将配备一些示例笔记本,为您提供一般指导和示例,以帮助启动您的威胁检测和调查计划。
我们将调查的数据是一组CrowdStrike Falcon日志,由从企业网络端点收集的生产数据组成。由于此信息的敏感性,某些细节已被掩盖,以保持数据的安全性和机密性。这些数据是在几周内连续收集的,反映了典型的工作日使用模式。
为什么CrowdStrike数据需要Databricks ?
有了Databricks,我们可以轻松地摄取、整理和分析CrowdStrike的大规模日志。有了Databricks强大的集成框架,我们可以用来自其他来源的上下文进一步丰富这些日志,将原始数据转换为更有意义的见解。丰富使我们能够更容易地关联安全事件,优先处理事件,减少误报率,并预测未来的安全威胁。
利用Databricks处理CrowdStrike日志的另一个好处是,它支持大规模的历史分析。传统上,构建、管理和维护日志数据是一个效率低下且成本高昂的过程。使用Databricks Lakehouse架构的廉价对象存储和开放格式模型,组织能够更长时间地保留这些数据集。通过访问高度丰富的历史安全数据,组织可以随着时间的推移评估其安全态势,构建增强的检测和响应能力,并执行更熟练的威胁搜索操作。此外,Databricks平台还配备了先进的开箱即用工具bob体育客户端下载,有助于以经济高效的方式构建先进的安全湖屋。
方法
数据收集和输入只是我们寻求建立一个有效的网络安全分析平台的开始。bob体育客户端下载一旦我们有了数据,我们的下一步是探索数据,以揭示模式、特征和其他感兴趣的项目。这个过程通常称为用户和实体行为分析(UEBA),涉及监控组织中人类用户和实体的行为。
我们首先执行一些基本的探索性数据分析,以确定关键变量和关系。CrowdStrike在端点上捕获了数百种事件类型。我们将这些事件分为以下几类:
- 用户活动
- 网络活动
- 端点信息和活动(包括文件活动和进程管理)
我们为每个活动分配了一组相应的事件类型。以下是我们的映射示例:
活动 | 事件类型 | 活动内容 |
---|---|---|
用户活动 | Useridentity | 标识设备上运行的进程的事件,包括系统标识。 |
userlogon | 用户登录-从哪个设备,什么时间,IP信息等。稍后我们将使用这些信息来说明如何检测可疑的登录。 | |
网络活动 | NetworkListenIP4和NetworkListenIP6 | 在安装了CrowdStrike代理的设备上监听端口。执行一些接受传入连接的软件可能会增加攻击面。 |
NetworkConnectIP4 & NetworkConnectIP6 | 从设备到远程端点的连接-本地和远程IP地址,端口和协议。我们可以使用这些信息来匹配已知ioc的连接。 | |
端点的活动 | Fileopeninfo | 打开的文件和打开文件的进程 |
hostinfo | 有关运行Falcon的端点的特定主机信息 | |
Processrollup2 | 在主机上正在运行或已完成运行的进程详细信息。 |
数据规范化和丰富
在深入构建分析之前,我们首先需要执行一些初步的规范化和充实。在这种情况下,规范化是指重新组织数据以限制冗余、格式化数据条目并提高条目类型的整体内聚性。这是一个重要的步骤——适当的数据清理和规范化可以更有效地使用数据。例如,我们希望拥有正确的数据类型,以便对时间戳、端口和其他对象执行范围查询和比较。
CrowdStrike Falcon日志为json格式。此外,时间戳编码之间存在差异;有些是长编码,有些是双编码。还有300多种不同的事件类型,每种类型都有不同的模式和字段。为了方便地管理规范化过程,我们编写了一个简单的分析器,它可以识别数据类型,并以编程方式生成执行非字符串字段规范化的代码。
在这种情况下利用Databricks的另一大优势是,我们可以轻松地利用来自外部和内部来源的信息丰富数据。在这个分析中,我们使用了地理和网络位置信息MaxMind的GeoIP和自治系统(AS)数据库。这可以进一步扩大,包括其他来源的数据。类似地,我们添加了用户定义的函数来计算网络社区id这使我们能够在多个表之间关联数据,并确定“稳定”的网络通信模式(意味着相同的设备定期到达相同的网络端点)。
地理丰富使我们能够看到人们是从哪些地理位置登录的。我们还可以选择不同的粒度级别(例如国家和城市):
选择aip_geo.country_code作为的国家,数(1)作为问从crowdstrike_enriched.userlogon在哪里to_date (时间戳)=当前日期()集团通过aip_geo.country_code
在本例中,我们使用了第三方库情节要以更细的粒度查看数据:
数据布局
CrowdStrike Falcon日志可以轻松增长到pb级,拥有适当的数据布局和数据压缩对于获得更快的查询响应时间至关重要。在数据库里我们可以启用optimizeWrite自动压缩在增量表中创建的拼花文件。
Delta表可以进一步优化数据不而且z值.数据跳过依赖于拥有正确的数据类型,如int和时间戳,并允许显著减少数据读取时间。使用Z-Order进行优化,以改进数据布局,这将进一步帮助跳过扫描和读取与我们正在运行的查询不相关的数据。
建立基线
一旦我们确定了我们感兴趣的数据,下一步是构建一个数据基线作为比较基准。我们可以很容易地生成一个数据配置文件直接在我们的笔记本使用Databricks总结命令:
此摘要包括几个有用的统计信息和每个属性的值分布。在上面的示例中,我们生成了processrollup2的汇总统计信息。
我们也有兴趣了解最常用的远程端口(除了“标准”端口,如HTTPS)。这是一个简单的查询:
选择*从NetworkConnectIP4在哪里RemoteAddressIP4_is_global=真正的而且RemotePort不在(443,80,53,22,43)
上面查询的结果可以像这样在Databricks笔记本上显示出来。
从丰富的数据中获得见解
我们的数据摄取和浓缩管道就位后,下一步是什么?根据我们的目标,我们有很多选择,包括攻击模式分析、预测分析、威胁检测、系统监控、风险评分和分析各种安全事件。下面我们将展示一些网络安全分析的例子。
在开始之前,我们需要了解如何将不同的事件联系在一起。例如,大多数事件类型都有一个传感器id(aid),用于标识端点上安装的代理,以及对ProcessRollup2表中的TargetProcessId列的引用ContextProcessId。
1.查找运行着潜在易受攻击服务的节点
实现易受攻击的Microsoft远程桌面协议(RDP)、Citrix服务和NetBios版本的服务经常成为寻求访问端点的攻击者的目标。有数十种记录在案的病毒利用在其上运行的NetBios进程端口445.类似地,一个开放的RDP端口3389可能导致拒绝服务攻击。
CrowdStrike Falcon代理记录监听端口的进程信息为NetworkListenIP4
而且NetworkListenIP6
事件。我们可以使用这些信息来识别正在侦听传统上归属于潜在易受攻击服务的端口的进程。让我们先用以下查询来检查过去30天内每天归因于这些特定端口的事件数量:
与all_data作为((选择LocalPort to_date (时间戳)作为日期, aip_is_global从NetworkListenIP4)联盟所有(选择LocalPort to_date (时间戳)作为日期, aip_is_global从NetworkListenIP6))选择日期LocalPort,数(1)作为数从all_data在哪里LocalPort在(3389,139,445,135,593)——RDP, Netbios,而且aip_is_global=真正的而且日期>当前日期()-30.集团通过LocalPort,日期订单通过日期asc
正如我们在图中看到的,大多数监听事件都归因于NetBios(尽管我们有一大块rdp相关的事件):
此时,我们可以通过连接processrollup2表来检查侦听这些端口的进程的更详细数据。我们可以利用TargetProcessId字段将活动链接到端点流程,并使用流程ID链接到其他事件。最后,我们可以通过联接ParentProcessId列来构建进程的层次结构。
与all_data作为((选择LocalPort,时间戳, ContextProcessId, aip_is_global从NetworkListenIP4)联盟所有(选择LocalPort,时间戳, ContextProcessId, aip_is_global从NetworkListenIP6))选择d.LocalPort, pr.CommandLine, aid, aip_as从all_data d加入processrollup2公关在d.ContextProcessId=pr.TargetProcessId在哪里LocalPort在(3389,139,445,593,135)—RDP, Netbios和Windows RPC而且d.aip_is_global=真正的而且to_date (d.timestamp)>当前日期()-30.订单通过d.timestampdesc
2.关于已执行应用程序的信息
关于程序执行的信息记录为processrollup2
事件。这些事件包含详细的执行概要文件,包括程序可执行文件的绝对路径、命令行参数、执行开始时间、应用程序二进制文件的SHA256、平台架构等。bob体育客户端下载我们将从一个简单的查询开始,计算每个特定平台的应用程序执行数量:bob体育客户端下载
选择event_bob体育客户端下载platform,数(1)作为数从processrollup2集团通过event_bob体育客户端下载platform订单通过数desc
一些平台类bob体育客户端下载型包括关于应用程序类型的附加数据(例如,它是控制台应用程序还是GUI应用程序,等等)。让我们来看看在MS Windows上使用的应用程序类型:
选择情况下ImageSubsystem当1然后“本地”当2然后“Windows的GUI”当3.然后“Windows控制台”当7然后“Posix控制台”当256然后WSL的其他的“未知”结束作为AppType,数(1)作为数从processrollup2在哪里event_bob体育客户端下载platform=“赢”集团通过ImageSubsystem订单通过数desc
正如预期的那样,大多数执行都是GUI应用程序:
我们可以更深入地挖掘一个特定的类别。让我们来看看Windows上最流行的控制台应用程序:
选择regexp_extract (ImageFileName , "^.*\\\\([^\\\\]+$)",1)作为文件名,数(1)作为数从Processrollup2在哪里event_bob体育客户端下载platform=“赢”而且ImageSubsystem=3.集团通过文件名订单通过数desc
3.用户如何登录Windows?
有多种方式登录到Windows工作站-交互式,远程交互式(通过RDP)等。由CrowdStrike Falcon记录的每个登录事件都有一个数字LogonType标志,其中包含中所述的值微软的文档.让我们研究一下登录类型及其频率:
选择情况下LogonType当0然后“系统”当2然后“互动”当3.然后“网络”当4然后“批”当5然后“服务”当7然后“解锁”当8然后“NetworkCleartext”当9然后“NewCredentials”当10然后“RemoteInteractive”当11然后“CachedInteractive”其他的concat (“无名:”LogonType)结束作为LogonTypeName,数(1)作为数从userlogon在哪里event_bob体育客户端下载platform=“赢”集团通过LogonType排序通过数desc
现在让我们看一下更详细的信息——哪些用户是通过RDP登录,通过网络登录,还是作为系统用户登录?我们将从系统用户开始-让我们看看哪些进程与这些登录事件相关:
选择ul。UserSid, LogonTime, pr.CommandLine, ul。援助,ul.aip_as从userlogon ul加入processrollup2公关在ul。ContextProcessId=pr.TargetProcessId在哪里LogonType=0订单通过LogonTimedesc
同样,我们可以查看通过网络登录的用户:
选择ul。UserSid, LogonTime, pr.CommandLine, ul。援助,ul.aip_as从userlogon ul加入processrollup2公关在ul。ContextProcessId=pr.TargetProcessId在哪里LogonType=3.订单通过LogonTimedesc
4.根据已知的ioc匹配连接数据
以前的查询提取的信息很有趣,但我们真正感兴趣的是,我们的端点是否正在解析任何已知的命令与控制(C2)服务器的名称。关于这类服务器的信息可以从不同的来源获得,例如Alien Labs Open Threat Exchange (OTX™),或ThreatFox.对于本例,我们使用的数据来自特定威胁信息—数据导出为CSV格式,导入到Delta Lake中。该数据集包含多种类型的条目,例如,“hostname”用于指定确切的主机名,或“domain”用于注册域下的任何主机名,我们可以将该信息用于跟踪DNS请求的表(DnsRequest事件类型)。查询相对简单,我们只需要为不同类型的条目使用不同的列:
- “hostname”类型的IoC条目应该与DNS请求表的DomainName列相匹配。
- 类型为“domain”的IoC条目应该与“DomainName_psl”匹配。Registered_domain列,该列由使用公共后缀列表提取已注册的域。
当我们发现任何与ioc匹配的信息时,我们提取客户端机器的信息(aid, aip,…)和发出DNS请求的进程(CommandLine, ProcessStartTime,…)
与domain_matches作为(选择DomainName, aid, aip, ContextProcessId, aip_geo, aip_as从dnsrequest d加入c2_servers c在d.DomainName=c.indicator在哪里c.indicator_type=的主机名联盟所有选择DomainName, aid, aip, ContextProcessId, aip_geo, aip_as从dnsrequest d加入c2_servers c在d.DomainName_psl.registered_domain=c.indicator在哪里c.indicator_type=“域”)选择dm.DomainName, dm.aid, pr.CommandLine, pr.ProcessStartTime, dm.aip, dm.ContextProcessId, dm.aip_geo, dm.aip_as从domain_matches dm加入processrollup2公关在dm.ContextProcessId=pr.TargetProcessId
我们没有任何截图显示在这里,因为我们没有任何匹配:-)
接下来是什么?
在这篇博客中,我们演示了如何利用Databricks Lakehouse平台来构建可扩展、健壮且具有成本效益的网络安全分析。bob体育客户端下载我们演示了CrowdStrike Falcon日志数据的丰富,并提供了如何将结果数据用作威胁检测和调查过程的一部分的示例。
在本系列的下一篇博客中,我们将深入研究如何创建可操作的威胁情报,以管理漏洞,并使用CrowdStrike Falcon Data提供更快、近实时的事件响应。请继续关注!
我们还提供了一些笔记本样品[1][2]您可以导入到自己的Databricks工作区。笔记本的每个部分都有代码和功能的详细描述。我们邀请您给我们发电子邮件(电子邮件保护)我们期待您的问题和建议,以使本笔记本更容易理解和部署。
如果您不熟悉数据库,请参阅这有关如何使用Databricks笔记本的详细说明的文档。