使用Hayabusa和SOF-ELK处理Windows事件日志(第一部分)
| Patterson Cake
事件日志是我最喜欢的Windows取证数据之一,但它们数量庞大,在大多数安全调查中只有很小比例的事件能提供价值。单个Windows端点通常有数十万条事件日志条目,虽然获取不难,但解析、过滤和搜索以有效且高效地获取可操作情报可能具有挑战性。在本文第一部分,我们将讨论Hayabusa和"安全运营与取证ELK"(SOF-ELK)如何帮助我们在Windows端点调查中高效处理EVTX文件(Windows事件日志文件)!第二部分,我们将讨论如何将其扩展到多个系统,结合我的"快速端点调查"工作流程(https://github.com/secure-cake/rapid-endpoint-investigations; https://www.youtube.com/live/XfUjST9kXdU?feature=shared)。
Hayabusa在日语中意为"游隼",也是一款相当酷的铃木运动摩托车的同名,同时还是一个Windows事件日志"快速取证时间线生成和威胁狩猎工具"。Hayabusa由Yamato Security创建和支持,包含超过4,000条SIGMA规则和170多个内置检测规则,帮助我们找到所需的事件日志条目!当我们对EVTX文件运行Hayabusa时,会得到CSV或JSON格式的时间线输出,其中包含规则"命中"的日期/时间戳、规则标题、严重级别(从"信息"到"紧急")和事件详情。
您可以在GitHub上查看Hayabusa仓库:https://github.com/Yamato-Security/hayabusa
在执行Windows端点调查时,每个主机通常平均有20万到50万条事件日志条目,我们可以使用Hayabusa来减少和优先处理事件分析。在Hayabusa时间线输出中,我们将减少约75%的事件日志条目,这非常重要,但每个端点仍会留下数万条条目。我们可以通过严重级别进一步过滤Hayabusa输出来优先调查,重点关注高严重级别的规则命中,例如"严重"和"高"。即使经过这种程度的减少和优先级排序,我们可能仍要处理数千条条目,这在Excel或其他CSV/JSON工具中可能具有挑战性!
这就是"安全运营与取证ELK",即SOF-ELK,它是一个"专注于计算机取证调查员/分析师典型需求的大数据分析平台",以预打包虚拟机形式提供,具有用于Hayabusa摄入的预构建解析器(以及许多其他日志/文件类型),以及用于搜索和过滤的直观Web UI。感谢Phil Hagen!
您可以在GitHub上查看SOF-ELK仓库、下载预打包虚拟机等:https://github.com/philhagen/sof-elk
总结一下,EVTX文件是有用的Windows端点调查取证数据,Hayabusa可以帮助我们找到感兴趣的事件,而SOF-ELK可以帮助我们摄入、解析、然后搜索、排序和过滤EVTX输出。让我们深入了解如何为单个Windows端点实现这一点。
首先,访问Hayabusa GitHub仓库并将最新稳定版本下载到您的分析系统。请注意,Windows、Mac和Linux是受支持平台。我将使用Windows版本(撰写本文时为v.3.3.0 – hayabusa-3.3.0-win-x64.zip):https://github.com/Yamato-Security/hayabusa/releases/tag/v3.3.0
我将hayabusa-3.3.0-win-x64.zip文件解压到"C:\Tools",并将测试案例EVTX文件暂存在"D:\cases\test_case_evtx"目录中。
接下来,我将打开Windows Terminal – PowerShell 7,导航到"C:\Tools\Hayabusa-3.3.0-win-x64"目录,并通过".\hayabusa-3.3.0-win-x64.exe update-rules"命令更新Hayabusa规则。您可能会看到一堆更新的规则滚动而过!
现在规则已更新,我将使用以下命令从"test_case_evtx"文件创建JSON时间线以摄入SOF-ELK: “.\hayabusa-3.3.0-win-x64.exe json-timeline -d d:\cases\test_case_evtx -w -L -o d:\cases\test_case_evtx\hayabusa-output-Host123.jsonl”
您可以使用以下语法调用"json-timeline"命令的详细"帮助": “.\hayabusa-3.3.0-win-x64.exe json-timeline –help”
“-d"开关告诉Hayabusa在"目录"中查找所有要处理的EVTX文件,"-w"停止加载"向导”,"-L"指定"JSONL"文件输出,"-o"指定输出的路径和文件名。作为参考,我的输入包括总共381个事件日志文件,约190 MB,处理耗时约一分钟。
注意:最好唯一命名输出文件,例如"hayabusa-output-HostXYZ.jsonl"。当我们想要将多个输出文件摄入SOF-ELK时(本博客第二部分),这将使生活更轻松!
命令完成后,您应该有一个"JSONL"输出文件和一个包含扫描、检测、输出、规则等元数据的屏幕(以下摘录):
下载并解压VM(撰写本文时为v20241217.7z存档)后,您可以启动VMWare,单击"File\Open",导航到解压的SOF-ELK VM存档,并打开"SOF-ELK.vmx":
在Windows系统上运行VM时,我通常"编辑虚拟机设置"并启用"虚拟化IOMMU"以获得更好的UI性能,但这是可选的!
现在您可以启动SOF-ELK VM,使用"elk_user"登录,密码为"forensics",然后运行"sudo sof-elk_update.sh"以确保SOF-ELK是最新的:
SOF-ELK更新完成后,我们可以将Hayabusa输出复制到适当的"logstash"文件夹中,在SOF-ELK魔法发生时稍作耐心,然后通过Web UI开始分析数据。
我们将使用"scp"(安全复制)将输出数据从主机系统复制到SOF-ELK。首先,让我们检查SOF-ELK VM的IP地址: $ip -br a
注意:您的IP地址将与我的略有不同!
现在在主机系统上打开Windows PowerShell提示符,并输入以下命令,将IP地址更改为匹配您的SOF-ELK VM的IP: scp d:\cases\test_case_evtx\hayabusa-output-HostXYZ.jsonl elk_user@192.168.x.x:/logstash/hayabusa/
当您首次通过scp认证到SOF-ELK VM时,系统将提示您接受证书指纹。输入"yes"并按回车继续,然后输入"elk_user"密码:forensics。然后您应该看到文件传输完成100%。
在SOF-ELK VM上,您可以通过运行以下命令检查摄入进度和Elasticsearch索引的填充情况: sof-elk_clear.py -i list
同样,稍作耐心,您应该看到类似以下截图的内容,表明"evtxlogs"索引正在被填充:
注意:您的文档编号将不同!
现在我们可以访问SOF-ELK Web UI并开始审查Hayabusa输出。在主机系统上,打开浏览器并访问您的SOF-ELK IP地址,指定端口5601:http://192.168.x.x:5601
这应该会将您带到SOF-ELK默认仪表板,以便您查看带有节点的漂亮ELK(甚至是双管?!我超级嫉妒!):
让我们单击"汉堡"(三条线)图标并选择"Discover":
接下来,选择"Data View"下拉菜单并将Data View更改为"evtxlogs-*":
重要:现在,我们需要更改"数据视图"日期范围以反映调查的相关日期。最简单的方法是单击"Date quick select"并选择一个相对范围,例如"Last 90 days"。在设置调查范围时相对精确是个好主意,以准确约束结果并提高性能:
设置日期后,我们应该开始看到结果填充到数据视图中。在任何Web UI参数更改后,最好注意单击"Refresh"按钮!
对于我的样本EVTX文件(来自受感染的测试系统),我起始约有14.5万条事件日志条目,产生的Hayabusa时间线条目略低于1.6万条。这又是一个非常显著的减少!下一步是查找恶意活动!
我喜欢SOF-ELK(Elastic)的一点是Web UI在很大程度上可以自我引导。我喜欢从展开一个事件开始,然后选择我想要在文档视图中看到的数据字段。
单击文档条目的"Toggle dialog with details"双箭头:
这将在右侧展开文档表。现在我们可以开始审查可用字段并在文档视图中"切换"字段的开关。我将切换以下字段:
host.hostname rule.level rule.name winlog.event_id
重要:可用字段将根据原始事件类型而变化。随着我们缩小搜索结果并逐步进行分析,我们将希望根据正在分析的事件类型调整"切换"字段。
注意:您可能还希望将"labels.type"字段添加到视图中,以区分标准EVTX日志和Hayabusa处理的EVTX日志,两者都驻留在"evtxlogs"索引中。对于此示例,我们仅使用Hayabusa输出。
接下来,我通常希望审查高严重性检测。您可以通过规则级别(rule.level)“过滤进"这些规则级别或过滤掉低严重性级别。我将继续使用以下KQL语法过滤掉"低严重性"规则级别(info、low、med): NOT rule.level: “info” and NOT rule.level: “low” and NOT rule.level: “med”
注意:有大约93种格式化SOF-ELK查询的方式!如果您有适合您的方式,请使用!有更短的方式起草上述查询,但此查询故意冗长和迂腐,以超级清晰且易于理解/编辑。
我现在已将样本数据减少到23个文档进行初步审查。审查完高严重性条目后,我将为分析构建上下文(日期/时间、用户、文件、路径等),然后使用该上下文指导我对"med"规则命中的分析。
现在让您的分析工作流程指导您!缩小到与调查相关的日期/时间,切换字段以突出显示调查问题的潜在答案,根据任何字段或多个字段过滤进/出结果,扩展和收缩所有上述内容,直到确定攻击范围,并将精确过滤的数据导出到CSV以安全保存或与他人共享:
请继续关注第二部分,我们将在本文基础上构建,将EVTX处理从"一个"扩展到"多个"主机,作为我"快速端点调查"工作流程的一部分(https://github.com/secure-cake/rapid-endpoint-investigations, https://www.youtube.com/live/XfUjST9kXdU?feature=shared)。