我在同一个子网上有两个 LDS 服务器。他们复制得很好。如果我更改一个属性,它会在 15 秒后被复制。
LDS 配置为遵守密码策略。当用户多次尝试输入错误密码时,他的帐户将被锁定并lockoutTime
相应地设置该用户的属性。
但lockoutTime
并不被复制为紧急。事实上,它不会被复制,除非目录中的某处发生了另一次更改。将复制 lockoutTime 属性。
这是一个(编辑过的 Wireshark)跟踪。它显示正常的复制流量
No. Time Protocol Length Info
133 16:23:02 DRSUAPI 562 DsGetNCChanges request
134 16:23:02 DRSUAPI 3042 DsGetNCChanges response
152 16:23:17 DRSUAPI 562 DsGetNCChanges request
157 16:23:17 DRSUAPI 242 DsGetNCChanges response
230 16:24:57 DRSUAPI 562 DsGetNCChanges request
231 16:24:57 DRSUAPI 2930 DsGetNCChanges response
246 16:25:12 DRSUAPI 562 DsGetNCChanges request
在那之后,我锁定用户(使用FOR
循环和ldifde
)。什么都没有发生,直到我放弃并更改description
用户的属性,然后大约 15 秒后我看到复制完成。
1984 16:31:05 DRSUAPI 562 DsGetNCChanges request
1985 16:31:05 DRSUAPI 2930 DsGetNCChanges response
锁定时间和描述被复制。如此处所述,如果我设置lockoutTime=0
,定期复制会在 15 秒后发生!
我启用了复制诊断。因为没有复制,所以实例的日志中没有显示任何内容。当复制确实触发时,我看到一堆事件 1239 的最新属性,两个 1240 事件。一个用于属性lockoutTime
,一个用于 description
(我用来触发复制)。
我启用了站点之间的更改通知,重新启动了这两项服务,但没有任何区别。可能是因为两台服务器在同一个子网上。
Active Directory 技术规范明确将lockoutTime列为需要复制的紧急属性之一。
是什么阻止了lockoutTime
属性的紧急复制?
(用微软支持电话的结果回答我自己的问题)
这是 AD-LDS 中的错误(错误检查 ID 354126)。它影响 Windows Server 2008,我不知道 Server 2012。
问题是没有通知发送到副本(既不紧急也不正常)。当帐户锁定存储在数据库中时,LDS 不会更新全局通知列表。因此,只有在计划复制开始后,复制才会发生。
绕过它的方法是创建一个调用的计划任务
如果没有可复制的内容,此调用将产生大约 42k 的网络流量。
解决问题的另一种方法是……什么都不做。该错误使攻击者可以将猜测密码的机会加倍。很难利用,因为用户通常不会直接调用 LDS。即使他们这样做了,这个错误也只会使他们的机会增加一倍。