如何在Active Directory域中查找帐户锁定的来源?

时间:2020-01-09 10:46:57  来源:igfitidea点击:

在本文中,很好地向我们展示了如何在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中重命名用户帐户名。如果我们无法建立锁定源,这通常是防止特定用户突然锁定的最有效方法。