HELK对抗APTSimulator:威胁狩猎实战与高级分析技术

本文深入探讨HELK平台的高级功能,包括Apache Spark、GraphFrames和Jupyter Notebooks在威胁狩猎中的应用。通过分析APTSimulator生成的攻击数据,展示如何利用图形化分析技术检测恶意进程链和持久化攻击,为安全实践者提供实用的技术指导。

HELK对抗APTSimulator:威胁狩猎实战与高级分析技术

引言

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

HELK架构与技术组件

Apache Spark

HELK利用Elasticsearch-hadoop提供Elasticsearch与Apache Spark之间的原生集成,具体形式为RDD(弹性分布式数据集)(准确说是Pair RDD),可从Elasticsearch读取数据。根据Apache Spark FAQ,Spark是一个快速通用处理引擎,兼容Hadoop数据,可提供"闪电般快速的集群计算"。

GraphFrames

GraphFrames是Apache Spark的一个包,提供基于DataFrame的图处理。GraphFrames表示图:顶点(如用户)和边(如用户之间的关系)。GraphFrames还提供强大的查询和标准图算法工具。使用GraphFrames,您可以轻松搜索图中的模式,查找重要顶点等。

Jupyter Notebooks

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

实战:使用Jupyter Notebooks分析APTSimulator数据

访问Jupyter Notebooks

要使用Jupyter Notebooks,您需要JUPYTER CURRENT TOKEN来访问Jupyter Notebook Web界面。HELK安装完成时会显示该令牌,但您也可以通过sudo docker logs helk-analytics轻松检索它,然后将URL复制粘贴到浏览器中,首次使用令牌连接。如安装wiki所述,URL类似:http://localhost:8880/?token=3f46301da4cd20011391327647000e8006ee3574cab0b163

使用所述令牌浏览到URL后,您可以开始于http://localhost:8880/lab,应立即进入Check_Spark_Graphframes_Integrations.ipynb笔记本。该笔记本位于层次结构菜单中的training > jupyter_notebooks > getting_started下。此笔记本对于确认您是否正确使用HELK摄取数据以及其集成功能是否完全正常运行至关重要。使用播放按钮逐步执行每个单元格,允许每个任务完成以避免错误。

创建Spark RDD

上述提到的弹性分布式数据集(RDD)?此笔记本将使用logs-endpoint-winevent-sysmon-*(Sysmon日志)索引作为源,在Elasticsearch之上创建Spark RDD,并对logs-endpoint-winevent-security-*(Windows安全事件日志)索引作为源执行相同操作,如图2所示。

图2:Windows安全EVT Spark RDD

查询Windows安全事件

笔记本还将通过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参数)

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参数)

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如何,根据图7,APTSimulator友好地使用schtasks.exe加载mimikatz以实现持久化?

图7:schtasks.bat

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

结论

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

干杯…直到下次。

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