
Ein PowerShell-Skript zur Durchführung der PKINIT-Authentifizierung mit der Windows-API von einem nicht in die Domäne eingebundenen Rechner aus.
Ein PowerShell-Skript zur Durchführung der PKINIT-Authentifizierung mit der Windows-API von einem nicht domänengebundenen Rechner.
Dieses Cmdlet erstellt mithilfe von PKINIT eine neue Anmeldesitzung mit dem angegebenen Zertifikat.
Es ist dafür gedacht, auf einer VM ausgeführt zu werden, die nicht der Domäne beigetreten ist. Das Cmdlet verfügt über zwei Modi: einen, der Registrierungsschlüssel setzt, und einen, der den LSASS-Speicher patcht, um clientseitige Prüfungen im Zusammenhang mit dem Zertifikat des Domänencontrollers zu umgehen. Diese Prüfungen schlagen fehl, wenn sie auf einem Rechner ausgeführt werden, der nicht der Domäne beigetreten ist.
Im Registrierungsmodus (Standard) sind Administratorrechte erforderlich, um die entsprechenden Registrierungsschlüssel zu setzen (und am Ende wiederherzustellen). Wenn die Schlüssel bereits gesetzt sind, sind keine Administratorrechte erforderlich. Darüber hinaus muss das CA-Zertifikat zur Liste der vertrauenswürdigen Zertifizierungsstellen hinzugefügt werden. Wenn diese Methode fehlschlägt (z. B. wegen einer Prüfung, die mit den Registrierungsschlüsseln nicht umgangen wird), kann stattdessen die Patch-Methode versucht werden. Sie ist weniger elegant, umgeht aber jede clientseitige Prüfung im Zusammenhang mit dem KDC-Zertifikat.
Im Patch-Modus (-PatchLsass) wird die Funktion KerbCheckKdcCertificate in LSASS gepatcht. Da KerbCheckKdcCertificate nicht von kerberos.dll exportiert wird, müssen Symbole abgerufen werden. Damit die Symbole von diesem Cmdlet automatisch abgerufen werden können, muss die Umgebungsvariable _NT_SYMBOL_PATH definiert sein (z. B. SRV*c:\symbols*https://msdl.microsoft.com/download/symbols). Wenn die Symbole noch nicht lokal vorhanden sind, wird eine Internetverbindung benötigt, um sie herunterzuladen. Zum Herunterladen der Symbole wird außerdem das Windows SDK benötigt. Standardmäßig sucht das Skript in C:\Program Files (x86)\Windows Kits\10\Debuggers\x64 nach den DLLs, die es benötigt (dbghelp.dll und symsrv.dll).
Eine ausführlichere Erklärung finden Sie im zugehörigen Blogbeitrag.
PS > Invoke-RunAsWithCert user.pfx -Domain CORP.LOCAL