WdToggle - Cobalt Strike的信标对象文件(BOF),它使用直接的系统调用来启用WDigest凭证缓存。
背景
此PoC代码基于以下出色的博客文章:
探索Mimikatz-第1部分-WDigest
绕过凭据守卫
通过BOF代码中的内联汇编利用直接系统调用提供了一种更安全的与LSASS流程进行交互的方式。使用直接系统调用可避免AV / EDR软件拦截用户模式API调用。
Visual Studio(C )不支持x64处理器的内联汇编。因此,为了编写包含我们已编译/汇编代码的单个信标对象文件,我们必须使用Mingw-w64(适用于Windows的GCC)编译器。
这个是做什么用的?
- 演示使用内联汇编的直接系统调用的用法,以提供更安全的方式与LSASS流程进行交互。
- 通过在LSASS进程(wdigest.dll模块)中将全局参数切换为1来启用WDigest凭据缓存
g_fParameter_UseLogonCredential
。 - 规避凭据保护(如果启用)由切换
g_IsCredGuardEnabled
LSASS进程内变量为0(wdigest.dll模块)。 - 使用Beacon对象文件在Beacon进程中执行此代码。
- 克隆此存储库。
- 确保已安装Mingw-w64编译器。例如,在Mac OSX上,我们可以使用ports集合安装Mingw-w64(
sudo port install mingw-w64
)。 - 运行
make
命令以编译Beacon目标文件。 - 在Cobaltstrike信标上下文中,运行
inline-execute
命令并提供目标WdToggle.o
文件的路径。 - 运行Cobaltstrike
logonpasswords
命令(Mimikatz),注意新用户登录名或解锁桌面会话的用户再次启用了明文密码。
局限性
- 此内存修补程序不是永久重启的,因此重启后,您必须重新运行代码。
wdigest!g_fParameter_UseLogonCredential
和wdigest!g_IsCredGuardEnabled
全局变量的内存偏移量可能会在Windows版本和修订版之间改变。我们为不同的版本提供了一些偏移,但是这些偏移可能会在将来的版本中更改。您可以添加自己的版本偏移量,可以使用Windows调试器工具找到该偏移量。
侦测
要通过LSASS内存访问来检测凭证盗窃,我们可以使用Sysmon之类的工具。可以将Sysmon配置为记录打开lsass.exe进程句柄的进程。通过应用此配置,我们可以收集访问LSASS进程的可疑进程的遥测,并帮助检测可能的凭证转储活动。当然,还有更多选择来检测凭据盗用,例如使用Windows Defender ATP之类的高级检测平台。但是,如果您没有使用这些平台的预算和奢侈,那么Sysmon是可以帮助填补空白的免费工具。
项目地址:
https://github.com/outflanknl/WdToggle