如何确定是否禁用了Windows凭据

时间:2018-03-29 21:57:24

标签: security winapi credentials credential-manager

我正在使用Windows Credential Manager API中的CredRead()CredWrite()函数来存储和检索用户密码,如this StackOverflow answer中所述。

但是,我已经读过可以通过设置组策略或仅通过停止/禁用Credential Manager服务来禁用Credential Manager。在这种情况下,我想更新我的应用程序的UI,以反映当前没有凭据存储。

是否有可靠的方法可以确定Credential Manager是否已被禁用?

2 个答案:

答案 0 :(得分:2)

Windows中的

存在 VaultSvc (友好名称​​凭据服务),它们支持不同的保管库类型。存在util VaultCmd.exe,我们可以使用它来枚举不同的凭证模式和加载的保险库。例如:

vaultcmd /listschema
Global Schemas

Credential schema: Windows Secure Note
Schema guid: 2F1A6504-0641-44CF-8BB5-3612D865F2E5

Credential schema: Windows Web Password Credential
Schema guid: 3CCD5499-87A8-4B10-A215-608888DD3B55

Credential schema: Windows Credential Picker Protector
Schema guid: 154E23D0-C644-4E6F-8CE6-5069272F999F

Currently loaded credentials schemas:

Vault: Web Credentials
Vault Guid:4BF4C442-9B8A-41A0-B380-DD4A704DDB28

Credential schema: Windows Web Password Credential
Schema guid: 3CCD5499-87A8-4B10-A215-608888DD3B55

Vault: Windows Credentials
Vault Guid:77BC582B-F0A6-4E15-4E80-61736B6F3B29

Credential schema: Windows Domain Certificate Credential
Schema guid: E69D7838-91B5-4FC9-89D5-230D4D4CC2BC

Credential schema: Windows Domain Password Credential
Schema guid: 3E0E35BE-1B77-43E7-B873-AED901B6275B

Credential schema: Windows Extended Credential
Schema guid: 3C886FF3-2669-4AA2-A8FB-3F6759A77548

vaultcmd /list
Currently loaded vaults:
        Vault: Web Credentials
        Vault Guid:4BF4C442-9B8A-41A0-B380-DD4A704DDB28
        Location: C:\Users\*\AppData\Local\Microsoft\Vault\4BF4C442-9B8A-41A0-B380-DD4A704DDB28

        Vault: Windows Credentials
        Vault Guid:77BC582B-F0A6-4E15-4E80-61736B6F3B29
        Location: C:\Users\*\AppData\Local\Microsoft\Vault

当然 vaultcmd 和大多数保险库,例如 Web凭证(在ie中存储密码)仅在 VaultSvc 正在运行的情况下才有效/ p>

Windows凭据 77BC582B-F0A6-4E15-4E80-61736B6F3B29 )内置凭证,即使,也始终在运行(在lsass内) VaultSvc 未运行(已禁用)。 CredReadCredWriteCredEnumerate和其他Cred* api将始终有效。它不能被禁用

Vault*中实现了未记录的api vaultcli.dll api。所有这个api都以Vault*的形式命名。当我们调用它并且 VaultSvc 正在运行时 - vaultsvc.dll被加载到lsass并处理远程调用:

vaultcli!VaultSomeApi -> rpc - > vaultsvc!VltSomeApi

例如,当我们在客户端调用VaultEnumerateItems时,在lsass(vaultsvc.dll)中调用VltEnumerateItems。内部VltEnumerateItems内部调用的内容取决于它所调用的混凝土保险库。 for Windows凭据保险库 - CredEnumerateWVltEnumerateItems内调用

答案 1 :(得分:-1)

凭据服务的名称为 enter image description here 。 您可以在VaultSvc回答中查找如何查询任何服务的状态,并在传递" ValutSvc"时使用代码。字符串到函数。