如何阻止 Windows 在 Active Directory 和本地 SAM 数据库中存储密码的 LAN 管理器哈希

本文提供了三种方法来防止 Windows 在 Active Directory 和本地安全帐户管理器 (SAM) 数据库中存储密码的 LAN 管理器 (LM) 哈希。

适用于:Windows 10 - 所有版本,Windows Server 2012 R2
原始 KB 编号: 299656

摘要

Windows 不会以明文形式存储你的用户帐户密码。 相反,它通过使用两种不同的密码表示形式(称为哈希)来生成和存储用户帐户密码。 将用户帐户的密码设置为包含少于 15 个字符的密码时,Windows 会生成 LM 哈希和Windows NT哈希, (NT 哈希) 。 这些哈希存储在本地 SAM 数据库或 Active Directory 中。

与 NT 哈希相比,LM 哈希相对较弱,并且容易遭受快速暴力攻击。 因此,你可能希望阻止 Windows 存储密码的 LM 哈希。 本文介绍如何使 Windows 仅存储密码的较强 NT 哈希。

更多信息

Windows 2000 和 Windows Server 2003 服务器可以对从运行早期版本 Windows 的计算机进行连接的用户进行身份验证。 但是,早于 Windows 2000 的 Windows 版本不使用 Kerberos 进行身份验证。 为了向后兼容,Windows 2000 和 Windows Server 2003 支持:

  • LM 身份验证
  • Windows NT (NTLM) 身份验证
  • NTLM 版本 2 (NTLMv2) 身份验证

NTLM、NTLMv2 和 Kerberos 都使用 NT 哈希,也称为 Unicode 哈希。 LM 身份验证协议使用 LM 哈希。

如果不需要存储 LM 哈希以实现向后兼容性,则应阻止存储该哈希。 如果网络包含 Windows 95、Windows 98 或 Macintosh 客户端,则当你阻止存储域的 LM 哈希时,可能会遇到以下问题:

  • 没有 LM 哈希的用户无法连接到充当服务器的 Windows 95 或 Windows 98 计算机。 如果在服务器上安装了适用于 Windows 95 和 Windows 98 的目录服务客户端,则不会出现此问题。
  • Windows 95 或 Windows 98 计算机上的用户无法使用其域帐户向服务器进行身份验证。 如果用户的计算机上安装了目录服务客户端,则不会出现此问题。
  • Windows 95 或 Windows 98 计算机上的用户无法使用禁用 LM 哈希的服务器上的本地帐户进行身份验证。 如果用户的计算机上安装了目录服务客户端,则不会出现此问题。
  • 用户无法从 Windows 95 或 Windows 98 计算机更改其域密码。 或者,用户在尝试从这些早期客户端更改密码时可能会遇到帐户锁定问题。
  • Macintosh Outlook 2001 客户端的用户无法访问 Microsoft Exchange 服务器上的邮箱。 用户可能会在 Outlook 中看到以下错误:

    提供的登录凭据不正确。 请确保用户名和域正确,然后再次键入密码。

若要防止 Windows 存储密码的 LM 哈希,请使用以下任一方法。

方法 1:使用 组策略 实现 NoLMHash 策略

若要在 Windows XP 或 Windows Server 2003 的本地计算机的 SAM 数据库中禁用用户密码的 LM 哈希存储,请使用本地组策略。 若要在 Windows Server 2003 Active Directory 环境中禁用用户密码的 LM 哈希存储,请在 Active Directory 中使用 组策略。 请按照下列步骤操作:

  1. 在“组策略”中,展开“计算机配置>”“Windows 设置>”“安全设置>”“本地策略”,然后选择“安全选项”。
  2. 在可用策略列表中,双击“ 网络安全:下次密码更改时不存储 LAN Manager 哈希值”。
  3. 选择 “启用>确定”。

方法 2:通过编辑注册表实现 NoLMHash 策略

在 Windows 2000 Service Pack 2 (SP2) 及更高版本中,使用以下过程之一防止 Windows 在下一次密码更改时存储 LM 哈希值。

Windows 2000 SP2 及更高版本

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,请务必严格按照这些步骤操作。 为了加强保护,应先备份注册表,再进行修改。 如果出现问题,可以还原注册表。 有关如何备份和还原注册表的更多信息,请单击下面的文章编号查看 Microsoft 知识库中相应的文章:

322756 如何在 Windows 中备份和还原注册表

NoLMHash 注册表项及其功能未经过测试或记录,在 Windows 2000 SP2 之前的生产环境中应被视为不安全。

若要使用注册表编辑器添加此密钥,请执行以下步骤:

  1. 启动注册表编辑器 (Regedt32.exe)。

  2. 找到并选择以下项:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa

  3. “编辑 ”菜单上,单击“ 添加键”,键入 NoLMHash,然后按 Enter。

  4. 退出注册表编辑器。

  5. 重新启动计算机,然后更改密码,使设置处于活动状态。

注意

  • 必须在所有 Windows 2000 域控制器上进行此注册表项更改,以在 Windows 2000 Active Directory 环境中禁用用户密码的 LM 哈希存储。
  • 此注册表项可防止在 Windows 2000 计算机上创建新的 LM 哈希。 但它不会清除以前存储的 LM 哈希的历史记录。 更改密码时,将删除存储的现有 LM 哈希。

Windows XP 和 Windows Server 2003

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,请务必严格按照这些步骤操作。 为了加强保护,应先备份注册表,再进行修改。 如果出现问题,可以还原注册表。 有关如何备份和还原注册表的更多信息,请单击下面的文章编号查看 Microsoft 知识库中相应的文章:

322756 如何在 Windows 中备份和还原注册表

若要使用注册表编辑器添加此 DWORD 值,请执行以下步骤:

  1. 选择“ 开始>运行”,键入 “regedit”,然后单击“ 确定”。

  2. 找到并选择注册表中的以下项:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa

  3. 在“编辑”菜单上,指向“新建”,然后单击“DWORD 值”

  4. 键入“NoLMHash”,然后按 ENTER。

  5. 在“编辑”菜单上,选择“修改”

  6. 键入 1,然后选择“ 确定”。

  7. 重启计算机,然后更改密码。

注意

  • 必须在所有 Windows Server 2003 域控制器上进行此注册表更改,以在 Windows 2003 Active Directory 环境中禁用用户密码的 LM 哈希存储。 如果你是域管理员,则可以使用 Active Directory 用户和计算机 Microsoft 管理控制台 (MMC) 将此策略部署到域上的所有域控制器或所有计算机,如方法 1 (使用组策略) 实现 NoLMHash 策略中所述。
  • 此 DWORD 值可防止在基于 Windows XP 的计算机和基于 Windows Server 2003 的计算机上创建新的 LM 哈希。 完成这些步骤后,将清除所有以前的 LM 哈希的历史记录。

重要

如果要创建可在 Windows 2000 和 Windows XP 或 Windows Server 2003 上使用的自定义策略模板,则可以创建密钥和值。 该值与键位于同一位置,值为 1 会禁用 LM 哈希创建。 当 Windows 2000 系统升级到 Windows Server 2003 时,会升级密钥。 但是,如果这两个设置都位于注册表中,则没关系。

方法 3:使用长度至少为 15 个字符的密码

最简单的方法是使用长度至少为 15 个字符的密码。 在这种情况下,Windows 会存储不能用于对用户进行身份验证的 LM 哈希值。