提示: 若要查看新的或修订的 2024 年 1 月内容,请参阅文章中的 [2024 年 1 月 - 开始] 和 [结束 - 2024 年 1 月] 标记。
摘要
2022 年 10 月 11 日及之后发布的 Windows 更新包含 CVE-2022-38042 引入的其他保护。 这些保护故意阻止域加入操作重用目标域中的现有计算机帐户,除非:
-
尝试操作的用户是现有帐户的创建者。
或
-
计算机由域管理员的成员创建。
或
-
要重用的计算机帐户的所有者是“域控制器:允许在加入域期间重复使用计算机帐户”的成员。 组策略设置。 此设置要求在所有成员计算机和域控制器上安装 2023 年 3 月 14 日或之后发布的 Windows 更新。
汇报在 2023 年 3 月 14 日和 2023 年 9 月 12 日及之后发布,将为Windows Server 2012 R2 及更高版本以及所有受支持的客户端上的受影响客户提供其他选项。 有关详细信息,请参阅 2022 年 10 月 11 日行为 和 采取操作 部分。
2022 年 10 月 11 日之前的行为
在安装 2022 年 10 月 11 日或更高版本的累积更新之前,客户端计算机会查询 Active Directory 中具有相同名称的现有帐户。 此查询在域加入和计算机帐户预配期间发生。 如果存在此类帐户,客户端将自动尝试重复使用它。
备注 如果尝试域加入操作的用户没有相应的写入权限,则重用尝试将失败。 但是,如果用户具有足够的权限,则域加入将成功。
有两种使用各自的默认行为和标志加入域的方案,如下所示:
-
域加入 (NetJoinDomain)
-
除非) 指定 了NETSETUP_NO_ACCT_REUSE 标志,否则默认为帐户重用 (
-
-
帐户预配 (NetProvisionComputerAccountNetCreateProvisioningPackage) 。
-
除非指定NETSETUP_PROVISION_REUSE_ACCOUNT,否则默认为 NO 重用 ( 。)
-
2022 年 10 月 11 日行为
在客户端计算机上安装 2022 年 10 月 11 日或更高版本的 Windows 累积更新后,在加入域期间,客户端将在尝试重用现有计算机帐户之前执行其他安全检查。 算法:
-
如果尝试操作的用户是现有帐户的创建者,则允许帐户重用尝试。
-
如果帐户是由域管理员的成员创建的,将允许帐户重用尝试。
这些额外的安全检查是在尝试加入计算机之前完成的。 如果检查成功,则加入操作的其余部分将像以前一样受到 Active Directory 权限的约束。
此更改不会影响新帐户。
注意 安装 2022 年 10 月 11 日或更高版本的 Windows 累积更新后,使用计算机帐户重用的域加入可能会有意失败,并出现以下错误:
0xaac (2732 错误) :NERR_AccountReuseBlockedByPolicy:“Active Directory 中存在同名帐户。 安全策略阻止了重新使用该帐户。”
如果是这样,则帐户受到新行为的有意保护。
发生上述错误后,将触发事件 ID 4101,并将问题记录在 c:\windows\debug\netsetup.log 中。 请按照“采取措施”中的以下步骤了解故障并解决问题。
2023 年 3 月 14 日行为
在 2023 年 3 月 14 日或之后发布的 Windows 更新中,我们对安全强化进行了一些更改。 这些更改包括我们在 2022 年 10 月 11 日所做的所有更改。
首先,我们扩展了从此强化中免除的组的范围。 除了域管理员,企业管理员和内置管理员组现在不受所有权检查。
其次,我们实现了新的组策略设置。 管理员可以使用它来指定受信任的计算机帐户所有者的允许列表。 如果存在以下情况之一,计算机帐户将绕过安全检查:
-
该帐户由在“域控制器:允许计算机帐户在域加入期间重复使用”组策略中指定为受信任所有者的用户拥有。
-
该帐户由用户拥有,该用户是“域控制器:允许在加入域期间重复使用计算机帐户”组策略中指定为受信任所有者的组的成员。
若要使用此新组策略,域控制器和成员计算机必须始终安装 2023 年 3 月 14 日或更高版本的更新。 你们中的一些人可能有用于自动创建计算机帐户的特定帐户。 如果这些帐户不受滥用,并且你信任他们创建计算机帐户,则可以免除这些帐户。 2022 年 10 月 11 日 Windows 更新所缓解的原始漏洞仍可保护你。
2023 年 9 月 12 日行为
在 2023 年 9 月 12 日或之后发布的 Windows 更新中,我们对安全强化进行了一些其他更改。 这些更改包括我们在 2022 年 10 月 11 日所做的所有更改,以及 2023 年 3 月 14 日以来的更改。
我们解决了使用智能卡身份验证的域加入失败(无论策略设置如何)的问题。 为了解决此问题,我们将剩余的安全检查移回域控制器。 因此,在 2023 年 9 月安全更新之后,客户端计算机对域控制器进行经过身份验证的 SAMRPC 调用,以执行与重用计算机帐户相关的安全验证检查。
但是,这可能会导致在设置了以下策略的环境中域加入失败: 网络访问:限制允许对 SAM 进行远程调用的客户端。 有关如何解决此问题的信息,请参阅“已知问题”部分。
我们还计划在将来的 Windows 更新中删除原始 NetJoinLegacyAccountReuse 注册表设置。 [2024 年 1 月 - 开始]此删除暂定于 2024 年 8 月 13 日更新。 发布日期可能会更改。 [结束 - 2024 年 1 月]
备注 如果在客户端上部署了 NetJoinLegacyAccountReuse 密钥并将其设置为值 1,则现在必须删除该密钥 (或将其设置为 0) 才能从最新更改中受益。
采取操作
使用域控制器上的组策略配置新的允许列表策略,并删除任何旧的客户端解决方法。 然后,执行以下操作:
-
必须在所有成员计算机和域控制器上安装 2023 年 9 月 12 日或更高版本的更新。
-
在适用于所有域控制器的新组策略或现有组策略中,配置以下步骤中的设置。
-
在 “计算机配置\策略\Windows 设置\安全设置\本地策略\安全选项”下, 双击“ 域控制器:允许计算机帐户在域加入期间重复使用”。
-
选择“定义此策略设置”,<编辑安全性...>。
-
使用对象选取器将受信任的计算机帐户创建者和所有者的用户或组添加到 “允许” 权限。 (作为最佳做法,强烈建议使用组作为 permissions。) 不要添加执行域加入的用户帐户。
警告: 将策略的成员身份限制为受信任的用户和服务帐户。 请勿将经过身份验证的用户、每个人或其他大型组添加到此策略。 相反,请将特定的受信任用户和服务帐户添加到组,并将这些组添加到策略。
-
等待组策略刷新间隔,或者在所有域控制器上运行 gpupdate /force。
-
验证 HKLM\System\CCS\Control\SAM – “ComputerAccountReuseAllowList”注册表项是否填充了所需的 SDDL。 请勿手动编辑注册表。
-
尝试加入安装了 2023 年 9 月 12 日或更高版本更新的计算机。 确保策略中列出的其中一个帐户拥有计算机帐户。 此外,请确保其注册表未启用 NetJoinLegacyAccountReuse 密钥, (设置为 1) 。 如果域加入失败,检查 c:\windows\debug\netsetup.log。
如果仍需要备用解决方法,请查看计算机帐户预配工作流,并了解是否需要进行更改。
-
使用在目标域中创建计算机帐户的同一帐户执行联接操作。
-
如果现有帐户已过时 (未使用) ,请先将其删除,然后再尝试再次加入域。
-
重命名计算机并使用尚不存在的其他帐户加入。
-
如果现有帐户归受信任的安全主体所有,并且管理员想要重复使用该帐户,请按照“采取操作”部分中的指导安装 2023 年 9 月或更高版本的 Windows 更新并配置允许列表。
有关使用 NetJoinLegacyAccountReuse 注册表项的重要指南
警告: 如果选择设置此密钥来解决这些保护问题,除非下面根据需要引用了你的方案,否则你的环境容易受到 CVE-2022-38042 的侵害。 在确认现有计算机对象的创建者/所有者是安全且受信任的安全主体的情况下,请勿使用此方法。
由于新组策略,不应再使用 NetJoinLegacyAccountReuse 注册表项。 [2024 年 1 月 - 开始]如果需要解决方法,我们将在接下来的几个月内保留密钥。 [结束 - 2024 年 1 月]如果无法在方案中配置新的 GPO,我们强烈建议你联系 Microsoft 支持部门。
路径 |
HKLM\System\CurrentControlSet\Control\LSA |
类型 |
REG_DWORD |
名称 |
NetJoinLegacyAccountReuse |
值 |
1 忽略其他值。 |
备注 Microsoft 将在 将来的 Windows 更新中删除对 NetJoinLegacyAccountReuse 注册表设置的支持。 [2024 年 1 月 - 开始]此删除暂定于 2024 年 8 月 13 日更新。 发布日期可能会更改。 [结束 - 2024 年 1 月]
非解决方案
-
在环境中的 DC 和客户端上安装 2023 年 9 月 12 日或更高版本的更新后,请勿使用 NetJoinLegacyAccountReuse 注册表。 请改为按照“采取措施”中的步骤配置新的 GPO。
-
不要将服务帐户或预配帐户添加到域管理员安全组。
-
请勿在尝试重新定义此类帐户的所有权时手动编辑计算机帐户上的安全描述符,除非删除了以前的所有者帐户。 虽然编辑所有者将使新检查成功,但计算机帐户可能会保留原始所有者的相同潜在风险和不需要的权限,除非明确查看和删除。
-
请勿将 NetJoinLegacyAccountReuse 注册表项添加到基本 OS 映像,因为只能在域加入完成后暂时添加并直接删除该密钥。
新建事件日志
事件日志 |
系统 |
事件源 |
Netjoin |
事件 ID |
4100 |
事件类型 |
信息 |
事件文本 |
“在加入域期间,联系的域控制器在 Active Directory 中发现了同名的现有计算机帐户。 允许尝试重新使用此帐户。 已搜索域控制器:<域控制器名称>现有计算机帐户 DN:<计算机帐户> 的 DN 路径。 有关详细信息,请参阅 https://go.microsoft.com/fwlink/?linkid=2202145。 |
事件日志 |
SYSTEM |
事件源 |
Netjoin |
事件 ID |
4101 |
事件类型 |
错误 |
事件文本 |
在域加入期间,联系的域控制器在 Active Directory 中发现了同名的现有计算机帐户。 出于安全原因,阻止了重新使用此帐户的尝试。 已搜索域控制器:现有计算机帐户 DN:错误代码 <> 错误代码。 有关详细信息,请参阅 https://go.microsoft.com/fwlink/?linkid=2202145。 |
默认情况下,调试日志记录可用, (无需在所有客户端计算机上启用 C:\Windows\Debug\netsetup.log 中的任何详细日志记录) 。
出于安全原因阻止重复使用帐户时生成的调试日志记录示例:
NetpGetComputerObjectDn: Crack results: (Account already exists) DN = CN=Computer2,CN=Computers,DC=contoso,DC=com
NetpGetADObjectOwnerAttributes: Looking up attributes for machine account: CN=Computer2,CN=Computers,DC=contoso,DC=com
NetpCheckIfAccountShouldBeReused: Account was created through joinpriv and does not belong to this user. Blocking re-use of account.
NetpCheckIfAccountShouldBeReused:fReuseAllowed: FALSE, NetStatus:0x0
NetpModifyComputerObjectInDs: Account exists and re-use is blocked by policy. Error: 0xaac
NetpProvisionComputerAccount: LDAP creation failed: 0xaac
ldap_unbind status: 0x0
NetpJoinCreatePackagePart: status:0xaac.
NetpJoinDomainOnDs: Function exits with status of: 0xaac
NetpJoinDomainOnDs: status of disconnecting from '\\DC1.contoso.com': 0x0
NetpResetIDNEncoding: DnsDisableIdnEncoding(RESETALL) on 'contoso.com' returned 0x0
NetpJoinDomainOnDs: NetpResetIDNEncoding on 'contoso.com': 0x0
NetpDoDomainJoin: status: 0xaac
2023 年 3 月新增事件
此更新在域控制器上的 SYSTEM 日志中添加 4 (4) 新事件,如下所示:
事件级别 |
信息 |
事件 ID |
16995 |
日志 |
SYSTEM |
事件源 |
目录-服务-SAM |
事件文本 |
安全帐户管理器使用指定的安全描述符来验证计算机帐户在加入域期间重复使用的尝试。 SDDL 值:<SDDL 字符串> 此允许列表是通过 Active Directory 中的组策略配置的。 有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=2202145。 |
事件级别 |
错误 |
事件 ID |
16996 |
日志 |
SYSTEM |
事件源 |
目录-服务-SAM |
事件文本 |
包含计算机帐户重用允许列表的安全描述符用于验证客户端请求域加入的格式不正确。 SDDL 值:<SDDL 字符串> 此允许列表是通过 Active Directory 中的组策略配置的。 若要更正此问题,管理员需要更新策略,以将此值设置为有效的安全描述符或将其禁用。 有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=2202145。 |
事件级别 |
错误 |
事件 ID |
16997 |
日志 |
SYSTEM |
事件源 |
目录-服务-SAM |
事件文本 |
安全帐户管理员发现了一个计算机帐户,该帐户似乎是孤立的,没有现有所有者。 计算机帐户:S-1-5-xxx 计算机帐户所有者:S-1-5-xxx 有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=2202145。 |
事件级别 |
警告 |
事件 ID |
16998 |
日志 |
SYSTEM |
事件源 |
目录-服务-SAM |
事件文本 |
安全帐户管理员拒绝了在加入域期间重新使用计算机帐户的客户端请求。 计算机帐户和客户端标识不符合安全验证检查要求。 客户帐户:S-1-5-xxx 计算机帐户:S-1-5-xxx 计算机帐户所有者:S-1-5-xxx 检查此事件的记录数据,了解 NT 错误代码。 有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=2202145。 |
如果需要,netsetup.log 可以提供详细信息。 从工作计算机中查看以下示例。
NetpReadAccountReuseModeFromAD: Searching '<WKGUID=AB1D30F3768811D1ADED00C04FD8D5CD,DC=contoso,DC=com>' for '(&(ObjectClass=ServiceConnectionPoint)(KeyWords=NetJoin*))'.
NetpReadAccountReuseModeFromAD: Got 0 Entries.
Returning NetStatus: 0, ADReuseMode: 0
IsLegacyAccountReuseSetInRegistry: RegQueryValueEx for 'NetJoinLegacyAccountReuse' returned Status: 0x2.
IsLegacyAccountReuseSetInRegistry returning: 'FALSE''.
NetpDsValidateComputerAccountReuseAttempt: returning NtStatus: 0, NetStatus: 0
NetpDsValidateComputerAccountReuseAttempt: returning Result: TRUE
NetpCheckIfAccountShouldBeReused: Active Directory Policy check returned NetStatus:0x0.
NetpCheckIfAccountShouldBeReused: Account re-use attempt was permitted by Active Directory Policy.
NetpCheckIfAccountShouldBeReused:fReuseAllowed: TRUE, NetStatus:0x0
已知问题
问题 1 |
安装 2023 年 9 月 12 日或更高版本的更新后,在设置了以下策略的环境中,域加入可能会失败:网络访问 - 限制允许对 SAM 进行远程调用的客户端 - Windows 安全中心 |Microsoft Learn。 这是因为客户端计算机现在对域控制器进行经过身份验证的 SAMRPC 调用,以执行与重用计算机帐户相关的安全验证检查。 发生此问题的 netsetup.log 中的示例:
|
问题 2 |
如果删除了计算机所有者帐户,并且尝试重复使用计算机帐户,则会在系统事件日志中记录事件 16997。 如果发生这种情况,则可以将所有权重新分配给另一个帐户或组。 |
问题 3 |
如果只有客户端更新了 2023 年 3 月 14 日或更高版本,Active Directory 策略检查将返回0x32 STATUS_NOT_SUPPORTED。 以前在 11 月修补程序中实现的检查将适用,如下所示:
|