当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 确定 Active Directory 帐户锁定的来源:故障排除

作者:精品下载站 日期:2024-12-14 23:34:53 浏览:14 分类:玩电脑

确定 Active Directory 帐户锁定的来源:故障排除


在本文中,我们将向您展示如何跟踪 Active Directory 域控制器上的用户帐户锁定事件,并找出帐户持续被锁定的计算机、设备和程序。您可以使用 Windows 安全日志、PowerShell 脚本或帐户锁定和管理工具 (Lockoutstatus.exe) 查找 AD 中用户帐户锁定的来源。

引用的帐户当前已被锁定,无法登录

大多数组织中的 Active Directory 域帐户安全策略要求,如果连续多次输入错误密码,则锁定用户帐户。通常情况下,帐户会被域控制器锁定几分钟(5-30分钟),在此期间用户无法登录AD域。一段时间后(由域安全策略设置),用户帐户将自动解锁。临时 AD 帐户锁定可降低 AD 用户帐户遭受暴力攻击的风险。

如果域中的用户帐户被锁定,则尝试登录 Windows 时会出现警告:

引用的帐户当前已被锁定,无法登录。

[玩转系统] 确定 Active Directory 帐户锁定的来源:故障排除

如何检查AD用户帐户是否被锁定?

您可以使用 ADUC 图形控制台或使用 PowerShell 的 Active Directory 模块中的 Get-ADUser cmdlet 检查帐户是否已锁定:

Get-ADUser -Identity jsmith -Properties LockedOut,DisplayName | Select-Object samaccountName, displayName,Lockedout

或者 :

Get-ADUser jsmith -Properties Name,Lockedout, lastLogonTimestamp,lockoutTime,logonCount,pwdLastSet | Select-Object Name, Lockedout,@{n='LastLogon';e={[DateTime]::FromFileTime($_.lastLogonTimestamp)}},@{n='lockoutTime';e={[DateTime]::FromFileTime($_.lockoutTime)}},@{n='pwdLastSet';e={[DateTime]::FromFileTime($_.pwdLastSet)}},logonCount

用户帐户现已锁定(

Lockedout = True

)并且不能用于域中的身份验证。此外,在命令的输出中,您还可以看到有关上次在域中更改用户密码的信息以及帐户被锁定的时间。

[玩转系统] 确定 Active Directory 帐户锁定的来源:故障排除

您可以使用 Search-ADAccount cmdlet 列出域中当前锁定的所有帐户:

Search-ADAccount -UsersOnly -lockedout

您可以使用 ADUC 控制台手动解锁帐户,而无需等待帐户自动解锁。在 AD 中找到用户帐户(使用 AD 管理单元中的搜索选项),单击鼠标右键,然后选择属性。转到帐户选项卡,然后选中解锁帐户框。此帐户当前在此 Active Directory 域控制器上被锁定。单击“确定”。

[玩转系统] 确定 Active Directory 帐户锁定的来源:故障排除

您还可以使用以下 PowerShell 命令立即解锁用户帐户:

Get-ADUser -Identity jsmith | Unlock-ADAccount

您可以在 ADUC 控制台(“属性编辑器”选项卡上)的帐户属性中或使用 PowerShell 检查帐户锁定时间、密码登录尝试失败次数以及上次成功登录的时间:

Get-ADUser jsmith -Properties Name, lastLogonTimestamp,lockoutTime,logonCount,pwdLastSet | Select-Object Name,@{n='LastLogon';e={[DateTime]::FromFileTime($_.lastLogonTimestamp)}},@{n='lockoutTime';e={[DateTime]::FromFileTime($_.lockoutTime)}},@{n='pwdLastSet';e={[DateTime]::FromFileTime($_.pwdLastSet)}},logonCount

[玩转系统] 确定 Active Directory 帐户锁定的来源:故障排除

Active Directory 域中的帐户锁定策略

帐户锁定策略通常在整个域的默认域策略中设置,使用

gpmc.msc

