HELK与APTSimulator对决:第二部分 - 威胁狩猎与图分析实战

本文深入探讨了HELK平台的高级功能,包括Apache Spark、GraphFrames和Jupyter Notebooks在威胁狩猎中的应用。通过实际案例展示了如何利用图分析技术检测APTSimulator模拟的攻击行为,包括进程创建关系和恶意软件持久化机制的分析。

HELK与APTSimulator对决:第二部分

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

若您尚未接触这些技术,请容我简要介绍。首先,请参考@Cyb3rWard0g的wiki页面,了解他如何为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实例中的数据。我重新填充了HELK实例,数据来自另一个裸金属Windows实例,该实例通过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,如安装wiki中所述。浏览到带令牌的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投放器在图6中详细说明,特别是cmd.exe > wscript.exe > rundll32.exe。

图6:CactusTorch的APTSimulator源

还不信服?如何关于APTSimulator的schtasks.bat,其中APTSimulator友好地使用schtasks.exe加载mimikatz以实现持久化,根据图7?

图7:schtasks.bat

我当然希望HELK的图结果与APTSimulator源完美匹配,让您满意。

HELK与APTSimulator对决以辉煌的 flourish 结束,这两个领域中的巨兽属于每个实验室,以实践红队与蓝队、攻击与防御、妥协与检测。我很长时间没有这么高兴成为防御黑暗艺术的实践者了。衷心感谢Roberto和Florian在HELK和APTSimulator上的出色工作。我强烈建议您花时间亲自运行HELK与APTSimulator的第一和第二部分,您将受益匪浅。两种工具在各自的Github上都有详细文档,现在就去,开始,获利。

干杯…直到下次。

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