
Un script PowerShell pour effectuer l'authentification PKINIT avec l'API Windows depuis une machine non jointe à un domaine.
Un script PowerShell pour effectuer une authentification PKINIT avec l'API Windows depuis une machine non jointe à un domaine.
Cette cmdlet crée une nouvelle session d'ouverture de session avec le certificat spécifié via PKINIT.
Elle est conçue pour être exécutée sur une machine virtuelle non jointe à un domaine. La cmdlet possède deux modes : l'un qui définit des clés de registre et l'autre qui patche la mémoire de LSASS pour contourner les vérifications côté client liées au certificat du contrôleur de domaine. Ces vérifications échouent lorsqu'elles sont exécutées sur une machine qui n'est pas jointe au domaine.
En mode registre (par défaut), des privilèges administrateur sont nécessaires pour définir les clés de registre pertinentes (et les restaurer à la fin). Si les clés sont déjà définies, les privilèges administrateur ne sont pas requis. De plus, le certificat de l'autorité de certification doit être ajouté à la liste des autorités de certification de confiance. Si cette méthode échoue (par exemple en raison d'une vérification qui n'est pas contournée avec les clés de registre), la méthode de patch peut être essayée à la place. Elle est moins élégante mais contournera toute vérification côté client liée au certificat du KDC.
En mode patch (-PatchLsass), la fonction KerbCheckKdcCertificate dans LSASS sera patchée. Comme KerbCheckKdcCertificate n'est pas exportée par kerberos.dll, les symboles doivent être récupérés. Pour que les symboles soient automatiquement récupérés par cette cmdlet, la variable d'environnement _NT_SYMBOL_PATH doit être définie (par exemple SRV*c:\symbols*https://msdl.microsoft.com/download/symbols). Si les symboles ne sont pas déjà sur le disque, une connexion Internet est nécessaire pour les télécharger. Le SDK Windows est également nécessaire pour télécharger les symboles. Par défaut, le script recherchera dans C:\Program Files (x86)\Windows Kits\10\Debuggers\x64 les DLL dont il a besoin (dbghelp.dll et symsrv.dll).
Pour une explication plus détaillée, voir le billet de blog associé.
PS > Invoke-RunAsWithCert user.pfx -Domain CORP.LOCAL