管理单元。我们感兴趣的策略位于计算机配置 -> Windows 设置 -> 安全设置 -> 帐户策略 -> 帐户锁定策略。这些是以下政策:

  • 帐户锁定阈值 - 在尝试密码失败多少次后,帐户必须被锁定;

  • 帐户锁定持续时间帐户将被锁定的时间(在此时间之后锁定将自动解除);

  • 重置帐户锁定计数器 - 重置失败授权尝试计数器的时间。

[玩转系统] 确定 Active Directory 帐户锁定的来源:故障排除

为了防止密码暴力攻击,建议在 AD 中使用强用户密码(密码长度至少为 8 个字符并满足复杂性要求)。这是在密码必须满足复杂性要求最小密码长度选项中的密码策略部分中配置的。您需要定期审核用户密码强度

用户忘记密码并导致帐户被锁定的情况经常发生。如果用户最近更改过密码并且忘记了,您可以重置密码。但在某些情况下,帐户锁定的发生没有任何明显的原因。 IE。用户声称他在输入密码时从未犯过错误,但他的帐户由于某种原因被锁定。管理员可以根据用户的要求手动解锁帐户,但一段时间后,情况可能会重复。

为了解决用户的问题,管理员需要找到 Active Directory 中的用户帐户被哪台计算机和程序锁定。

帐户锁定事件 ID 4740 和 4625

首先,管理员必须找出哪台计算机或设备发生了错误的密码尝试,并进一步锁定帐户。

要在域控制器日志中启用帐户锁定事件,您需要为 DC 启用以下审核策略。转到 GPO 部分计算机配置 -> 策略 -> Windows 设置 -> 安全设置 -> 高级审核策略 -> 登录/注销并启用以下策略:

  • 审计账户锁定

  • 审核登录

  • 审核注销

然后转到帐户管理部分并启用该策略:

  • 审核用户帐户管理:成功

启用此策略的最简单方法是通过

gpmc.msc

通过编辑默认域控制器策略来控制控制台。

[玩转系统] 确定 Active Directory 帐户锁定的来源:故障排除

如果用户输入的密码不正确,则距离用户最近的域控制器 (LogonServer) 会将身份验证请求重定向到具有 PDC 模拟器 FSMO 角色的 DC(此特定 DC 负责处理帐户锁定)。如果 PDC 上的身份验证也失败,它会响应身份验证失败的第一个 DC。如果验证失败的次数超过帐户锁定阈值策略中为域设置的值,则用户帐户将被暂时锁定。

在这种情况下,两个域控制器的安全日志中都会记录 EventID 4740 的事件。该事件包含发出初始用户身份验证请求的计算机的 DNS 名称(IP 地址)。为了不解析所有DC上的日志,最简单的方法是在PDC上的安全日志中查找锁定事件。您可以按如下方式找到域中的主域控制器:

(Get-AdDomain).PDCEmulator

域帐户锁定事件可以在域控制器上的安全日志中找到(事件查看器 -> Windows 日志)。按 EventID 4740 过滤安全日志。您应该会看到最新帐户锁定事件的列表。从最顶部滚动浏览所有事件,找到一个表明您要查找的用户的帐户已锁定的事件(用户名列在帐户名称值中,事件描述“用户帐户已被锁定”)。

注意。在大型 AD 环境中,许多事件都会写入域控制器上的安全日志,而较新的事件会逐渐覆盖这些事件。因此,建议增加 DC 上的最大日志大小并尽快开始寻找锁定源。

[玩转系统] 确定 Active Directory 帐户锁定的来源:故障排除

开启本次活动。记录帐户锁定事件的计算机(服务器)的名称在调用者计算机名称字段中指定。在本例中,计算机的名称为 DACZCZL5-Z。

如果“计算机名称”字段包含无法通过 DNS 在网络上解析的未知计算机/设备名称(非域计算机或支持 Kerberos 身份验证的非 Windows 设备),您可以获取该设备的 IP 地址。为此,您必须在默认域控制器策略中启用以下审核设置。转到计算机配置 -> 策略 -> Windows 设置 -> 安全设置 -> 高级审核配置并启用以下审核选项:

