
ドメイン非参加マシンからWindows APIを使用してPKINIT認証を実行するためのPowerShellスクリプト。
Windows API を使用して、ドメイン非参加マシンから PKINIT 認証を実行する PowerShell スクリプトです。
このコマンドレットは、指定された証明書を使用して PKINIT 経由で新しいログオンセッションを作成します。
このコマンドレットは、ドメイン非参加 VM 上で実行することを想定しています。モードは 2 つあります。1 つは レジストリキーを設定するモード、もう 1 つはドメインコントローラーの証明書に関連するクライアント側のチェックを バイパスするために LSASS メモリにパッチを当てるモードです。これらのチェックは、 ドメインに参加していないマシンで実行すると失敗します。
レジストリモード(既定)では、関連するレジストリキーを設定(および最後に復元)するために管理者権限が必要です。 キーがすでに設定されている場合、管理者権限は必要ありません。 さらに、CA 証明書を信頼された証明機関のリストに追加する必要があります。 この方法が失敗した場合(たとえば、レジストリキーではバイパスされないチェックが原因)、 代わりにパッチメソッドを試すことができます。パッチメソッドは洗練されていませんが、 KDC 証明書に関連するクライアント側のチェックをすべてバイパスします。
パッチモード(-PatchLsass)では、LSASS の KerbCheckKdcCertificate 関数にパッチが適用されます。
KerbCheckKdcCertificate は kerberos.dll によってエクスポートされていないため、シンボルを取得する必要があります。
このコマンドレットがシンボルを自動的に取得するには、環境変数
_NT_SYMBOL_PATH を定義する必要があります(例: SRV*c:\symbols*https://msdl.microsoft.com/download/symbols)。
シンボルがディスク上にまだない場合、ダウンロードにはインターネット接続が必要です。
また、シンボルをダウンロードするには Windows SDK も必要です。既定では、スクリプトは
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64 内を検索して、必要な
DLL(dbghelp.dll と symsrv.dll)を見つけます。
より詳細な説明については、関連する ブログ記事 を参照してください。
PS > Invoke-RunAsWithCert user.pfx -Domain CORP.LOCAL