如果我保存了计划任务或服务登录凭据的密码,这样安全吗?
在我看来,Windows 以某种方式加密保存了该密码,但由于 Windows 必须解密它,因此任何可以离线访问计算机的人也都可以解密它。
这是真的吗?有工具可以恢复这些密码吗?
答案1
使用任务计划程序 2.0(Vista 及更新版本)时,密码使用Windows 凭据管理器:
Windows Vista 中的任务计划程序支持新的凭据管理器,它是安全隔离模型的一部分。在此模型中,在特定安全上下文中运行的每组任务都在单独的会话中启动。密码现在存储在凭据管理器 (CredMan) 服务中。您可以将加密接口与 CredMan 结合使用,以防止恶意软件窃取存储的密码。
从技术上讲,凭证管理器(“凭证柜”在较新的 Windows 版本中)是 将密码存储在本地磁盘上:
用户可以选择使用应用程序或通过凭据管理器控制面板小程序在 Windows 中保存密码。这些凭据存储在硬盘驱动器上,并使用数据保护应用程序编程接口 (DPAPI) 进行保护。以该用户身份运行的任何程序都将能够访问此存储中的凭据。
(强调添加)
尽管凭据管理器改进了加密方法和安全架构,优于任务计划程序早期版本中使用的已弃用的受保护存储 (PStore) 服务,但格鲁瑟所写的内容仍然有效:无论是否有可用于此任务的公开工具,都可以检索已保存的任何内容。
答案2
是的,有一些工具可以提取为计划任务存储的凭据。这些工具需要提升权限,就像其他凭据提取工具一样。
例如:
那么!如果 psexec 在我的 PATH 中,并且 netpass.exe 在 C:\ 中,我可以运行以下命令:
psexec -i -s -d C:\netpass.exe
这将打开 netpass,您将在其中看到使用 runas 帐户执行计划任务的凭据。我已经在 Windows Server 2008 R2 和 Windows Server 2012 R2 上使用标准域帐户对此进行了测试。较新的操作系统或某些类型的帐户可能会存在限制。
干杯!
答案3
我的理解是密码存储在数据处理应用程序接口。所以是的,它们存储在本地,但它们不是以纯文本形式存储的,需要正确的加密密钥才能调用/解密它们。从处理这些东西的遥远记忆中,加密密钥是从存储信息的当前登录用户的凭据中派生出来的,因此,理论上,只有该用户可以提取数据并解密。
在任务调度程序的情况下,我想象数据由任务调度程序运行的帐户存储,因此任何可以模仿该帐户(可能是SYSTEM
默认)的人都可以检索数据。
“是否安全”是一个完全主观的问题。除非你加密磁盘上的数据并将密钥远离磁盘,否则理论上数据是可以被恢复的。