Windows服务器上的Credential Manager(凭证管理器)存储了大量敏感信息,包括远程桌面密码、共享文件夹凭据、网站登录信息等。如果你长期不清理,这些凭证会像定时炸弹一样潜伏在系统里,一旦服务器被入侵或被他人物理接触,攻击者可以直接读取这些明文或加密存储的凭据,横向渗透到其他系统。清理凭证管理器不是可选项,而是服务器安全加固的基本操作。具体怎么做?打开"控制面板→凭据管理器"手动删除不需要的条目,或者用命令行工具cmdkey /list查看所有凭据再逐个删除,也可以直接通过PowerShell脚本批量清理。下面我把每种方法、每种场景、每种风险都给你讲透。

什么是Credential Manager凭证管理器

Credential Manager是Windows系统内置的一个凭据存储组件,从Windows 7开始就有,服务器版本和桌面版本都支持。它的核心作用是帮用户记住各种登录信息,避免每次访问远程服务器、共享目录、网站时都要重新输入密码。它把这些信息分成三类:Windows凭据(用于域登录、远程桌面等)、基于证书的凭据、普通凭据(用于网页、应用程序等)。这些数据存储在系统的Credential Locker文件夹中,路径通常是C:\Users\用户名\AppData\Local\Microsoft\Credentials。问题在于,很多管理员从来不去检查这里面存了什么,时间一长,离职员工的凭据、测试环境的临时密码、废弃服务的账号全部堆在里面,形成巨大的安全隐患。

为什么必须定期清理凭证管理器

第一,凭据泄露风险极高。虽然Windows对凭据做了加密保护,但这种加密是基于当前用户登录密码的。如果攻击者已经拿到了系统权限或者通过其他方式获取了用户密码,解密这些凭据几乎没有难度。有公开的工具可以直接从内存或磁盘中提取明文密码。第二,横向移动的跳板。很多企业内部网络中,一台服务器被攻破后,攻击者会先翻凭据管理器,找到其他服务器的RDP密码或共享目录凭据,然后直接跳过去,整个内网就沦陷了。第三,合规要求。等保2.0、ISO27001等安全标准都明确要求定期审查和清理不必要的凭据。第四,减少攻击面。每多存一条凭据,就多一个可能被利用的入口。清理掉不用的凭据,就是在给服务器减肥、减负、减风险。

手动清理凭证管理器的具体步骤

最简单的方式就是图形界面操作。首先登录到Windows服务器,打开"控制面板",找到"凭据管理器"(Credential Manager)。如果你在服务器核心版(Server Core)上没有图形界面,那就需要用命令行方式,后面会讲。进入凭据管理器后,你会看到两个标签页:"Web凭据"和"Windows凭据"。点击"Windows凭据"展开列表,你会看到所有存储的Windows相关登录信息,每一条都显示目标服务器地址、用户名和密码(密码默认隐藏,点击"显示"才能看到)。逐条检查,把不再使用的、来源不明的、属于已离职人员的条目全部点击"删除"。Web凭据同理,把过期的网站登录信息也清理掉。这个操作虽然简单,但很多人从来没做过,第一次打开可能会吓一跳,里面存了几十条甚至上百条凭据。

用cmdkey命令行查看和删除凭据

如果你习惯用命令行,或者服务器是核心版没有GUI,cmdkey是最直接的工具。先打开命令提示符(以管理员身份运行),输入以下命令查看当前用户存储的所有凭据:

cmdkey /list

执行后会列出所有凭据的目标名称、用户名和类型。你会看到类似这样的输出:

目标: Domain:target=TERMSRV/192.168.1.100
类型: 通用
用户: DOMAIN\administrator

目标: legacyGeneric:target=http://internal-app.company.com
类型: 通用
用户: app_user

确认要删除某条凭据后,使用以下命令:

cmdkey /delete:目标名称

例如删除上面的远程桌面凭据:

cmdkey /delete:TERMSRV/192.168.1.100

如果你想一次性清除所有存储的凭据(慎用,会影响正常使用的服务),可以用:

cmdkey /delete:ALL

注意,这个命令只清理当前用户的凭据。如果服务器上有多个用户账户,你需要切换到每个用户下分别执行。另外,某些系统服务或计划任务可能会自动重新生成凭据,所以清理后要观察一段时间,看是否有凭据反复出现,如果有,说明有程序在后台自动写入,需要排查源头。

用PowerShell脚本批量清理凭据

对于管理多台服务器的运维人员,手动逐台清理效率太低。PowerShell提供了更强大的批量操作能力。以下是一个实用的清理脚本,可以列出所有凭据并提供删除选项:

