关于NativeBypassCredGuard
NativeBypassCredGuard是一款功能强大的Credential Guard安全测试工具,该工具可以帮助广大研究人员测试Credential Guard的安全态势。
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函数和运行流程如下:
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
补丁值(使用ntdll 重新映射):
NativeBypassCredGuard.exe patch true
项目地址
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