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

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

原始 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 哈希以向后兼容,应阻止存储 LM 哈希。 如果网络包含 Windows 95、Windows 98 或 Macintosh 客户端,则当阻止为域存储 LM 哈希时,可能会遇到以下问题:

  • 没有 LM 哈希的用户无法连接到充当服务器的 Windows 95 或 Windows 98 计算机。 如果服务器上安装了适用于 Windows 95 和 Windows 98 的目录服务客户端,则不会发生此问题。
  • Windows 95 或 Windows 98 计算机上的用户无法使用其域帐户向服务器进行身份验证。 如果用户的计算机上安装了 Directory Services 客户端,则不会发生此问题。
  • Windows 95 或 Windows 98 计算机上的用户无法使用禁用 LM 哈希的服务器上的本地帐户进行身份验证。 如果用户的计算机上安装了 Directory Services 客户端,则不会发生此问题。
  • 用户无法从 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 管理器哈希值”。
  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 哈希值,该值不能用于对用户进行身份验证。