我有一个 Web 应用程序,我想使用直通 NTLM 进行 SSO 身份验证。但是,有一个问题,即 NTLMv2 显然在这种情况下不起作用(如果应用程序没有存储相同的密码哈希值)。
我使用本地组策略在一台客户端计算机 (Vista) 上启用了 NTLMv1:计算机->Windows 设置->安全设置->网络安全:LAN 管理器身份验证级别。我将其更改为发送 LM 和 NTLM - 如果协商,则使用 NTLMv2 会话安全。
这有效,我能够使用 NTLM 登录到 Web 应用程序。现在,我的所有客户端计算机都将使用此应用程序...所以我想知道如果我将此策略推送给所有客户端计算机(但不是域控制器本身),会有什么安全风险?
答案1
这是非常糟糕的做法,就像启用 WEP 来保护您的 WiFi 一样,因为您的 Windows 98 计算机无法使用 WPA2。现在是 2009 年,如果您真的非常需要 SSO,Kerberos 就可以发挥作用。
我还认为网站的集成身份验证通常是一种不好的做法,因为当用户拥有多个帐户(我们使用单独的用户/管理员帐户)时,它经常会导致奇怪的问题,需要您摆弄 IE 信任区域,并需要您使用 IE 或摆弄 Firefox 设置。
鉴于 IE 自 2002 年或 IE6 发布以来一直处于严重失败状态(即。带外 ActiveX 补丁)你真的想致力于该平台吗?
答案2
在 NT4.0 SP4 中,NTLM 被 NTLMv2 取代。那是十多年前的事了。NTLM 比 LM 更难破解密码,而 NTLMv2 则更难破解。Vista 默认只使用 NTLMv2 是有原因的。彩虹表已针对完整的 LM 密码空间进行了编译,我听说针对 NTLM 空间的彩虹表编译工作进展顺利。NTLMv2 尚未完成。
是的,这样做会增加安全风险。至于这些风险是否对你来说重要,则取决于你自己的风险评估。
答案3
正如 Adam 和系统管理员所说,从安全角度来看,这是一个非常糟糕的想法(更不用说从传统角度来看,因为它在 NT 4 时代就被取代了,而 NTLMv1 可能会从未来版本的 Windows 中删除)。那么使用 Kerberos 进行身份验证/SSO 怎么样?它比 NTLM v2 更安全,适用于双跳场景,并且在可预见的未来将得到支持(微软内部和外部)。
答案4
是的,NTLMv1 的一个问题是它使用 DES,而 DES 目前被认为是较弱的,只有 56 位。不过,DES 破解目前仍然很难。然而,还有另一个弱点。在 NTLMv1 中,LM/NT 哈希被转换为三个不同的 DES 密钥,然后它们用于加密质询。由于哈希是 128 位,而 DES 只有 56 位,所以第三个密钥只有 16 位,其余部分用零填充,因此很容易破解,从而显示 NT 和 LM 哈希的两个字节。NTLMv2 通过使用 HMAC-MD5 解决了这个问题。MS-CHAPv1 也有同样的缺陷,尽管它与 NTLMv2 同时出现,但 MS-CHAPv2 并没有解决这个问题。我想知道为什么。
编辑:现在 CloudCracker 有一个云 DES 暴力破解服务,利用了 MS-CHAPv2 中的这个问题。