
Windows에서 PFX 인증서와 개인 키를 사용하여 NIST SP 800-73 PIV 스마트 카드를 에뮬레이션함으로써 RDP, Citrix 및 VMware Horizon 세션에서 스마트 카드 인증을 지원합니다.
PIVert는 NIST SP 800-73 PIV 스마트 카드 에뮬레이터입니다. PIVert에 인증서와 해당 개인 키가 포함된 PFX 파일을 제공하면 이 도구는 Windows에서 카드를 실제 PIV 카드로 에뮬레이션합니다. 그런 다음 이 카드는 RDP, Citrix 및 VMWare Horizon을 통한 인증에 기본 제공되는 스마트 카드 리디렉션 기능을 사용하여 사용할 수 있습니다.
PIVert를 이전에 사용한 적이 없는 깨끗한 머신에서 첫 번째 단계는 BixVReader 가상 스마트 카드 리더 드라이버를 설치하는 것입니다. 경고: 이 드라이버는 테스트 인증서를 사용하여 자체 서명되었으므로 자체 서명된 신뢰할 수 있는 루트 인증 기관 인증서를 설치합니다. 설치 단계에서는 AllowCertificatesWithNoEKU 그룹 정책 옵션도 설정합니다. 이 옵션이 없으면 Smartcard Logon EKU가 있는 인증서만 인증에 제공됩니다. 이 옵션을 사용하면 User Authentication EKU가 있는 인증서도 인증에 사용할 수 있습니다.
.\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
PFX 파일을 사용하여 PIV 카드를 에뮬레이션하려면 명령줄 인수로 PFX 파일과 PFX 암호를 지정하기만 하면 됩니다.
.\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
드라이버에 버그가 있는 것 같습니다(어쩌면 제 코드일 수도 있습니다 :D). 가상 카드의 ATR을 읽는 문제로 인해 Windows가 가상 카드 삽입을 감지하지 못하는 경우가 있습니다. 이 문제를 해결하려면 ESC 외의 다른 키를 눌러 가상 카드를 제거했다가 다시 삽입할 수 있습니다. 이런 상황이 발생하면 위와 같은 시작 시 DataObject 요청이 표시되지 않으므로 알 수 있습니다.