
Um script PowerShell para executar autenticação PKINIT com a API do Windows a partir de uma máquina não ingressada no domínio.
Um script PowerShell para realizar autenticação PKINIT com a API do Windows a partir de uma máquina não ingressada no domínio.
Este cmdlet cria uma nova sessão de logon com o certificado especificado via PKINIT.
Ele é destinado a ser executado numa VM não ingressada no domínio. O cmdlet tem dois modos: um que define chaves de registro e outro que aplica patch na memória do LSASS para contornar verificações do lado do cliente relacionadas ao certificado do controlador de domínio. Essas verificações falham quando executadas numa máquina que não está ingressada no domínio.
No modo de registro (o padrão), privilégios de administrador são necessários para definir as chaves de registro relevantes (e restaurá-las no final). Se as chaves já estiverem definidas, privilégios de administrador não são necessários. Além disso, o certificado da AC deve ser adicionado à lista de autoridades de certificação confiáveis. Se este método falhar (por exemplo, devido a uma verificação que não é contornada pelas chaves de registro), o método de patch pode ser tentado como alternativa. Ele é menos elegante, mas contornará qualquer verificação do lado do cliente relacionada ao certificado do KDC.
No modo de patch (-PatchLsass), a função KerbCheckKdcCertificate no LSASS será corrigida (patch).
Como KerbCheckKdcCertificate não é exportada por kerberos.dll, os símbolos precisam ser obtidos.
Para que os símbolos sejam obtidos automaticamente por este cmdlet, a variável de ambiente
_NT_SYMBOL_PATH precisa estar definida (por exemplo, SRV*c:\symbols*https://msdl.microsoft.com/download/symbols).
Se os símbolos ainda não estiverem no disco, é necessária uma conexão com a Internet para baixá-los.
O Windows SDK também é necessário para baixar os símbolos. Por padrão, o script procurará
em C:\Program Files (x86)\Windows Kits\10\Debuggers\x64 os DLLs de que precisa
(dbghelp.dll e symsrv.dll).
Para uma explicação mais detalhada, consulte o blogpost associado.
PS > Invoke-RunAsWithCert user.pfx -Domain CORP.LOCAL