# 列出所有凭据
$credentials = cmdkey /list | ForEach-Object {
    if ($_ -match "目标:\s*(.+)") {
        [PSCustomObject]@{
            Target = $matches[1]
            Type = if ($_ -match "类型:\s*(.+)") { $matches[1] } else { "Unknown" }
            User = if ($_ -match "用户:\s*(.+)") { $matches[1] } else { "Unknown" }
        }
    }
}

# 显示凭据列表
$credentials | Format-Table -AutoSize

# 询问是否删除全部
$confirm = Read-Host "是否删除所有列出的凭据?(Y/N)"
if ($confirm -eq 'Y') {
    foreach ($cred in $credentials) {
        cmdkey /delete:$($cred.Target)
        Write-Host "已删除: $($cred.Target)" -ForegroundColor Green
    }
}

这个脚本会先列出所有凭据让你确认,然后再执行删除。在生产环境中,建议先只运行列出部分,人工审核后再决定删除哪些。对于远程批量执行,可以结合Invoke-Command对多台服务器同时操作,但一定要做好备份和回滚方案。

清理凭据时需要注意的关键问题

第一,不要盲目全删。有些凭据是系统服务或应用程序正常运行所依赖的,比如SQL Server的服务账户凭据、备份软件的认证信息等。删除这些会导致服务中断。清理前一定要先列出清单,逐条确认用途。第二,清理后要验证。删除凭据后,测试相关服务和连接是否正常,确保没有误删关键凭据。第三,关注计划任务和脚本。很多凭据是通过计划任务或登录脚本自动写入的,清理后如果不处理源头,凭据会反复出现。需要检查任务计划程序(taskschd.msc)和启动脚本,找到自动写入凭据的程序并修正。第四,做好记录。每次清理操作都应该记录时间、操作人、删除了哪些凭据、原因是什么,方便审计追溯。

从安全加固角度看凭据管理的最佳实践

清理只是第一步,更重要的是建立长期的凭据管理机制。首先,推行最小权限原则,每个服务和应用只使用必要的凭据,不要用域管理员账号跑所有服务。其次,使用专用的服务账户,并且定期更换密码。第三,考虑使用Windows的Credential Guard功能(Windows Server 2016及以上版本支持),它可以基于虚拟化的安全隔离来保护凭据,即使系统被攻破,凭据也难以被提取。第四,部署集中化的凭据管理方案,比如使用专门的密码保险箱工具来管理服务器凭据,而不是让每个管理员自己在本地存一堆密码。第五,建立定期审计制度,至少每季度检查一次凭据管理器,发现异常凭据立即排查来源。

凭据管理器被恶意利用的真实场景

在实际的安全事件中,凭据管理器被利用的案例非常多。典型场景是:攻击者通过漏洞或钓鱼获取了一台服务器的普通用户权限,然后用Mimikatz等工具从内存中提取凭据,或者直接读取Credential Locker文件夹中的数据。拿到凭据后,攻击者发现里面存了域管理员的RDP密码,直接远程登录域控服务器,整个域就被接管了。还有一种情况是,运维人员在服务器上测试时临时保存了测试环境的凭据,测试完忘了删,后来这台服务器上线生产,凭据一直留着,成了后门。这些都是真实发生过的安全事故,不是理论上的风险。

不同Windows版本的差异处理

Windows Server 2008 R2、2012、2016、2019、2022在凭据管理器的功能上基本一致,但有一些细节差异。Server Core版本没有图形界面,必须完全依赖命令行。Windows Server 2022引入了更强的安全默认设置,某些情况下会限制凭据的存储方式。另外,如果服务器加入了Active Directory域,域策略可能会影响凭据的存储和同步行为,清理时需要考虑域策略的影响。对于运行在云环境中的Windows服务器(比如云主机),还要注意云平台自身的凭据管理机制可能和本地凭据管理器有交互,清理时需要同时检查云平台控制台中的凭据配置。

清理凭据后的后续安全检查

清理完凭据管理器不代表工作结束。你还需要做以下几件事:检查事件日志中是否有异常的登录记录,特别是来自已删除凭据对应目标的登录尝试;检查是否有新的凭据被自动生成,如果有,追踪生成源头;运行漏洞扫描,确认服务器没有其他安全问题;更新服务器补丁,修补可能被利用的漏洞;如果条件允许,对服务器做一次完整的安全基线检查,确保整体安全状态达标。凭据清理只是安全加固链条中的一环,不能孤立地看这个操作。

总结

Windows服务器的Credential Manager凭证清理是一项基础但极其重要的安全操作。不管你是用图形界面手动删除,还是用cmdkey命令行逐个清理,或者用PowerShell脚本批量处理,核心原则都是一样的:先查看、再确认、后删除,不要一刀切。同时要建立长期的凭据管理制度,从源头上控制凭据的产生和存储。服务器安全没有银弹,但把这些基础工作做到位,就能挡住大量的攻击。现在就去你的服务器上看看凭据管理器里存了什么吧,可能你会被里面的内容吓一跳。