本文是有关Sysmon威胁分析的系列文章中的第一篇。本系列的所有其他部分:
第1部分。Sysmon日志分析简介
第2部分。使用Sysmon事件数据检测威胁(我们在这里)
第3部分。使用图形深入分析Sysmon威胁
在本节中,我们将更深入并开始使用详细信息由Sysmon提供。这是我们将要致力于的三个主要方面:
- 使用PowerShell直接访问有关进程的详细信息;
- 建立和可视化流程的层次结构是发现威胁的第一步。
- 使用Sysmon元数据提供可用于高级威胁调查的重要指标,例如计算启动特定进程的频率。
使用Get-Sysmonlogs
现在,让我们仔细研究一下将Sysmon事件转换为PowerShell对象的出色命令。我为不必为每个字段手动编写单独的代码行而感到有些自豪。实际上,这是代码的重大披露:
$events = Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" | where { $_.id -eq 1 }
foreach ($event in $events) {
$ev = $event.Message -split "`r`n"
$jsons="{ "
foreach ($line in $ev) {
$line=$line -replace "\\","\\" `
-replace "\{"," " `
-replace "\}"," " `
-replace '"','\"' `
-replace "`n"," "
$line=$line -replace '(\s*[\w\s]+):\s*(.*)', '"$1":"$2",'
$jsons = $jsons + $line }
$jsons =$jsons + '"blah" : "blah" }'
ConvertFrom-Json -InputObject $jsons
}
}
现在所有代码都可以在GitHub上获得,您可以将其作为自己的项目的Sysmon模块下载并导入。唯一的不稳定与删除一些讨厌的字符(方括号,反斜杠,行尾字符,引号)有关,以使输出更接近JSON。
因此,入侵者大量涌入系统的经典信号是使用命令“ whoami”,并且通常在“ hostname”之后。掌握某人帐户的黑客(或内部人员)想确保非人身化有效,因此他经常在受害者服务器上时立即键入上述命令。对于其余部分,“ whoami”和“ hostname”不是它们将在自己系统的控制台中键入的词,即使他们曾经使用命令行。
使用我的整洁命令来访问所有Sysmon日志条目,我们可以轻松地构建一个进程名过滤链(就像在第一部分中所做的那样)。同时,借助Sysmon,我们可以通过查看以下内容更精细地解决该问题父进程的命令行。
通常,当黑客渗透到网络并访问命令行时,它就是过时的cmd-顺便说一句,这正是使用psexec或smbexec进行黑客攻击时的情况。使用get-symonlogs的输出,可以捕获由这些旧Shell 产生的 whoami进程,这将很好地证明存在威胁。
注意:Whoami是通过过时的cmd shell启动的,
从实际的角度来看,根本不可能搜索Windows事件日志的“原始”日志和匹配过程。如我们所见,Sysmon录音为威胁分析打开了许多可能性。因此,让我们通过将Sysmom数据映射到更复杂的结构中来继续我们的探索。
数据结构的基础:列表和图形
Sysmon日志不仅为我们提供了父进程的命令行,还为我们提供了进程ID!
我想您已经猜到这意味着什么。但仍然:现在,我们可以将层次结构中的流程以及网络连接在一起。通过记住计算机科学的基本概念,您可以找到用于获取此类信息的自然数据结构-链接列表和图形是最先想到的。
起初,我以为我必须清除《诗人和副厨师的数据结构》的副本,但后来互联网帮助了我。我偶然发现了道格·芬克(Doug Finke)关于用PowerShell编写的Gihub上的基本算法的丰富集合。谢谢道格!
经过一些学习后,我能够使用他的算法来构造我的Sysmon事件。我将数据结构构建为列表和图形,然后使用API编写了PowerShell函数以搜索命令并显示流程层次结构。凉。
我将其命名为show-threat-path。它在流程层次结构中进行深度优先搜索,并显示指定为输入参数的根应用程序的应用程序名称和相关命令。对于我的第一个测试,我搜索了“ whoami.exe”。这就是我所看到的:
流程层次结构:流程2452看起来可疑!
在上面的输出中注意到那些与进程2452相关联的whoami的人,还可以通过过时的cmd shell调用额外的奖励,而该cmd shell又是由Windows文件夹中一个名字奇怪的exe文件启动的。
嗯如果您熟悉此处描述的psexec远程调用的机制,那么在您看来,您应该已经敲响了警钟。但是,我要告诉您一个小秘密:扮演黑客的角色,我以前使用Impacket python脚本从远程Linux服务器启动了whoami。
目的是证明借助Sysmon丰富的日志和一小部分PowerShell,您可以准备一个完全实用的实用程序来识别漏洞,就像我刚才所做的那样。显示威胁路径。
使用有向图搜寻威胁
是时候做些奇怪的事情了。利用所有来自Sysmon的过程信息,您可以更一般地查看关系。换句话说,我想查看正在运行的应用程序-PowerShell.exe,Explorer.exe等。-作为图的顶点,并将它们与依次启动它们的应用程序相关联。结果是一个图,显示了应用程序如何相互交互(而不是为每个流程实例创建单独的顶点)。
从技术的角度来看,我们正在谈论一种有向图,其中的路径可以说是从应用程序到其父流程的单向路线。
在这一点上,很高兴能看到我在说什么的可视化。幸运的是,有一个很棒的PowerShell图形可视化实用程序GraphViz,它可以通过PSQuickGraph获得非常简单的包装器。然后用一小段代码...
#Let's graph it!!!
$gv = New-Graph -Type BiDirectionalGraph # PSQuickGraph
foreach ($e in $g.getAllEdges() ) { $g from Doug Fink's functions
$vs= $e.startvertex
$ve= $e.endvertex
PSQuickGraph\Add-Edge -From $vs.value.Key -To $ve.value.Key -Graph $gv |Out-Null
}
Show-GraphLayout -Graph $gv
...您可以通过GraphViz界面可视化应用程序之间的复杂交互:
GraphViz:用于可视化过程层次结构的PowerShell库
它做什么?本质上,它是识别威胁的图形方法。现在我们可以尝试在图形上查找异常,而不是像我们之前使用show-threat-path命令那样查找文本的特定签名。
这个想法是要了解图和子图的邻域的正常图片-它们通常看起来像可视化中的连接结构-然后尝试查找看起来更分离的顶点。实际上,我们的眼睛已经很好地适应了这一任务。幸运的是,还有一些简单的邻域检测和威胁检测算法可用。曾几何时,您谦卑的仆人甚至写了一篇文章,介绍如何使用与美国著名的革命英雄相关的社交联系网络中的邻里检测技术。
这种方法在发现攻击者方面的优势在于,黑客可以更改其技术并掩盖其攻击,但是对他们而言,隐藏其图形模式非常困难。
在本文的第三部分,我们将更深入地研究用于发现漏洞的算法和方法的分析和应用。和我们在一起!