检测Entra ID中的密码喷洒攻击:使用诱饵账户
密码喷洒是一种通过猜测密码来获取账户控制权的流行技术。这种自动化的密码猜测会针对所有用户进行,并且通常可以避免账户被锁定,因为使用特定密码的登录尝试是针对每个用户逐一进行的。这项技术深受渗透测试人员、红队和威胁行为者的青睐,因为它通常很有效。
传统的密码喷洒检测通常涉及基于时间关联失败的密码尝试。这种检测方法充满了误报,因为普通用户经常输错和/或忘记他们的密码。本文描述了如何通过利用诱饵账户来检测Entra ID密码喷洒攻击,且不产生误报。
密码喷洒攻击原理
密码喷洒工具的工作原理是遍历一系列潜在密码,并逐一使用每个密码尝试对所有目标用户进行身份验证。如果成功,工具会记录此成功并继续。工具可能会在完成一个密码对所有用户的喷洒尝试后暂停一段时间,然后再尝试下一个密码。这样做可以规避密码锁定策略,因为攻击者可以限制单位时间内的错误密码尝试次数。
密码喷洒攻击步骤:
- 使用密码 #1 尝试对用户 #1 进行身份验证
- 使用密码 #1 尝试对用户 #2 进行身份验证
- 持续进行,直到使用密码 #1 对所有目标用户完成身份验证尝试
- 暂停几分钟以避免账户锁定
- 使用密码 #2 尝试对用户 #1 进行身份验证
- 使用密码 #2 尝试对用户 #2 进行身份验证
- 持续进行,直到使用密码 #2 对所有目标用户完成身份验证尝试
- 暂停几分钟以避免账户锁定
Entra ID密码喷洒的传统检测方法
一种方法是监控大致同时发生的失败登录。这种方法很可能产生误报。攻击者也可以改变他们的密码喷洒节奏,让密码尝试在更长的时间段内进行,从而更好地融入正常的用户活动中。
下面的屏幕截图显示了使用MSOLSpray PowerShell工具对Entra ID进行密码喷洒。
在下方的截图中,我们选中了状态字段,该字段显示了成功以及失败的登录尝试。请注意,当猜测的密码错误时,登录错误代码为50126;而当密码猜测成功时,登录错误代码为50079。在此案例中,由于需要MFA(多因素认证),密码虽被猜对,但未提供MFA作为身份验证的一部分。当使用用户名和密码成功认证且无需MFA时,登录错误代码为0。
我们可以将状态筛选为仅显示失败的尝试,这可能有助于识别潜在的密码喷洒活动,尽管攻击者可以改变其方法,这意味着攻击活动可能融入其中。不过,有趣的是,该活动显示应用程序为“Azure Active Directory PowerShell”。针对应用程序设置为Azure Active Directory PowerShell的失败尝试,可能与密码喷洒有关。
我们还可以看到此身份验证尝试的IP地址,因此我们可以基于相同的IP地址或来自同一网络(甚至地理位置)的多个IP地址进行关联分析。
使用诱饵账户检测Entra ID密码喷洒
利用诱饵账户是识别Entra ID密码喷洒活动的最佳方法,因为诱饵账户本不应有任何与之相关的登录活动。我们创建一个新用户(此处称为“Joe Fox”)作为我们的诱饵用户账户。该用户在组织中并不真实存在,因此理论上永远不会有相关的登录记录。我们可以使用该用户进行一次测试登录,使其看起来与其他常规用户账户相似。
在此示例中,我使用的账户名为Joe Fox(用户主体名:joefox@monarchsciences.org)。现在,与Joe Fox账户相关的任何登录活动都属于攻击者活动,并且很可能是密码喷洒的结果。这样做的好处是我们获得了可以封禁的IP地址和地理位置信息。
此信息可用于在捕获Entra ID登录日志的SIEM(安全信息和事件管理)系统中创建警报。
确定我们的诱饵账户Joe Fox最近登录尝试的一个快捷方法是:在Entra ID门户中打开该用户账户,点击“登录日志”,这将自动筛选出该用户的登录记录,如下方截图所示。
结论
对Entra ID进行密码喷洒是一种常见的攻击方法,使用多种开源工具可以轻松执行。检测此类活动传统上涉及关联登录日志以发现大致同时发生的失败登录。而利用诱饵账户则可以在没有误报的情况下实现检测。