Windows 真的仍然使用未加盐的 MD4 来存储密码吗?

信息安全 哈希 视窗 密码管理 活动目录
2021-08-20 14:58:35

我很难相信 Windows 2008 R2 的 Active Directory 中的密码仍然使用 unsalted MD4(又名“NT 哈希”)算法存储。

真的可以吗?

我最近一直在修改我对密码存储的理解,并学习如何正确使用 PKDBF2。然后我想我会查一下主要的商业组织使用什么。在这一点上,我把头埋在了手中! Windows 中的无盐 MD4这是对 LM 哈希的改进。还有很多其他不好的例子。/etc/shadow 具有不错的 crypt 几乎是主要商业/开源中唯一好的实现。

MySQL 的 OLD_PASSWORD 很糟糕,即使是新的 PASSWORD 也只是两次未加盐的 SHA-1。

一般的商业/开源领域真的那么糟糕吗?

2个回答

NTLMv1 使用 MD4,v2 使用 MD5,Kerberos 的 Windows 实现使用 KDF,使用 HMAC-SHA1 来实现 AES 128/256。Active Directory 实际上可以存储多种类型的密码哈希,具体取决于您希望它执行的操作以及启用的协议版本。

是的,Active Directory 使用无盐密码。这是一个安全问题吗?理论上是的,但实际上可能不是。AD 数据库旨在存储在受保护的环境中,只有受信任的人才能访问实际文件,并且只有受信任的系统才能读取文件中的数据。只有当潜在的不受信任的人和/或不受信任的系统(例如也包含内容的 SQL 数据库)可以访问包含密码的特定存储时,盐才会真正增加价值。如果您让任何人和每个人都访问 AD 数据库,那么您将遇到比密码盐更大的问题。

当然,另一方面也涉及向后兼容性。Microsoft 必须确保当前版本的 AD 向后兼容之前的 4 个版本。这对安全有好处吗?不是真的,但如果版本不兼容,它们将被钉死在十字架上。他们是否将哈希更改为更安全的东西?是的,虽然很慢。

是的,Windows 域控制器仍然存储未加盐的 MD4 密码哈希,以使用旧版 rc4-hmac-md5 密码启用旧版 NTLM 身份验证和 Kerberos 身份验证。

默认情况下,Windows 还为每个密码存储三个 Kerberos 密钥:其中两个通过PBKDF2派生,一个通过基于 DES 的密钥派生方法但是,未加盐的 MD4 哈希可以更有效地计算,因此通常用于密码破解。

您可能会争辩说,当攻击者能够从帐户数据库中窃取哈希值时,他们实际上不必费心破解任何密码。他们可以通过散列传递或金/银票攻击冒充任何用户。不过,我不同意这种观点,因为人们倾向于为不同的服务重复使用密码:破坏组织的域是一回事,但访问私人员工邮箱是另一回事。

我曾经进行过一次测试评估,我们从一个退役的遗留域中获取哈希值,但无法在新域中重用其中的许多哈希值,因为后者需要每两个月更改一次密码。然而,在我们破解了 70% 的传统哈希后,我们能够想出明文密码的变体(通过替换其中的年份和月份数字),从而为我们提供了新域中的高权限。如果 Windows 使用更强大的密码散列方案,这将更加困难。