我有一个运行WindowsServer2019DatacenterCore的VM,它使用自己的本地用户帐户(.\build
)作为非交互式服务运行Jenkins构建代理。
现在我想添加代码签名。为了至少具有安全性,我希望使用基于主机上密码操作的虚拟智能卡,因此对复制密钥材料感兴趣的攻击者需要突破VM。
我配置了一个带有永久插入卡的虚拟USB CCID阅读器,它显示在Windows中:
PS> Get-PnpDevice
...
Error SmartCardReader Microsoft Usbccid Smartcard Reader (WUDF) USB\VID_08E6...
...
首先,Error
状态是有关的。我已经应用了这个修复,它似乎改进了一些东西(卡在引导后就会显示OK
),但这似乎不是永久性的。
然而,我真正陷入困境的问题是智能卡访问的安全模型。我可以找到使用智能卡登录的大多数文档,策略很简单:登录UI可以访问智能卡来验证凭据,然后将此访问传递给用户会话。
然而,在我的例子中,我有一个与桌面无关的非交互式登录。当我手动启动SCardSvr
和ScDeviceEnum
服务时,即使是管理员通过SSH登录也无法访问卡:
The Microsoft Smart Card Resource Manager is not running.
SCardAccessStartedEvent: Service is in an unknown state.
CertUtil: -SCInfo command FAILED: 0x80070005 (WIN32: 5 ERROR_ACCESS_DENIED)
CertUtil: Access is denied.
这是合理的,从本地控制台,作为管理员,我得到
PS> certutil -scinfo
The Microsoft Smart Card Resource Manager is running.
Current reader/card status:
SCardEstablishContext: The Smart Card Resource Manager is not running. 0x8010001d (-2146435043 SCARD_E_NO_SERVICE)
SCardEstablishContext failed for user scope.
这两项服务亦会在两分钟后自行终止。
问题:
certutil -scinfo
可能会显示这一点)?发布于 2022-10-20 14:46:26
我想我可能有一个解决方案: Windows似乎在Windows上选择了错误的设备驱动程序。在Windows上,设备显示为“(UMDF2)",而在桌面窗口显示为”(WUDF)“
我不知道为什么会发生这种情况,但以下几点对我来说是有效的:
有一点是恼人的是,如果你插入设备在不同的USB端口,然后你必须再次做同样的事情。
所以,如果有人知道如何使这件事永久化,我很高兴听到这件事。它可能涉及修改inf文件一点吗?
C:\Windows\System32\DriverStore\FileRepository\usbcciddriver.inf_amd64_d3361c9b119e0de8
C:\Windows\System32\DriverStore\FileRepository\wudfusbcciddriver.inf_amd64_a32870cf151b98c5
(根据windows版本的不同,文件名的散列部分可能略有不同)
https://serverfault.com/questions/1069971
复制相似问题