HELK与APTSimulator对决:威胁狩猎实战指南

本文深入探讨HELK平台与APTSimulator工具的实战对抗,详细解析如何利用Apache Spark、GraphFrames和Jupyter Notebooks进行威胁狩猎。通过具体案例演示进程创建图分析技术,帮助安全研究人员构建有效的攻击检测能力。

HELK与APTSimulator对决:第二部分

在[HELK与APTSimulator对决:第一部分]的基础上,本文将重点关注HELK的其他有用功能,以帮助您进行威胁狩猎实践。HELK实验室提供Apache Spark、GraphFrames和Jupyter Notebooks。这些功能远远超出了标准ELK堆栈的范围,真正实现了并行计算和显著改进的处理与分析能力。这是在统一平台上熟悉这些技术的绝佳方式。

让我为您简要介绍一下这些技术,以防您尚未接触过它们。首先,请参考@Cyb3rWard0g的维基页面,了解他如何为HELK实现设计架构,如图1所示。

图1:HELK架构

首先是Apache Spark。对于HELK,“Elasticsearch-hadoop提供了Elasticsearch和Apache Spark之间的原生集成,以RDD(弹性分布式数据集)(或者更准确地说是Pair RDD)的形式,可以从Elasticsearch读取数据。“根据Apache Spark FAQ,“Spark是一个快速通用的处理引擎,兼容Hadoop数据”,可提供"闪电般的集群计算”。

其次是GraphFrames。根据GraphFrames概述,“GraphFrames是Apache Spark的一个包,提供基于DataFrame的图形。GraphFrames表示图形:顶点(例如用户)和边(例如用户之间的关系)。GraphFrames还提供了运行查询和标准图形算法的强大工具。使用GraphFrames,您可以轻松搜索图形中的模式,找到重要顶点等。”

最后是Jupyter Notebooks,将所有功能整合在一起。

来自Jupyter.org:“Jupyter Notebook是一个开源Web应用程序,允许您创建和共享包含实时代码、方程、可视化和叙述性文本的文档。用途包括:数据清理和转换、数值模拟、统计建模、数据可视化、机器学习等。“Jupyter Notebooks提供了更高级的分析/分析能力,如果您尚未涉足这一领域,这可能是您的第一个最佳机会。

让我们看看如何使用Jupyter Notebooks与基于Docker的HELK实例中填充的数据,如第一部分所述。我使用来自不同裸机Windows实例的新数据重新填充了我的HELK实例,该实例通过Winlogbeat向HELK报告,启用了Sysmon,并且由于@cyb3rops的APTSimulator而显得严重受损。

要使用Jupyter Notebooks,您需要JUPYTER CURRENT TOKEN来访问Jupyter Notebook Web界面。它在HELK安装完成时呈现给您,但您可以通过sudo docker logs helk-analytics轻松检索它,然后将URL复制并粘贴到浏览器中,首次使用令牌连接。它将看起来像这样:http://localhost:8880/?token=3f46301da4cd20011391327647000e8006ee3574cab0b163,如安装维基中所述。使用所述令牌浏览到URL后,您可以开始访问http://localhost:8880/lab,您应该立即进入Check_Spark_Graphframes_Integrations.ipynb笔记本。它位于层次结构菜单中的training > jupyter_notebooks > getting_started下。此笔记本对于确认您正在使用HELK正确摄取数据以及其集成功能完全正常运行至关重要。使用播放按钮一次逐步执行一个单元格,允许每个任务完成以避免错误。还记得上面提到的弹性分布式数据集吗?此笔记本将使用logs-endpoint-winevent-sysmon-*(Sysmon日志)索引作为源,在Elasticsearch之上创建Spark RDD,并对logs-endpoint-winevent-security-*(Windows安全事件日志)索引作为源执行相同的操作,如图2所示。

图2:Windows安全EVT Spark RDD

笔记本还将通过Spark SQL查询您的Windows安全事件,然后使用以下命令打印模式:

1
2
df = spark.read.format("org.elasticsearch.spark.sql").load("logs-endpoint-winevent-security-*/doc")
df.printSchema()

结果应类似于图3。

图3:模式

假设您的实验中的所有内容都具有相对一致性,让我们继续到Sysmon_ProcessCreate_Graph.ipynb笔记本,位于training > jupyter_notebooks中。此笔记本将再次调用Elasticsearch Sysmon索引并创建顶点和边数据帧,然后使用从相同顶点和边构建的GraphFrame创建图形。以下是一个简要的演练。

v参数(是的,用于顶点)填充为:

1
2
v = df.withColumn("id", df.process_guid).select("id","user_name","host_name","process_parent_name","process_name","action")
v = v.filter(v.action == "processcreate")

使用v.show(3,truncate=False)显示该结果集的前三行,在笔记本中显示为图4,数据来自我的APTSimulator"受害者"系统N2KND-PC。

图4:WTF, Florian :-)

我内心深处的史诗级威胁猎人认为APTSimulator通过cmd.exe创建了nslookup、7z和regedit作为进程。天才,对吧?:-)

e参数(是的,用于边)填充为:

1
e = df.filter(df.action == "processcreate").selectExpr("process_parent_guid as src","process_guid as dst").withColumn("relationship", lit("spawned"))

使用e.show(3,truncate=False)显示该结果集的前三行,生成源和目标进程ID,因为它与生成关系有关。

现在,使用g = GraphFrame(v, e)从v和e参数中定义的顶点和边数据帧创建图形。让我们通过搜索进程A生成进程B AND进程B生成进程C来结束,所需的代码和结果从笔记本中可见,如图5所示。

图5:APTSimulator的快乐生成

哦,是的,APTSimulator在一个漂亮的图形中完全实现。很好的例子是cmd.exe生成wscript.exe,然后生成rundll32.exe。或者cmd.exe生成powershell.exe和schtasks.exe。

需要确认吗?Florian的CactusTorch JS dropper在图6中有详细说明,特别是cmd.exe > wscript.exe > rundll32.exe。

图6:CactusTorch的APTSimulator源

还不相信吗?APTSimulator的schtasks.bat怎么样,根据图7,APTSimulator使用schtasks.exe加载mimikatz以实现持久性?

图7:schtasks.bat

我当然希望HELK的图形结果与APTSimulator源的良好匹配能让您满意。

HELK与APTSimulator以辉煌的 flourish 结束,这两个各自领域的怪物属于每个实验室,以实践红队与蓝队、攻击与防御、入侵与检测。我很长时间没有如此高兴地成为对抗黑暗艺术的从业者了。我衷心感谢Roberto和Florian在HELK和APTSimulator上的出色工作。我强烈建议您花时间亲自运行HELK与APTSimulator的第一部分和第二部分,您将受益匪浅。这两个工具在各自的Github上都有很好的文档,现在就去开始吧,收获成果。

干杯…直到下次。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计