账户登录

  • 审核 Kerberos 身份验证服务:成功、失败

  • 审核 Kerberos 服务票证操作:成功、失败

登录/注销

  • 审计特殊登录:成功、失败

打开事件查看器 -> 安全日志并启用事件 ID 47404741 的过滤器。请注意,现在在用户锁定事件 (4740) 发生之前,事件 4771 (

Kerberos Authentication Failed

) 来自 Kerberos 身份验证服务的信息将会出现。它包含尝试进行身份验证的用户的名称以及发出身份验证请求的设备的 IP 地址(字段网络信息 -> 客户端地址)。

[玩转系统] 确定 Active Directory 帐户锁定的来源:故障排除

如果远程设备使用 NTLM 域身份验证,则应在 DC 上查找 EventID 4625(NTLM 身份验证失败)(它仅包含在尝试 NTLM 身份验证的域控制器上)。

打开您的用户(帐户名)的 EventID 4625 的最后一个事件。在这里您可以看到,当尝试执行 NTLM 身份验证时(身份验证包:

NTLM

,登录过程:

NtLmSsp

),账户被锁定(

Failure Reason: Account locked out

,

Status: 0xC0000234

)。事件描述包含计算机名称(工作站名称)及其 IP 地址(源网络地址)。

[玩转系统] 确定 Active Directory 帐户锁定的来源:故障排除

如果在事件查看器日志中找不到用户锁定源,可以在域控制器上启用 netlogon 的调试日志记录。运行命令:

nltest /dbflag:2080ffffff

重新启动 Netlogon 服务

net stop netlogon && net start netlogon

在 netlogon.log 文件中搜索事件:

  • 0xc000006a - 以下用户尝试登录无效;

  • 0xc0000234 - 由于请求的无效登录尝试或密码更改尝试次数过多,用户帐户已被自动锁定。

您可以找到该用户的锁定事件

a.baker

在里面

netlogon.log

使用以下命令创建文件:

type C:\Windows\debug\netlogon.log | findstr a.baker| findstr /i "0xC000006A"

[玩转系统] 确定 Active Directory 帐户锁定的来源:故障排除

在此示例中,您可以看到用户 a.baker 被锁定在 DESKTOP-12361B 设备上。

调试完成后,请务必在 DC 上禁用高级 netlogon 日志记录:

nltest /dbflag:0x0

使用 PowerShell 获取帐户锁定的来源(计算机)

您可以使用以下 PowerShell 脚本在 PDC 事件日志上查找特定用户帐户锁定的根源。以下脚本在 PDC 上的安全事件日志中搜索事件 ID 4740 的事件,并返回锁定时间和发生该事件的计算机的名称:

$Usr = ‘username1’
$Pdc = (Get-AdDomain).PDCEmulator
$ParamsEvn = @{
‘Computername’ = $Pdc
‘LogName’ = ‘Security’
‘FilterXPath’ = "*[System[EventID=4740] and EventData[Data[@Name='TargetUserName']='$Usr']]"
}
$Evnts = Get-WinEvent @ParamsEvn
$Evnts | foreach {$_.Properties[1].value + ' ' + $_.TimeCreated} 

[玩转系统] 确定 Active Directory 帐户锁定的来源:故障排除

同样,您可以使用 PowerShell 查询 Active Directory 中的所有域控制器:

$Usr = ‘username1’
Get-ADDomainController -fi * | select -exp hostname | % {
$ParamsEvn = @{
‘Computername’ = $Pdc
‘LogName’ = ‘Security’
‘FilterXPath’ = "*[System[EventID=4740] and EventData[Data[@Name='TargetUserName']='$Usr']]"
}
$Evnts = Get-WinEvent @ParamsEvn
$Evnts | foreach {$_.Computer + " " +$_.Properties[1].value + ' ' + $_.TimeCreated}
}

使用帐户锁定和管理工具跟踪 AD 锁定事件

