如何检测并阻止基于 Impacket 工具集的 Wmiexec 横向移动

10月 20, 2023 技术分享

背景

网络攻击者在获取到一个主机系统权限后,往往会尝试渗透并控制网络中的其他主机系统,以获得更多的访问权限和更多的网络活动范围,这被称为横向移动,绝大部分攻击者尝试过使用 Impacket 中的 Wmiexec 进行横向移动。

我们发现,近期有很多基于 Impacket 的图形化网络渗透工具的发布,这说明,这款流行了 8 年之久的工具集终于被脚本小子们关注到,并将更广泛的应用于各种意图的网络攻击中。

Impacket 与 Wmiexec

Impacket 是一个用于操作网络协议的 Python 开源工具集,包含多个用于远程服务执行、Windows 凭据转储、数据包嗅探和 Kerberos 操作的工具。其中,wmiexec.py 经常被应用在各种网络攻击活动中,它可以通过远程系统开放的 Windows Management Instrumentation (WMI) 合法服务,在远程系统上执行任意 cmd 命令。

虽然 WMI 是合法服务,但这不表示所有使用 WMI 的行为者都没有恶意,尤其是使用 wmiexec.py 的行为者,所以我们将重点关注 wmiexec.py 的行为特征,下面我们将通过模拟攻击来重现这些行为。

模拟攻击

我们准备了两台 Windows Server 2019 x64 虚拟机,其中一台用于模拟攻击者(A),在 A 主机中下载并安装脚本小子喜欢使用的 Impacket 图形化操作工具:

另一台模拟被横向移动的目标远程主机(B),部署复杂之眼客户端,并确保 WMI 服务与 DCOM 135 端口和 SMB 445 端口处于可用状态,如下图所示:

在 WMIEXEC 操作页中填写 B 的 IP、管理员用户名、密码(或 NTLM) 和将要执行的 cmd 命令,点击执行,如下图所示:

命令结果框中返回了 wmiexec.py 的运行结果,我们继续通过这种方式执行 ipconfig 与 net user 命令,全部成功。

分析与检测

接下来,在复杂之眼端点检测与响应系统中寻找上述 cmd 命令执行痕迹,如下图所示:

打开这些行为日志,我们发现了有趣的命令行细节:

当我们执行命令时,wmiexec.py 会通过执行附带 /Q 和 /c 参数的 cmd.exe,间接运行我们的命令,如 whoami,然后将全部命令结果通过管道符写入 ADMIN$ 共享目录的随机文件中,我们在 wmiexec.py 源码中可以找到对应部分实现:

接下来我们寻找这些 cmd.exe 的父进程,这样有助于我们了解 wmiexec 横向移动的目标作用主体,如下图所示:

所以,wmiexec.py 在目标主机上进程行为关系链为:wmiprvse.exe->cmd.exe,我们可以结合该进程关系与上述的特殊 cmd.exe 命令行特征制定针对 wmiexec.py 的检测规则。

此时,复杂之眼端点检测与响应系统中已经完成了全部的相关威胁检测与自动关联:

攻击无效化

完全确认当前网络环境中不存在此类行为后,我们可以对 wmiexec.py 进行自动拦截,再次通过 Impacket 图形化工具执行 whoami 命令,已无法获取命令执行结果:

目标主机中弹出复杂之眼端点安全警报,指示了一个被阻止的恶意进程启动:

再次刷新威胁细节页面,可以观察到被阻止的进程与相关警报:

总结

随着 Impacket 图形化工具的流传,从不了解 wmiexec 实现原理的脚本小子也可以快速的进行危险的横向移动操作,通过对实际操作的过程复现与行为分析,我们总结了一个针对 wmiexec 的策略,并通过复杂之眼端点检测与响应系统帮助您预防 wmiexec 横向移动。

您可以在您的网络中自行通过 Impacket 图形化工具,验证您已经部署的其他终端安全软件是否可以抵御这个古老且有效的横向移动操作 :)


复杂之眼 EDR 是新一代 EDR/DLP/XDR 融合解决方案,点击下方链接,申请 14 天免费试用:

https://www.mistiny.com/index.php/trial-submit/