关于NativeBypassCredGuard

NativeBypassCredGuard是一款功能强大的Credential Guard安全测试工具,该工具可以帮助广大研究人员测试Credential Guard的安全态势。

1736861096_678665a86605450464644.png

NativeBypassCredGuard 是一款旨在通过仅使用 NTAPI 函数(由 ntdll.dll 导出)修补 WDigest.dll 来测试Credential Guard 的工具。它有两种版本:C# 和 C++。


运行机制

该工具在磁盘上的 WDigest.dll 文件中定位模式“39 ?? ?? ?? ?? 00 8b ?? ?? ?? ?? 00”,然后计算必要的内存地址,最后修补 WDigest.dll 中两个变量的值:g_fParameter_UseLogonCredential(为 1)和g_IsCredGuardEnabled(为 0)。

这种行为将强制将纯文本凭证存储在内存中,确保从那时起,每当用户登录时,凭证都以明文形式存储。因此,下次转储 LSASS 进程时,它可能包含纯文本密码。

使用的NTAPI函数和运行流程如下:

1736861105_678665b1895de8c98812e.png

NtOpenProcessToken 和 NtAdjustPrivilegesToken 启用 SeDebugPrivilege 特权

NtCreateFile 和 NtReadFile 打开磁盘上的 DLL 文件的句柄并读取其字节

NtGetNextProcess 和 NtQueryInformationProcess 获取 lsass 进程的句柄

NtReadVirtualMemory 和 NtQueryInformationProcess 获取 WDigest.dll 基地址

NtReadVirtualMemory 读取变量的值

NtWriteProcessMemory 将新值写入变量


仅使用 NTAPI 函数,就可以重新映射 ntdll.dll 库以绕过用户模式挂钩和安全机制,这是该工具的可选功能。如果使用,则会从在调试模式下创建的进程中获取干净版本的 ntdll.dll。


注意事项

该工具专为 64 位系统设计,因此必须编译为 64 位二进制文​​件


工具安装

广大研究人员可以直接使用下列命令将该项目源码克隆至本地:

https://github.com/ricardojoserf/NativeBypassCredGuard.git

然后打开最新版本的Visual Studio,导入项目并根据目标操作系统架构完成代码编译即可。


工具使用

NativeBypassCredGuard.exe <OPTION> <REMAP-NTDLL>


参数选项

必填项

check:读取当前值

patch:写入新值


重新映射ntdll(可选)

true:重新映射 ntdll 库

false(或省略):不重新映射 ntdll 库


工具运行演示

读取值(无需ntdll 重新映射):

NativeBypassCredGuard.exe check

1736861165_678665ed4302e295f507a.png

补丁值(使用ntdll 重新映射):

NativeBypassCredGuard.exe patch true

1736861184_67866600a0aeaed7f1516.png

项目地址

NativeBypassCredGuard:【GitHub传送门】

参考资料

https://github.com/0x3rhy/BypassCredGuard-BOF

https://itm4n.github.io/credential-guard-bypass/

https://neuralhax.github.io/wdigest-digging-the-dead-from-the-grave

https://blog.xpnsec.com/exploring-mimikatz-part-1/

https://ricardojoserf.github.io/nativebypasscredguard/

本文版权归漏洞盒子所有