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安全事件,然后使用以下代码打印模式:
|
|
结果应类似于图3。
图3:模式
假设您的实验中所有内容相对一致,让我们继续到Sysmon_ProcessCreate_Graph.ipynb
笔记本,位于training > jupyter_notebooks
。此笔记本将再次调用Elasticsearch Sysmon索引,创建顶点和边数据框,然后创建由相同顶点和边构建的GraphFrame生成的图。以下是一个简要演练。
v参数(是的,用于顶点)填充为:
|
|
显示该结果集的前三行,使用v.show(3,truncate=False)
,在笔记本中显示为图4,数据来自我的APTSimulator“受害”系统N2KND-PC。
图4:WTF, Florian :-)
我内心的史诗级超级威胁猎人认为APTSimulator通过cmd.exe创建了nslookup、7z和regedit作为进程。天才,对吧?:-)
e参数(是的,用于边)填充为:
|
|
显示该结果集的前三行,使用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上都有详细文档,现在就去,开始,获利。
干杯…直到下次。