您可以使用Microsoft 帐户锁定和管理工具包中的图形Lockoutstatus.exe工具来查找用户帐户锁定的来源(您可以在此处下载)。此实用程序检查所有域控制器上的帐户锁定状态。

跑过

Lockoutstatus.exe

工具,指定锁定帐户的名称(目标用户名)和域名(目标域名)。

[玩转系统] 确定 Active Directory 帐户锁定的来源:故障排除

显示的列表将包含 DC 列表和帐户状态(锁定或非锁定)。此外,还会显示锁定时间和锁定此帐户的计算机 (Orig Lock)。

[玩转系统] 确定 Active Directory 帐户锁定的来源:故障排除

badPwdCount 和 LastBadPasswordAttempt 属性不会在域控制器之间复制。

您可以解锁用户帐户,或直接从锁定状态窗口更改密码。

[玩转系统] 确定 Active Directory 帐户锁定的来源:故障排除

LockoutStatus 工具的主要缺点是它会长时间查询所有域控制器(其中一些可能不可用)。

如何找到锁定用户域帐户的程序?

因此,我们已经找到了该帐户被锁定的计算机或设备。现在,很高兴知道到底是什么程序或进程导致登录尝试失败,并且是帐户锁定事件的根源。

通常,用户开始抱怨更改密码后锁定其域帐户。在大多数情况下,这意味着旧(不正确)密码保存在某个程序、脚本或服务中,这些程序、脚本或服务会定期尝试使用错误的旧密码在 DC 上进行身份验证。让我们看看用户可能保存旧密码的最常见位置:

  • 映射网络驱动器(通过

    net use

    );

  • Windows 任务计划程序作业;

  • 配置了 RunAs 模式的快捷方式(用于代表另一个用户运行程序);

  • 配置为在域帐户下运行的 Windows 服务;

  • 在凭据管理器(在控制面板中)中保存凭据;

    有时用户密码可以存储在系统上下文中。如果您以 LocalSystem 身份打开命令提示符(使用 psexec 工具)并运行命令,则可以列出它们

    rundll32 keymgr.dll,KRShowKeyMgr

    显示 NT AUTHORITY\SYSTEM 的已保存密码。

  • 移动设备(例如用于访问公司邮箱的设备);

  • 在具有自动登录功能或配置的 Windows 自动登录的程序中保存(缓存)密码;

  • 其他计算机或 RDS 场/主机上断开/空闲的 RDP 会话(始终为 RDP 会话设置超时);

  • 在 Windows Wi-Fi 网络配置文件中保存的密码(如果您在无线网络中使用 WPA2-Enterprise 802.1x 身份验证)。

要对您在 DC 日志中找到的计算机执行详细的帐户锁定审核,您必须启用许多本地 Windows 审核策略。为此,请打开本地组策略编辑器(

gpedit.msc

)在计算机(您要在其上查找锁定源)上,并在计算机配置 -> Windows 设置 -> 安全设置 -> 本地策略 -> 审核策略部分中启用以下策略:

  • 审核流程跟踪:成功、失败

  • 审核登录事件:成功、失败

[玩转系统] 确定 Active Directory 帐户锁定的来源:故障排除

然后更新客户端上的组策略设置:

gpupdate /force

等待下一次帐户锁定,并在安全日志中查找事件 ID 4625 的事件。在我们的例子中,该事件如下所示:

An account failed to log on.
Failure Reason: Account locked out.

[玩转系统] 确定 Active Directory 帐户锁定的来源:故障排除

从事件描述中可以看出,帐户锁定的根源是mssdmn.exe进程(Sharepoint组件)。在这种情况下,用户需要在 Sharepoint 门户网站上更新密码。

排除故障并检测并排除锁定原因后,不要忘记禁用本地审核策略。

如果您仍然无法在特定计算机上找到帐户锁定源,只需尝试在 Active Directory 中重命名用户帐户(更改 AD 中用户的 SAMaccountName 和 UPN)。如果无法建立锁定源,这通常是防止特定用户突然锁定的最有效方法。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