
Emula cartões inteligentes PIV NIST SP 800-73 no Windows usando um certificado PFX e chave privada, permitindo autenticação por cartão inteligente para sessões RDP, Citrix e VMware Horizon.
O PIVert é um emulador de smart card PIV NIST SP 800-73. Você pode fornecer ao PIVert um arquivo PFX contendo um certificado e a chave privada correspondente, e a ferramenta emulará o cartão para o Windows como um cartão PIV genuíno. O cartão pode então ser usado para autenticação via RDP, Citrix e VMWare Horizon usando o recurso integrado de redirecionamento de smart card.
Em uma máquina limpa que não tenha usado o PIVert anteriormente, o primeiro passo é instalar o driver do leitor de smart card virtual BixVReader. AVISO: isso instala um certificado de autoridade de certificação raiz confiável autoassinado, pois o driver é autoassinado usando um certificado de teste. A etapa de instalação também define a opção de política de grupo AllowCertificatesWithNoEKU. Sem essa opção, apenas certificados com o EKU de logon com smart card são oferecidos para autenticação. Com essa opção habilitada, certificados com o EKU de Autenticação de Usuário também ficam disponíveis para autenticação.
.\PIVert.exe install
[=] AllowCertificatesWithNoEKU on SmartCard Credential Provider not set, enabling...
[+] Enabled AllowCertificatesWithNoEKU on SmartCard Credential Provider
[=] Writing BixVReader.ini config to C:\Windows
[=] Installing driver signing certificate into Root and Trusted Publishers local machine store
[=] Installing driver MSI
[+] Installer completed
Para emular um cartão PIV usando um arquivo PFX, basta especificar o arquivo PFX e a senha do PFX como argumentos de linha de comando.
.\PIVert.exe .\Administrator.pfx password
[=] Connected to Smartcard Data Pipe
[=] Connected to Smartcard Event Pipe
[+] Connected Virtal Smart Card Driver
[+] Virtual card inserted
[=] Press ESC to exit, or any other key to remove and reinsert the virtual card?
[=] Unsupported INS ca with CLA 0
[=] Request for PIV DataObject: CardHolderUniqieID
[=] Request for PIV DataObject: CertPIVAuth
[=] Request for PIV DataObject: CertSign
[=] Request for PIV DataObject: CertKeyMan
[=] Request for PIV DataObject: CertCardAuth
[=] Request for PIV DataObject: KeyHistory
[=] Request for PIV DataObject: CertPIVAuth
[=] Request for PIV DataObject: CertSign
[=] Request for PIV DataObject: CertCardAuth
[=] Request for PIV DataObject: CardHolderUniqieID
[=] Request for PIV DataObject: CertKeyMan
[=] Request for PIV DataObject: KeyHistory
Parece haver um bug no driver (ou potencialmente no meu código :D) onde, às vezes, a inserção do cartão virtual não é detectada pelo Windows devido a problemas na leitura do ATR do cartão virtual. Para contornar esse problema, você pode pressionar qualquer tecla diferente de ESC para remover e reinserir virtualmente o cartão. Você saberá quando isso aconteceu porque não verá as solicitações de DataObjects na inicialização, como acima.