标注的博客| 安全研究| 渗透测试| APT

首页

威胁狩猎与敌方模拟:赫尔克与攻击模拟机

作者 cayo 时间 2020-03-26
all

继续我们在威胁狩猎和对手模拟:赫尔克对APTSimulator-第1部分中的结束,我将集中我们的注意力在额外的,有用的赫尔克功能,以帮助您在您的威胁狩猎实践。HELK提供Apache Spark、GraphFrames和Jupyter笔记本作为其实验室产品的一部分。这些能力远远超出了一个标准的ELK堆栈,而这正是并行计算和显著改进的处理和分析真正发挥作用的地方。这是在一个统一的平台上向您介绍这些技术的好方法。

如果你还没有接触到这些技术,让我为你分解一下。首先,请参阅@Cyb3rWard0g的wiki页面,了解他是如何为HELK实现设计它的,如图1所示。

图1:HELK ArchitectureFirst,ApacheSpark。对于HELK,“Elasticsearch hadoop提供了Elasticsearch和Apache Spark之间的本地集成,以RDD(弹性分布式数据集)的形式(或者精确地说是成对的RDD)从Elasticsearch读取数据。”根据Apache Spark FAQ,“Spark是一个与hadoop数据兼容的快速通用处理引擎”,提供“快速照明”集群计算。“第二,图形框架。在GraphFrames概述中,“GraphFrames是Apache Spark的一个包,它提供了基于数据帧的图。graphframe表示图:顶点(例如,用户)和边(例如,用户之间的关系)。GraphFrames还为运行查询和标准图形算法提供了强大的工具。使用GraphFrames,您可以轻松地搜索图形中的模式,找到重要的顶点,等等。”最后,Jupyter笔记本将其组合在一起。来自Jupyter.org:“Jupyter笔记本是一个开源的web应用程序,允许您创建和共享包含实时代码、方程式、可视化和叙述文本的文档。用途包括:数据清理和转换、数值模拟、统计建模、数据可视化、机器学习等。“Jupyter笔记本提供了更高级别的分析/分析功能,如果您没有将脚趾浸入水中,这可能是您的第一次,最好的机会。让我们来看看使用Jupyter笔记本,将数据填充到基于Docker的HELK实例中,如第1部分所实现的。我用另一个裸机Windows实例的新数据重新填充了我的HELK实例,该实例使用Winlogbeat、Sysmon启用,并且由于@cyb3rops的APTSimulator而看起来非常脆弱。若要使用Jupyter笔记本,需要使用Jupyter当前令牌来访问Jupyter笔记本的web界面。它是在你的HELK安装完成时呈现给你的,但是你可以很容易地通过sudo docker logs HELK analytics检索到它,然后复制并粘贴到你的浏览器中,第一次用令牌连接。它会是这样的,http://localhost:8880/?令牌=3f46301da4cd2001391327647000e8006ee3574cab0b163,如安装wiki中所述。使用所述令牌浏览到URL后,可以从http://localhost:8880/lab开始,在那里您应该立即转到Check_Spark_Graphframes_Integrations.ipynb笔记本。它可以在“培训>jupyter_笔记本>入门”下的“层次”菜单中找到。这个笔记本对于确认您正确地使用HELK接收数据以及它的集成是否完全正常工作是非常重要的。使用“播放”按钮一次单步执行一个单元格,允许每个任务完成,以避免出现错误。还记得上面提到的弹性分布式数据集吗?此笔记本将在Elasticsearch的顶部创建一个Spark RDD,使用logs endpoint winevent sysmon-*(sysmon logs)索引作为源,并使用logs endpoint winevent security-*(窗口安全事件日志)索引作为源执行相同的操作,如图2所示。

图2:Windows安全EVT Spark RDT笔记本还将通过Spark SQL查询您的Windows安全事件,然后使用:df=Spark.read.format(“org.elasticsearch.Spark.SQL”).load(“logs endpoint winevent Security-*/doc”)df.print schema()打印模式。结果应与图3类似。

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

图3:SchemaSumming all matches with relative consistence in your实验中,让我们转到Sysmon_ProcessCreate_Graph.ipynb笔记本,可以在training>jupyter_笔记本中找到。本笔记本将再次调用Elasticsearch Sysmon索引,并创建顶点和边数据帧,然后使用从这些顶点和边构建的GraphFrame创建一个图形。这里有一个小的遍历。v参数(是,对于顶点)用: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所示,数据来自我的辅助刺激“受害者”系统N2KND-PC。

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:WTF,Florian:-)史诗般的超级威胁猎人相信APTSimulator通过cmd.exe创建了nslookup、7z和regedit进程。天才,对吧?:-)e参数(是,对于边)填充为: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和目标进程ID。现在,使用g=GraphFrame(v,e)从v&e参数中定义的顶点和边数据帧创建图形。让我们把它带回家,搜索进程a生成进程B和进程B生成进程C,所需的代码和结果如图5中的笔记本所示。

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) g = GraphFrame(v, e)

图5:APTSimulator的快乐产卵哦,是的,APTSimulator在一个很好的图表中完全实现了。在生成wscript.exe的cmd.exe中可以看到一个很好的例子,然后生成rundll32.exe。或者cmd.exe生成powershell.exe和schtasks.exe。需要确认吗?Florian的CactusTorch JS dropper如图6所示,特别是cmd.exe>wscript.exe>rundll32.exe。

图6:Cactustorchs的刺激源直到不确定?APTSimulator的schtasks.bat如何,如图7所示,APTSimulator会友好地加载带有schtasks.exe的mimikatz以实现持久性?

图7:schtasks.batI当然希望HELK的图形结果与APTSimulator源很好地匹配,满足您的需求。HELK对APTSimulator以一个辉煌的繁荣结束,这两个怪物在他们的领域属于每一个实验室,练习红色对蓝色,攻击和防御,妥协和检测。我很长一段时间都不高兴成为一名黑魔法防御的实践者。我衷心感谢罗伯托和弗洛里安在直升机和助推器方面所做的伟大工作。我不能强烈地建议,你会有多大的好处,从花时间来运行第1部分和第2部分的赫尔克与APTSimulator为自己。这两个工具在各自的github上都有很好的文档记录,现在开始,开始,盈利。

干杯!罗斯·麦克雷