如何在Active Directory域中查找帐户锁定的来源?
在本文中,很好地向我们展示了如何在Active Directory域控制器上跟踪用户帐户锁定事件,确定该帐户从哪台计算机和程序被不断锁定。为了找到帐户锁定源,我们可以使用Windows安全日志,PowerShell脚本或者MSFT帐户锁定和管理工具(Lockoutstatus.exe)
所引用的帐户当前已锁定,可能无法登录
如果已连续多次输入错误密码,则大多数组织中的域帐户安全策略都要求强制性Active Directory用户帐户锁定。通常,该帐户会被域控制器锁定几分钟(5-30),在此期间用户无法登录到AD域。一段时间(由域安全策略设置)后,该用户帐户将自动解锁。临时AD帐户锁定可降低对AD用户帐户进行暴力攻击的风险。
如果域中的用户帐户被锁定,则尝试登录Windows时会出现警告:
所引用的帐户当前已锁定,可能无法登录。
如何检查用户帐户是否被锁定?
我们可以验证帐户是否在ADUC图形控制台中或者使用PowerShell的Active Directory模块中的Get-ADUser cmdlet进行了锁定:
Get-ADUser -Identity jsmith -Properties LockedOut,DisplayName | Select-Object samaccountName, displayName,Lockedout
现在,该帐户已被锁定,不能用于域中的身份验证(Lockedout = True)。
我们可以使用Search-ADAccount cmdlet列出域中所有当前锁定的帐户:
Search-ADAccount -lockedout
我们可以使用ADUC控制台手动解锁帐户,而无需等到自动解锁。找到用户帐户,右键单击并选择"属性"。转到"帐户"标签,然后选中"解锁帐户"框。该帐户当前在此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域中的帐户锁定策略
通常使用gpmc.msc管理单元在整个域的"默认域策略"中设置帐户锁定策略。可以在"计算机配置-> Windows设置->安全设置->帐户策略->帐户锁定策略"中找到必要的策略。这些是以下策略:
- "帐户锁定阈值"是在帐户被锁定之前尝试输入错误密码的次数。
- "帐户锁定持续时间"将锁定帐户多长时间(此后将自动删除锁定);
- "之后重置帐户锁定计数器"是用于重置失败授权尝试的计数器的时间。
为了保护域用户帐户免受密码暴力攻击,建议在AD中使用强用户密码(密码长度至少为8个字符,并启用密码复杂性要求)。在"密码策略"部分使用"密码必须满足复杂性要求"和"最小密码长度"策略进行配置。我们需要定期审核用户密码。
用户忘记密码并导致帐户自身锁定的情况经常发生。如果用户最近更改了密码并忘记了密码,则可以重设密码。但是在某些情况下,帐户锁定是在没有任何明显原因的情况下发生的。 IE。用户声明输入密码时从未犯过错误,但是由于某种原因他的帐户已被锁定。管理员可以根据用户请求手动解锁帐户,但过一会儿情况可能会再次发生。
为了解决用户问题,管理员需要找到Active Directory中的用户帐户被锁定的计算机和程序。
域控制器的登录审核策略
要在域控制器日志中启用帐户锁定事件,我们需要为域控制器启用以下审核策略。转到GPO部分的"计算机配置->策略-> Windows设置->安全设置->高级审核策略->登录/注销",然后启用以下策略:
- 审核帐户锁定
- 审核登录
- 审核注销
启用此策略的最简单方法是通过gpmc.msc控制台,方法是编辑"默认域控制器策略",或者在整个域级别使用默认域策略。
帐户锁定事件ID 4740
首先,管理员必须找出从哪台计算机或者服务器上进行了错误的密码尝试,并进一步进行了帐户锁定。
如果最接近用户的域控制器确定用户正在尝试使用无效的凭据登录,它将使用" PDC模拟器" FSMO角色将身份验证请求重定向到DC(此特定DC负责处理帐户锁定)。如果PDC上的身份验证失败,它会向第一个DC做出响应,表明无法进行身份验证。如果认证失败的次数超过了在"帐户锁定阈值"策略中为域设置的值,则该用户帐户将被暂时锁定。
在这种情况下,事件ID为4740的事件将记录到两个域控制器的安全日志中。该事件包含发出用户初始授权请求的计算机的DNS名称(IP地址)。为了不分析所有DC上的日志,最简单的方法是在PDC域控制器上的安全日志中查找锁定事件。我们可以在域中找到PDC,如下所示:
(Get-AdDomain).PDCEmulator
可以在域控制器的安全日志中找到域帐户锁定事件(事件查看器-> Windows日志)。通过事件ID 4740过滤安全日志。我们应该看到最新的帐户锁定事件的列表。从最顶部滚动浏览所有事件,然后找到一个指示我们正在寻找的用户帐户的事件("帐户名"值中列出了用户名,事件描述"用户帐户已被锁定")。
注意。在大型AD环境中,大量事件被写入域控制器上的安全日志中,这些事件逐渐被较新的事件所覆盖。因此,建议增加DC上的最大日志大小,并尽快启动锁定源。
打开此活动。在"呼叫者计算机名称"字段中指定了执行锁定的计算机(服务器)的名称。在这种情况下,计算机名称为TS01.
如何查找使用PowerShell锁定了帐户的计算机?
我们可以使用以下PowerShell脚本在PDC事件日志上查找特定用户帐户锁定的来源。此脚本返回锁定时间和发生锁定的计算机的名称:
$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}
同样,我们可以从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} }
Microsoft帐户锁定和管理工具
要查找用户帐户锁定的来源,可以使用" Microsoft帐户锁定和管理工具"的一部分Lockoutstatus.exe工具(可以在此处下载)。此图形工具检查所有域控制器上的帐户锁定和锁定事件的状态。
运行过
Lockoutstatus.exe
工具,指定锁定帐户的名称("目标用户名")和域名("目标域名")。
出现的列表将包含DC和帐户状态(锁定或者非锁定)的列表。此外,还会显示锁定时间和锁定该帐户的计算机(" Orig Lock")。
badPwdCount和LastBadPasswordAttempt属性不会在域控制器之间复制。
我们可以解锁用户帐户,或者直接从Lockoutstatus窗口更改密码。
LockoutStatus工具的主要缺点是,它会查询所有域控制器一段时间(某些时间可能不可用)。
如何跟踪锁定域帐户的进程?
因此,我们发现该帐户是从哪台计算机或者服务器上锁定的。现在,很高兴知道哪些程序或者过程是帐户锁定的来源。
通常,用户在更改密码后会开始抱怨锁定自己的域帐户。这表明旧的(错误的)密码被保存在某个程序,脚本或者服务中,该程序,脚本或者服务会定期尝试使用错误的密码在DC上进行身份验证。考虑用户可以其中保存旧密码的最常见位置:
- 映射的网络驱动器(通过网络使用);
- Windows Task Scheduler作业;
- 配置为从域帐户运行的Windows服务;
- 保存在凭据管理器中的凭据(在"控制面板"中);
- 浏览器;
- 移动设备(例如,用于访问邮箱的设备);
- 具有自动登录或者配置的Windows自动登录功能的程序;
- 在另一台计算机或者RDS服务器上的RDP会话断开/空闲(因此,建议为RDP会话设置限制);
提示。
有许多第三方工具(大多数为商业工具)使管理员可以检查远程计算机并确定帐户锁定的来源。作为一个相当流行的解决方案,请注意Netwrix的Lockout Examiner。
要在找到的计算机上执行详细的帐户锁定审核,我们必须启用许多本地Windows审核策略。为此,请在要跟踪锁定源的计算机上打开本地组策略编辑器(gpedit.msc),并在"计算机配置-> Windows设置->安全设置"部分中启用以下策略->本地策略->审核策略:
- "审核过程跟踪":成功,失败
- "审核登录事件":成功,失败
等待下一个帐户锁定,然后在安全日志中找到具有事件ID 4625的事件。在我们的情况下,此事件如下所示:
An account failed to log on. Failure Reason: Account locked out.
从事件描述中可以看到,帐户锁定的来源是一个mssdmn.exe进程(Sharepoint组件)。在这种情况下,用户需要在Sharepoint Web门户上更新密码。
在分析结束并且检测到锁定原因并消除锁定原因之后,请不要忘记禁用本地审核策略。
如果我们仍找不到特定计算机上帐户锁定的来源,只需尝试在Active Directory中重命名用户帐户名。如果我们无法建立锁定源,这通常是防止特定用户突然锁定的最有效方法。