关于这个确切的主题,有一篇相当不错的Microsoft 知识库文章。
基本上,LM 用于与旧客户端兼容。具体来说,Windows 98 及更低版本。如果网络上没有任何较旧的客户端,那么这两个哈希的原因很可能是由于密码长度小于 15 个字符。
当您将用户帐户的密码设置或更改为包含少于 15 个字符的密码时,Windows 会生成密码的 LAN 管理器散列(LM 散列)和 Windows NT 散列(NT 散列)。
原因似乎是由于 LM 的散列限制,而不是安全相关。
如果用户密码超过 15 个字符,主机或域控制器将不会为用户存储 LM 哈希;在这种情况下,LM 响应不能用于对用户进行身份验证。仍然会生成响应并将其放置在 LM 响应字段中,使用 16 字节的空值 (0x000000000000000000000000000000000) 作为计算中的 LM 哈希。该值被目标忽略。
建议禁用 LM 哈希,因为协议已按照您的建议严重破坏。对于那些可能不知道的人,LM 的一些问题包括:
- 密码不区分大小写。
- 密码被分成 7 个字符并单独散列,使得蛮力变得微不足道。
- 密码长度限制为最多 14 个字符。
我提到的知识库文章中列出了几种删除 LM 哈希的方法,我将引用 GPO 方法以防链接出错。
方法一:使用组策略实现NoLMHash策略
使用本地组策略(Windows XP 或 Windows Server 2003)或在 Windows Server 2003 Active Directory 环境中使用 Active Directory 中的组策略(Windows Server 2003)禁用用户密码的 LM 哈希存储在本地计算机的 SAM 数据库中), 跟着这些步骤:
- 在组策略中,依次展开计算机配置、Windows 设置、安全设置、本地策略,然后单击安全选项。
- 在可用策略列表中,双击网络安全:下次密码更改时不要存储 LAN Manager 哈希值。
- 单击启用,然后单击确定。