
NTAPI関数のみを使用してWDigest.dllにパッチを適用し、Credential Guardをバイパスします。
NativeBypassCredGuard は、ntdll.dll がエクスポートする NTAPI 関数のみを使用して WDigest.dll にパッチを適用することで Credential Guard をバイパスするように設計されたツールです。C# と C++ の 2 つのバージョンがあります。
このツールは、ディスク上の WDigest.dll ファイル内でパターン "39 ?? ?? ?? ?? 00 8b ?? ?? ?? ?? 00" を検索し(References セクションの最初の投稿で説明されているように、このパターンはすべての Windows バージョンのこのファイルに存在します)、必要なメモリアドレスを計算し、最後に WDigest.dll 内の g_fParameter_UseLogonCredential(1 に)と g_IsCredGuardEnabled(0 に)という 2 つの変数の値をパッチします。
これにより、メモリ内での資格情報の平文保存が強制され、以降ユーザーがログインするたびに資格情報がクリアテキストで保存されるようになります。その結果、次回 LSASS プロセスをダンプすると、パスワードが平文で含まれる可能性があります。
使用される NTAPI 関数は次のとおりです:

NTAPI 関数のみを使用することで、ntdll.dll ライブラリをリマップしてユーザーモードフックやセキュリティメカニズムをバイパスすることが可能です。これはこのツールのオプション機能です。使用する場合、クリーンなバージョンの ntdll.dll はサスペンドモードで作成されたプロセスから取得されます。
NativeBypassCredGuard.exe <OPTION> <REMAP-NTDLL>
オプション(必須):
ntdll のリマップ(任意):
値の読み取り(ntdll リマップなし):
NativeBypassCredGuard.exe check

値のパッチ適用(ntdll リマップあり):
NativeBypassCredGuard.exe patch true

このツールは 64 ビットシステム向けに設計されているため、64 ビットバイナリとしてコンパイルする必要があります
lsass へのハンドルを開くことができない場合や、PEB 構造体が読み取れない場合は動作しません。後者については、lsass プロセスから ntdll!NtReadVirtualMemory と ntdll!NtQueryInformationProcess を使用してベースアドレスを取得する代わりに、kernel32!LoadLibrary を使用してプロセス内に WDigest.dll を読み込み、そのベースアドレスを取得する方法を選択できます(このコードは C バージョンではコメントアウトされています)。ただし、ntdll.dll ではなく kernel32.dll がエクスポートする関数を使用することになり、プロセスがその DLL を読み込むのはおそらく奇妙に見えるでしょう :)
0x3rhy 氏がこのプロジェクトに基づく BOF ファイルを作成しました: BypassCredGuard-BOF
Revisiting a Credential Guard Bypass(著: itm4n)- DLL の .text セクションを検索するためのパターンを拝借した素晴らしい分析です
WDigest: Digging the dead from the grave(著: neuralhax)- g_fParameter_UseLogonCredential に他の値を使用できることを証明した素晴らしいブログです。まだテストしていませんが、useLogonCredential_Value 変数を試すことができます
Exploring Mimikatz - Part 1 - WDigest(著: xpn)- WDigest の資格情報キャッシュをリバースエンジニアリングして解説した素晴らしいブログ記事です