本文是Sysmon威胁分析系列的第一部分。该系列的所有其他部分:
第一部分介绍SYSMON日志分析(我们这里)
第2部分:使用SYSMON事件数据来检测威胁
3部分深入SYSMON威胁分析使用图形
如果你到信息安全,你可能经常要明白在持续的攻击中。如果您已经做好准备,则可以在原始原始日志中查找非标准活动-例如,运行DownloadString命令的PowerShell脚本或伪装成Word文件的VBS脚本-只是浏览Windows事件日志中的最新活动。但这是一个非常大的头痛。幸运的是,Microsoft创建了Sysmon,以使攻击分析更加轻松。
是否想了解Sysmon日志中显示的威胁背后的基本思想?下载我们的WMI活动指南作为间谍工具,您将发现内部人员如何秘密监视其他员工。使用Windows事件日志的主要问题是缺少有关父进程的信息,即无法从中了解流程的层次结构。相反,Sysmon日志条目包含父级的进程ID,名称和要运行的命令行。谢谢微软。
在本系列的第一部分中,我们将了解您可以使用Sysmon的基本信息做什么。在第二部分中,我们将充分利用有关父流程的信息来创建更复杂的合规性结构,这些结构称为威胁图。在第三部分中,我们将看一个简单的算法,该算法通过分析图“权重”来扫描威胁图以查找非标准活动。最后,您将获得一种整洁的(可理解的)概率方法来检测威胁以作为奖励。
第1部分:Sysmon日志分析简介
有什么可以帮助您了解事件日志的复杂性?最终,SIEM。它可以规范化事件并简化其后续分析。但是我们不必走得那么远,至少在一开始。开始时,要了解SIEM的原理,就可以尝试出色的免费实用程序Sysmon。而且它非常容易使用。要走的路,微软!
Sysmon具有什么功能?
简而言之,有关过程的有用且易读的信息(请参见下图)。您会发现很多有用的详细信息,这些信息不在Windows事件日志中,但最重要的是以下字段:
- 进程ID(十进制,而不是十六进制!)
- 父进程ID
- 进程命令行
- 父进程命令行
- 文件图像哈希
- 文件图像名称
Sysmon既可以作为设备驱动程序也可以作为服务安装- 此处有更多详细信息。它的主要优势是能够分析来自多个来源的日志,关联信息并将结果值输出到位于Microsoft-> Windows-> Sysmon-> Operational path的单个事件日志文件夹中的能力。在我对不断增长的Windows日志的调查中,我经常不得不在PowerShell日志文件夹和Security文件夹之间切换,翻阅事件日志,进行英勇的尝试以某种方式匹配它们之间的值。这绝非易事,正如我后来意识到的那样,最好立即储备阿司匹林。
Sysmon通过提供有用的信息(或供应商喜欢说的是可执行的)来帮助您理解基础流程,从而实现了巨大的飞跃。例如,我启动了一个秘密的wmiexec会话,以模拟智能内部人员在网络中的移动。这是您将在Windows事件日志中看到的内容:
Windows日志显示了有关该过程的一些信息,但没有什么用。加上十六进制的进程ID ???
熟悉黑客基础知识的专业IT专业人员应该对命令行有所怀疑。使用cmd.exe然后运行另一个命令,并将输出重定向到一个具有奇怪名称的文件,这显然与命令和控制(C2)软件操作类似:通过这种方式,使用WMI服务创建了伪外壳程序。
现在,让我们看一下Sysmon条目的等效项,注意它为我们提供了多少附加信息:
在一个屏幕截图SYSMON特点:有关过程以可读格式的详细信息
,您看到的不仅是命令行,而且文件名,路径可执行应用程序的Windows知道它(“Windows命令处理器”),该的标识符父过程中,命令行父启动了cmd-shell以及父进程的真实文件名。归根结底,一站式服务!
从Sysmon日志中,我们可以得出结论,我们在“原始”日志中看到的可疑命令行很有可能不是员工正常工作的结果。相反,它是由类似C2的进程wmiexec生成的,正如我前面提到的,它是由服务WMI进程(WmiPrvSe)直接生成的。现在,我们有了一个迹象,表明远程攻击者或内部人员正在尝试公司基础结构。
介绍Get-Sysmonlogs
当然,Sysmon将日志放在一个地方非常好。但是,如果可以通过编程方式访问单个日志字段(例如通过PowerShell命令),可能会更好。在这种情况下,您可以编写一个小的PowerShell脚本来自动搜索潜在威胁!
我不是第一个有这个想法的人。很好的是,一些论坛帖子和GitHub 项目已经解释了如何使用PowerShell解析Sysmon日志。就我而言,我想避免必须为每个Sysmon字段编写单独的语法分析行。因此,我使用了一个懒惰的人的原则,在我看来,结果是我想到了一些有趣的东西。
第一个重点是团队的能力Get-WinEvent读取Sysmon日志,过滤必要的事件并将结果输出到PS变量,如下所示:
$events = Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" | where { $_.id -eq 1 -or $_.id -eq 11}
如果您想自己测试命令,则通过在$ events数组的第一个元素$ events [0] .Message中显示内容,可以得到一系列具有非常简单格式的文本字符串:Sysmon字段的名称,冒号以及值本身。
万岁!将Sysmon日志输出转换为JSON就绪格式,
您是否认为与我相同?稍加努力,您就可以将输出转换为JSON格式的字符串,然后使用功能强大的ConvertFrom-Json命令将其直接加载到PS对象中。
在下一部分中,我将向您展示用于转换的PowerShell代码-非常简单。同时,让我们看一下我作为PS模块安装的名为get-sysmonlogs的新命令可以做什么。
无需通过不方便的事件日志界面进行Sysmon日志分析,我们可以轻松地直接从PowerShell会话中搜索增量活动,并使用PS where命令(别名“?”)来缩短输出:
通过WMI启动的cmd shell列表。使用我们自己的Get-Sysmonlogs团队,进行威胁分析很便宜
!我创建了一个Sysmon日志轮询工具,就好像它是一个数据库一样。在我们有关EQL的文章中,我们注意到其中描述的炫酷实用程序将执行此功能,尽管从形式上说,它仍然是通过类似于SQL的真实接口进行的。是的,EQL 很漂亮,但是我们将在第3部分中进行探讨。
Sysmon和图分析
让我们抽象一下,思考一下我们刚刚创建的内容。本质上,我们现在可以通过PowerShell使用Windows事件数据库。如前所述,记录之间存在连接或连接-通过ParentProcessId-因此您可以获得完整的流程层次结构。
如果您已经阅读了《难以捉摸的恶意软件历险记》系列,就会知道黑客喜欢创建复杂的多阶段攻击,在这种攻击中,每个进程都扮演着自己的小角色,并为下一步做好了准备。仅从“原始”日志中很难捕获到这种情况。
但是有了我的Get-Sysmonlogs命令和一个额外的数据结构(我们将在下文中介绍)(当然,这是一个图形),我们将拥有一种检测威胁的实用方法-只需执行正确的顶点搜索即可。
像在DYI博客项目中一样,您越是在小规模地分析威胁的细节上投入越多,您越会意识到在组织级别检测到威胁有多么困难。而这种认识是极其重要的。
我们将在本文的第二部分中遇到第一个有趣的困难,我们将开始将Sysmon事件连接到更复杂的结构。