密码喷射调查
本文介绍了如何识别和调查组织内部存在的密码喷射攻击,以及如何采取必要的补救措施来保护信息,并最大程度地降低未来的风险。
本文包含以下各节:
- 先决条件:介绍在开始调查之前需要完成的特定要求。 例如,应启用的日志记录、所需的角色和权限,等等。
- 工作流:显示执行此调查应遵循的逻辑流。
- 清单:包含流程图中每个步骤的任务列表。 此清单有助于在高度管控的环境中验证你已完成的工作或仅用作自我质量检验的标准。
- 调查步骤:包括用于此特定调查的详细分步指南。
- 恢复:包含有关如何从密码喷射攻击中恢复/缓解的高级别步骤。
- 参考:包含更多阅读和参考资料。
先决条件
在开始调查之前,请确保已完成日志和警报以及其他系统需求的设置。
对于 Microsoft Entra 监控,请按照 Microsoft Entra SecOps 指南中的建议和指南进行操作。
设置 AD FS 日志记录
ADFS 2016 上的事件日志记录
默认情况下,Windows Server 2016 中的 Microsoft Active Directory 联合身份验证服务 (ADFS) 启用了基本的审核级别。 在基本审核级别下,对于单个请求,管理员最多可看到五个事件。 将日志记录设置为最高级别,并将 AD FS(和安全性)日志发送到 SIEM,以与 AD 身份验证和 Microsoft Entra ID 相关联。
若要查看当前审核级别,请使用以下 PowerShell 命令:
Get-AdfsProperties
此表列出了可用的审核级别。
审核级别 | PowerShell 语法 | 说明 |
---|---|---|
无 | Set-AdfsProperties -AuditLevel None |
审核已禁用,不会记录任何事件 |
基本(默认) | Set-AdfsProperties -AuditLevel Basic |
对于单个请求,最多会记录 5 个事件 |
详细 | Set-AdfsProperties -AuditLevel Verbose |
记录所有事件。 此级别会记录每个请求的大量信息。 |
若要提高或降低审核级别,请使用以下 PowerShell 命令:
Set-AdfsProperties -AuditLevel <None | Basic | Verbose>
设置 ADFS 2012 R2/2016/2019 安全日志记录
选择“开始”,导航到“程序>管理工具”,然后选择“本地安全策略”。
导航到“安全设置\本地策略\用户权限管理”文件夹,然后双击“生成安全审核”。
在“本地安全设置”选项卡中,验证是否已列出 ADFS 服务帐户。 如果不存在,请选择“ 添加用户 或 组 ”并将其添加到列表中,然后选择“ 确定”。
若要启用审核,请使用提升的权限打开命令提示符,并运行以下命令:
auditpol.exe /set /subcategory:"Application Generated" /failure:enable /success:enable
关闭“本地安全策略”。
接下来,打开 ADFS 管理管理单元,选择“开始”,导航到“程序>管理工具”,然后选择“ADFS 管理”。
在“操作”窗格中,选择“编辑联合身份验证服务属性” 。
在“联合身份验证服务属性”对话框中,选择“事件”选项卡 。
选中“成功审核”和“失败审核”复选框。
选择“确定”完成并保存配置。
安装 Microsoft Entra Connect Health for ADFS
Microsoft Entra Connect Health for ADFS 代理可帮助你更清楚地了解联合身份验证环境。 它提供了多个预配置的仪表板,例如使用情况、性能监视和风险 IP 报告。
若要安装 ADFS Connect Health,请仔细阅读 Microsoft Entra Connect Health 使用要求,然后安装 Azure ADFS Connect Health 代理。
使用 ADFS 有风险的 IP 报告工作簿设置有风险的 IP 警报
在配置 Microsoft Entra Connect Health for ADFS 以后,你应该使用 ADFS 风险 IP 报告工作簿和 Azure Monitor 监控并设置警报。 使用此报告的优势如下:
- 检测超出基于密码的登录失败次数阈值的 IP 地址。
- 支持在密码错误或出现 Extranet 状态为锁定的情况下,强制登录失败。
- 支持通过 Azure 警报启用警报。
- 阈值设置可以自定义,因此可以与组织的安全策略相匹配。
- 可自定义的查询和扩展的可视化效果,用于进一步分析。
- 扩展了以前的风险 IP 报告中的功能,而以前的风险 IP 报告在 2022 年 1 月 24 日弃用。
在 Microsoft Sentinel 上设置 SIEM 工具警报
若要设置 SIEM 工具警报,请详细阅读有关现成警报的教程。
SIEM 集成到 Microsoft Defender for Cloud Apps
将安全信息和事件管理 (SIEM) 工具连接到 Microsoft Defender for Cloud Apps,它当前支持 Micro Focus ArcSight 和一般通用事件格式 (CEF)。
有关详细信息,请参阅通用 SIEM 集成。
SIEM 与 图形 API 的集成
可使用以下任一选项将 SIEM 连接到 Microsoft Graph 安全性 API:
- 直接使用受支持的集成选项 – 请参阅受支持的集成选项列表,例如编写代码直接连接应用程序以获得丰富的见解。 通过示例开始使用。
- 使用本机集成和 Microsoft 合作伙伴构建的连接器 – 请参阅 Microsoft Graph 安全性 API 合作伙伴解决方案来使用这些集成。
- 使用 Microsoft 构建的连接器 – 请参阅可用于连接 API 的连接器列表,通过各种解决方案实现安全事件和事件管理 (SIEM)、安全响应和业务流程 (SOAR)、事件跟踪和服务管理 (ITSM) 以及报告,等等。
有关详细信息,请参阅使用 Microsoft Graph 安全性 API 实现安全解决方案集成。
使用 Splunk
还可以使用 Splunk 平台来设置警报。
- 观看此视频教程,了解如何创建 Splunk 警报。
- 有关详细信息,请参阅 Splunk 警报手册。
Workflow
以程图显示了密码喷射调查工作流。
也可执行以下操作:
清单
调查触发器
- 从 SIEM、防火墙日志或 Microsoft Entra ID 接收触发器
- Microsoft Entra ID 保护密码喷射功能或风险 IP
- 登录失败次数过多(事件 ID 411)
- Microsoft Entra Connect Health for ADFS 中的高峰
- 另一安全事件(例如钓鱼)
- 未解释的活动,例如从不熟悉的位置登录,用户收到意外的 MFA 提示
调查
- 哪些内容会被警告?
- 是否能够确认此攻击是密码喷射?
- 确定攻击的时间线。
- 确定攻击的一个或多个 IP 地址。
- 筛选此时间段的成功登录和 IP 地址,包括密码登录成功但 MFA 失败的情况
- 检查 MFA 报告
- 帐户是否有非常规活动,例如使用新设备、新操作系统或新 IP 地址? 使用 Defender for Cloud Apps 或 Azure 信息保护检测可疑活动。
- 通知本地机构/第三方寻求帮助。
- 如果怀疑遭到入侵,请检查数据外泄。
- 检查关联帐户是否出现可疑行为,查找其是否与其他可能的帐户、服务及其他恶意 IP 地址相关联。
- 检查所有同一办公室成员/委托访问权限的帐户 - 密码安全机制(确保他们没有使用与已泄露帐户相同的密码)
- 运行 ADFS 帮助
缓解措施
请查看参考部分,了解有关如何启用以下功能的指南:
- 阻止攻击者的 IP 地址(请注意攻击者可能更改为其他 IP 地址)
- 更改疑似泄露的用户密码
- 启用 ADFS Extranet 锁定
- 禁用旧式身份验证
- 启用 Azure 标识保护(登录和用户风险策略)
- 启用 MFA(如果尚未启用)
- 启用密码保护
- 部署 Microsoft Entra Connect Health for ADFS(如果尚未部署)
恢复
- 在 Defender for Cloud Apps、SIEM、ADFS 和 Microsoft Entra ID 中标记错误的 IP 地址
- 检查是否存在其他形式的邮箱持久化,例如转发规则或添加的其他委派
- MFA 作为主要身份验证
- 配置 SIEM 与云的集成
- 配置警报 - 标识保护、ADFS Health Connect、SIEM 和 Defender for Cloud Apps
- 经验与教训(包括关键利益干系人、第三方和沟通团队)
- 安全状态审查/改进
- 计划运行定期攻击模拟器
还可以 Excel 文件格式下载密码喷射和其他事件 playbook 清单。
调查步骤
密码喷射事件响应
在继续调查之前,让我们先了解一些密码喷射攻击技术。
密码泄露:攻击者猜中了用户密码,但由于多重身份验证 (MFA) 等其他控制而无法访问该帐户。
帐户泄露:攻击者猜中了用户密码,并获取了该帐户的访问权限。
环境发现
识别身份验证类型
第一步,需要检查要调查的租户/已验证域使用的身份验证类型。
要获取特定域名的身份验证状态,请使用 Get-MgDomain PowerShell 命令。 下面是一个示例:
Connect-MgGraph -Scopes "Domain.Read.All"
Get-MgDomain -DomainId "contoso.com"
身份验证类型是联合还是托管?
如果身份验证类型为联合,则成功的登录将存储在 Microsoft Entra ID 中。 失败的登录存储在它们的标识提供者 (IDP) 处。 有关详细信息,请参阅 AD FS 故障排除和事件日志记录。
如果身份验证类型为托管(仅限云)、密码哈希同步 (PHS) 或直通身份验证 (PTA),则成功和失败的登录都将存储在 Microsoft Entra 登录日志中。
注意
分阶段推出功能允许租户域名为联合类型,但特定用户为托管类型。 请确定是否有用户是此组的成员。
为 ADFS 启用 Microsoft Entra Connect Health 了吗?
- 风险 IP 报告将提供可疑 IP 和日期/时间。 请启用通知。
- 另请查看钓鱼剧本中的联合登录调查
ADFS 中是否已启用高级日志记录?
- 此设置是 ADFS Connect Health 的要求,但可以单独启用
- 了解如何启用 ADFS 运行状况连接)
- 另请查看钓鱼剧本中的联合登录调查
日志是否存储在 SIEM 中?
若要检查是将日志存储在安全信息和事件管理(SIEM)还是任何其他系统中并关联日志:
- 日志分析 - 预建查询
- Microsoft Sentinel 预生成查询
- Splunk – 预建查询
- 防火墙日志
- UAL(如果超过 30 天)
了解 Microsoft Entra ID 和 MFA 报告
请务必了解所看到能够确定泄露的日志。 下面是了解 entra 登录和 MFA 报告的Microsoft快速指南:
事件触发器
事件触发器是一种或一系列导致触发预定义警报的事件。 例如,超出预定义阈值的错误密码尝试次数。 以下是在密码喷射攻击中发出警报的触发器的更多示例,以及这些警报出现的位置。 事件触发器包括:
用户
IP
用户代理字符串
日期/时间
异常
错误密码尝试次数
通过 Microsoft Entra Health Connect (假设该组件已安装)发现的活动中的异常峰值是关键指标。 其他指标如下:
- 整理日志时,通过 SIEM 发出的警报显示了峰值。
- ADFS 失败登录日志超过正常大小(这可能是 SIEM 工具中的警报)。
- 342/411 事件 ID 的数量增加 – 户名或密码不正确。 或者代表 extranet 锁定的 516 事件 ID 数量增加。
- 命中身份验证请求失败阈值 – Microsoft Entra ID 或 SIEM 工具中的风险 IP 警报/同时出现 342 和 411 错误(若要查看此信息,则应打开高级日志记录。)
Microsoft Entra Health Connect 门户中的风险 IP
如果一小时内的错误密码计数、一天内的错误密码计数以及 extranet 锁定达到自定义阈值,则风险 IP 将触发警报。
有关失败尝试的详细信息可在“IP 地址”和“extranet 锁定”选项卡中找到。
在 Azure 标识保护中检测密码喷射
Azure 标识保护是一项 Microsoft Entra ID P2 功能,具有密码喷射检测风险警报以及可提供更多信息或自动修正的搜索功能。
低级和慢速攻击指标
低级和慢速攻击指标是未命中帐户锁定阈值或错误密码的指标。 可通过以下方式检测这些指标:
- GAL 顺序中的尝试失败
- 具有重复属性(UA、目标 AppID、IP 阻止/位置)的尝试失败
- 计时 - 自动喷射在两次尝试之间往往具有更规律的时间间隔。
调查和缓解措施
注意
可在攻击持续/进行期间同时执行调查和缓解措施。
请在 ADFS 上打开高级日志记录(如果尚未打开)。
确定攻击的开始日期和时间。
从防火墙、ADFS、SIEM 或Microsoft Entra ID 确定攻击者 IP 地址(可能是多个源和多个 IP 地址)。
一旦确认为密码喷射,可能需要通知本地机构(警方、第三方和其他机构)。
整理和监视 ADFS 的以下事件 ID:
ADFS 2012 R2
- 审核事件 403 – 用户代理发出请求
- 审核事件 411 – 身份验证请求失败
- 审核事件 516 – extranet 锁定
- 审核事件 342 – 身份验证请求失败
- 审核事件 412 - 成功登录
若要收集审核事件 411 - 身份验证请求失败,请使用以下脚本:
PARAM ($PastDays = 1, $PastHours) #************************************************ #ADFSBadCredsSearch.ps1 #Version 1.0 #Date: 6-20-2016 #Author: Tim Springston [MSFT] #Description: This script will parse the ADFS server's (not proxy) security ADFS #for events which indicate an incorrectly entered username or password. The script can specify a #past period to search the log for and it defaults to the past 24 hours. Results >#will be placed into a CSV for #review of UPN, IP address of submitter, and timestamp. #************************************************ cls if ($PastHours -gt 0) {$PastPeriod = (Get-Date).AddHours(-($PastHours))} else {$PastPeriod = (Get-Date).AddDays(-($PastDays))} $Outputfile = $Pwd.path + "\BadCredAttempts.csv" $CS = get-wmiobject -class win32_computersystem $Hostname = $CS.Name + '.' + $CS.Domain $Instances = @{} $OSVersion = gwmi win32_operatingsystem [int]$BN = $OSVersion.Buildnumber if ($BN -lt 9200){$ADFSLogName = "AD FS 2.0/Admin"} else {$ADFSLogName = "AD FS/Admin"} $Users = @() $IPAddresses = @() $Times = @() $AllInstances = @() Write-Host "Searching event log for bad credential events..." if ($BN -ge 9200) {Get-Winevent -FilterHashTable @{LogName= "Security"; >StartTime=$PastPeriod; ID=411} -ErrorAction SilentlyContinue | Where-Object{$_.Message -match "The user name or password is incorrect"} | % { $Instance = New-Object PSObject $UPN = $_.Properties[2].Value $UPN = $UPN.Split("-")[0] $IPAddress = $_.Properties[4].Value $Users += $UPN $IPAddresses += $IPAddress $Times += $_.TimeCreated add-member -inputobject $Instance -membertype noteproperty -name >"UserPrincipalName" -value $UPN add-member -inputobject $Instance -membertype noteproperty -name "IP Address" ->value $IPAddress add-member -inputobject $Instance -membertype noteproperty -name "Time" -value >($_.TimeCreated).ToString() $AllInstances += $Instance $Instance = $null } } $AllInstances | select * | Export-Csv -Path $Outputfile -append -force ->NoTypeInformation Write-Host "Data collection finished. The output file can be found at >$outputfile`." $AllInstances = $null
ADFS 2016/2019
除了上述事件 ID,还请整理审核事件 1203 - 新凭据验证错误。
- 如果为联合方案,请整理此时间段内在 ADFS 上所有成功的登录。 快速登录和注销(在同一秒)可能是攻击者成功猜测和尝试密码的指示器。
- 对于同时使用联合和托管的方案,请整理此时间段内的所有 Microsoft Entra 成功或中断事件。
监视和整理来自 Microsoft Entra ID 的事件 ID
请参阅如何查找错误日志的含义。
以下来自 Microsoft Entra ID 的事件 ID 具有相关性:
- 50057 - 用户帐户已禁用
- 50055 - 密码已过期
- 50072 - 提示用户提供 MFA
- 50074 - 需要 MFA
- 50079 - 用户需要注册安全信息
- 53003 - 用户被条件访问阻止
- 53004 - 由于可疑活动无法配置 MFA
- 530032 - 被安全策略中的条件访问阻止
- 登录状态:成功、失败、中断
整理来自 Microsoft Sentinel playbook 的事件 ID
可以从 GitHub 上提供的 Microsoft Sentinel Playbook 获取所有事件 ID。
隔离并确认攻击
隔离 ADFS 和 Microsoft Entra 上成功和中断的登录事件。 这些是你需要关注的帐户。
阻止 IP 地址在 ADFS 2012R2 及以上版本进行联合身份验证。 下面是一个示例:
Set-AdfsProperties -AddBannedIps "1.2.3.4", "::3", "1.2.3.4/16"
收集 ADFS 日志
在一个时间期限内收集多个事件 ID。 下面是一个示例:
Get-WinEvent -ProviderName 'ADFS' | Where-Object { $_.ID -eq '412' -or $_.ID -eq '411' -or $_.ID -eq '342' -or $_.ID -eq '516' -and $_.TimeCreated -gt ((Get-Date).AddHours(-"8")) }
整理 Microsoft Entra ID 中的 ADFS 日志
Microsoft Entra 登录报告包括使用 Microsoft Entra Connect Health 时的 ADFS 登录活动。 请选择令牌颁发者类型为“联合”来筛选登录日志。
下面的示例是一条 PowerShell 命令,用于检索特定 IP 地址的登录日志:
Get-AzureADIRSignInDetail -TenantId b446a536-cb76-4360-a8bb-6593cf4d9c7f -IpAddress 131.107.128.76
此外,按照如下这些图像所示,可在 Azure 门户搜索时间期限、IP 地址以及成功和中断的登录。
然后,你可以下载这些数据并保存为 .csv 文件用于分析。 有关详细信息,请参阅 Microsoft Entra 管理中心内的登录活动报告。
设置发现优先级
有能力应对最严重的威胁是至关重要的。 此威胁可能表明攻击者已成功获取对帐户的访问权限,因此可以访问/外泄数据;攻击者具有密码,但可能无法访问该帐户。 例如,他们有密码,但未能通过 MFA 质询。 或者,攻击者未能猜中密码,但会继续尝试。 在分析过程中,请设置这些发现的优先级:
- 使用已知攻击者 IP 地址登录成功
- 使用已知攻击者 IP 地址登录中断
- 使用已知攻击者 IP 地址登录失败
- 使用其他未知 IP 地址登录成功
检查旧式身份验证
大多数攻击使用旧式身份验证。 有多种方法可以确定攻击的协议。
在 Microsoft Entra ID 中,导航到“登录”并筛选“客户端应用”。
选中列出的所有旧式身份验证协议。
或者,如果你有 Azure 工作区,则可在“监视和工作簿”下的 Microsoft Entra 管理中心中使用预建的旧版身份验证工作簿。
阻止 IP 地址,托管方案下的 Microsoft Entra ID(PHS 包括暂存)
导航到“新建命名位置”。
创建一项针对所有应用程序且仅阻止此命名位置的 CA 策略。
用户此前是否使用过此操作系统、IP、ISP、设备或浏览器?
如果用户未使用过它们而此活动异常,则标记该用户并调查其所有活动。
IP 是否被标记为“有风险”?
请确保记录密码登录成功但 MFA 失败的响应,因为此活动表明攻击者正在获取密码,但未能通过 MFA。
搁置任何看似正常登录的帐户,例如 MFA 通过、位置和 IP 不是非普通帐户。
MFA 报告
请务必检查 MFA 日志,以确定攻击者是否猜到了密码,但 MFA 提示符失败。 oft Entra 多重身份验证日志显示了当系统提示用户进行多重身份验证时各事件的身份验证详细信息。 请检查并确保 Microsoft Entra ID 中没有大量可疑的 MFA 日志。 有关详细信息,请参阅如何使用登录报告查看 Microsoft Entra 多重身份验证事件。
额外的检查
在 Defender for Cloud Apps 中,调查遭入侵帐户的活动和文件访问权限。 有关详细信息,请参阅:
检查用户是否有权访问更多资源,例如虚拟机 (VM)、域帐户权限、存储等。 如果有数据泄露,你应该通知更多的机构,如警察。
即时修正操作
- 请更改任何怀疑泄露或已经泄露的帐户密码。 此外,阻止该用户。 请确保遵循撤销紧急访问的指导原则。
- 在 Microsoft Entra ID 标识保护中,将任何已泄露的帐户标记为“已泄露”。
- 阻止攻击者的 IP 地址。 执行此操作时要格外小心,因为攻击者可以使用合法的 VPN,他们也会改变 IP 地址,从而会造成更多风险。 如果使用云身份验证,请在 Defender for Cloud Apps 或 Microsoft Entra ID 中阻止 IP 地址。 如果使用的是联合身份验证,则须在 ADFS 服务前方的防火墙级别阻止该 IP 地址。
- 阻止旧式身份验证(如果正在使用该验证,此操作可能会影响业务)。
- 启用 MFA(如果尚未启用)。
- 为用户风险和登录风险启用标识保护
- 检查已泄露的数据(电子邮件、SharePoint、OneDrive 和应用等)。 了解如何在 Defender for Cloud Apps 中使用活动筛选器。
- 维护密码安全机制。 有关详细信息,请参阅 Microsoft Entra 密码保护。
- 还可参阅 ADFS 帮助。
恢复
密码保护
通过启用自定义禁止密码列表,在 Microsoft Entra ID 和本地实现密码保护。 此配置会阻止用户设置弱密码或与组织有关联的密码:
有关详细信息,请参阅如何防御密码喷射攻击。
标记 IP 地址
在 Defender for Cloud Apps 中标记 IP 地址,用于接收与将来使用相关的警报:
标记 IP 地址
在 Defender for Cloud Apps 中,为 IP 作用域“标记”IP 地址,并为此 IP 范围设置警报,以供将来参考和加速响应。
为特定 IP 地址设置警报
配置警报
根据组织需求,可以配置警报。
在 SIEM 工具中设置警报并查看改进中的日志记录差异。 集成 ADFS、Microsoft Entra ID、Office 365 和 Defender for Cloud Apps 日志记录。
在 ADFS 运行状况连接和风险 IP 门户中配置阈值和警报。
请参阅如何在标识保护门户中配置警报。
使用条件访问或标识保护设置登录风险策略
建议的防御措施
- 培训最终用户、关键利益干系人、一线运营、技术团队、网络安全和通信团队
- 评审安全控制并做出必要的更改,从而改进或增强组织内部的安全控制
- 建议 Microsoft Entra 配置评估
- 运行常规攻击模拟器练习
参考
先决条件
- Microsoft Sentinel 警报
- SIEM 集成到 Defender for Cloud Apps
- SIEM 与图形 API 的集成
- Splunk 警报手册
- 安装 ADFS 运行状况连接
- 了解 Microsoft Entra 登录日志
- 理解 MFA 报告
缓解措施
- 密码喷射的缓解措施
- 启用密码保护
- 阻止旧式身份验证
- 阻止 ADFS 上的 IP 地址
- 访问控制(包括阻止 IP 地址)ADFS v3
- ADFS 密码保护
- 启用 ADFS Extranet 锁定
- MFA 作为主要身份验证
- 启用“标识保护”
- Microsoft Entra 审核活动参考
- Microsoft Entra 审核日志架构
- Microsoft Entra 登录日志架构
- Microsoft Entra 审核日志图形 API
- 风险 IP 警报
- ADFS 帮助
恢复
额外的事件响应 playbook
检查有关识别和调查这些额外类型的攻击的指导:
事件响应资源
- 针对新晋分析师和经验丰富的分析师的 Microsoft 安全产品和资源概述
- 计划安全操作中心 (SOC)
- Microsoft Defender XDR 事件响应
- Microsoft Defender for Cloud (Azure)
- Microsoft Sentinel 事件响应
- Microsoft 事件响应团队指南共享安全团队和领导者的最佳做法
- Microsoft 事件响应指南可帮助安全团队分析可疑活动