使用 SYSMON + ELK 寻找 MIMIKATZ - 系列的第 2 部分

https://malwarenailed.blogspot.com/2017/10/hunting-mimikatz-using-sysmon-elk-part.html

在我之前的文章中,我们看到了 sysmon 日志记录和 powershell 增强日志记录以及使用 ELK 的可视化来检测涉及最近攻击中广泛使用的混淆 powershell 脚本的恶意活动是多么有用。

在这篇新博文中,我描述了如何使用 sysmon 和 powershell 增强型日志记录 + ELK 来寻找在某处网络中运行的 mimikatz。为此,我使用三种不同的机制在端点上执行 mimikatz:

1. 从命令行运行 mimikatz 二进制文件,模拟攻击者能够在主题端点上获取 mimikatz 二进制文件的场景,从而攻击者从模仿提示

2.利用metasploit在端点上利用EternalBlue漏洞MS17-010(CVE-2017-0147),获取meterpreter shell,加载mimikatz模块然后运行命令

3.运行Powersploit“Invoke-Mimikatz.ps1”使用powershell远程和反射注入以反射性地将 mimikatz DLL 加载到端点的内存中,然后将凭据/哈希转储到攻击者的 powershell 控制台上。


在每个场景之后,我分析了 Sysmon 和 PS 脚本块日志,以找出如何识别与 mimikatz 攻击有关的事件(访问 lsass.exe 进程和转储凭据)。一旦我确定了日志和攻击之间的关系,我就能够在 Kibana 中组合一些简单的查询来检测 Mimikatz 攻击。

场景 1:从命令行运行已编译的二进制文件:


首先我从命令提示符处执行二进制文件并运行命令以转储凭据

 

其余是我从事件查看器中捕获的有趣日志,并且不言自明:


注意 GrantedAccess: 0x1010当恶意二进制文件访问 lsass.exe 进程时:


清理/删除索引

接下来,我使用以下命令清理 Elastic DB 中的日志

curl -XDELETE '192.168.1.143:9200/winlogbeat-*?pretty'

我在受害者端点上利用 EternalBlue。建立反向 https (8443) 时请注意端口 (49228)

我寻找 lsass.exe 进程,以便将恶意代码从 spoolsvc.exe 迁移到 lsass.exe

我运行meterpreter的本机hashdump,然后加载mimkatz并运行它的命令


我再次查看事件以查找相关日志:


我们可以看到 lsass.exe 连接到管道 \wkssvc

wkssvc 接口用于 管理 lanmanworkstation 服务。(参考:http ://www.hsc.fr/ressources/articles/win_net_srv/msrpc_wkssvc.html )



恶意进程还连接到 \wkssvc 管道以进行基于 LPC 的通信


 



接下来,我们看到恶意进程从源端口 49228(我们在上面的利用阶段看到)建立了与 kali 盒的反向 https 连接。我们能否制定一个关联规则来检测 Eternalblue:“如果一个进程连接到管道 \wkssvc (Sysmon EventID 18),然后同一进程与具有 SYSTEM 用户 (Sysmon EventID 3) 的远程计算机建立网络连接”然后同样的过程也创建了一个管道(Sysmon EventID 17)。

管道的一些其他相关事件,即由恶意进程在上面创建。服务进程正在为服务“nmhupj”(与管道同名)、起始值(手动)和 Imagepath 设置值。映像路径是“cmd.exe /c echo nmhupj > \\.\pipe\nmhupj ”。这只是将管道名称与管道本身相呼应??!

注意服务的命令行(ImagePath)值 

服务开始值设置为手动

我认为这是 Eternalblue 漏洞利用结束并获得 Meterpreter 会话的地方。


下一个事件序列与从 Meterpreter 运行 Mimikatz 模块的命令有关: 

对于使用 mimikatz Meterpreter 模块远程执行的命令,请参阅 GrantedAccess 值为0x1400 或 0x1410 或 0x147a。这与从命令行执行 mimikatz 二进制文件时的0x1010形成对比。

最后我们看到了 CreateRemotethread 事件(事件 8),其中 TargetImage 是 lsass.exe。这是一个高保真事件,几乎总是表示恶意:

使用反射 dll 注入运行 mimikatz(Powersploit Mimikatz 模块)

wsmprovhost.exe 是 WinRM 远程 Powershell 会话

我们可以看到这个进程连接到管道 \lsass

wsmprovhost.exe 创建了一些临时的 powershell 脚本和模块

这里我们看到目标端口 5985,用于使用 winrm 进行 powershell 远程处理

参考:https ://blogs.technet.microsoft.com/christwe/2012/06/20/what-port-does-powershell-remoting-use/


接下来我们看到 wsmprovhost.exe 访问 lsass.exe 进程。GrantedAccess 值为0x143a  。当 mimikatz 从meterpreter ( 0x1400 OR 0x1410 OR 0x147a) 运行时,这又是不同的,当从命令行执行mimikatz 二进制文件时,这又是不同的。

让我们也看看检测 Mimikatz 相关 PS ScriptBlock 日志的一些方法:


注入内存的去混淆 PS 代码如下所示(事件 ID 4104)。注意 VirtualAlloc 和 memset

还可以看到其他 PS 日志(如事件 ID 800)调用 System.Reflection 函数以在运行时在内存中创建程序集。请参阅我过去的博客文章,了解如何扭转这一点。

下面的 Kibana 查询是不言自明的,对于检测访问 lsass.exe 以转储凭据的恶意进程非常有价值。