16.3. 暴力强制攻击
暴力强制通过尝试多次登录来猜测用户密码。红帽构建的 Keycloak 具有强行强制检测功能,如果登录失败超过指定阈值,可以临时禁用用户帐户。
默认情况下,Red Hat build of Keycloak 禁用括号强度检测。启用此功能来防止暴力攻击。
流程
启用这个保护:
- 在菜单中点 Realm Settings
- 点 Security Defenses 选项卡。
点 Brute Force Detection 选项卡。
波形强制检测
红帽 Keycloak 的构建可以在检测到攻击时部署永久锁定和临时锁定操作。永久锁定会禁用用户帐户,直到管理员重新启用它。临时锁定在指定时间段内禁用用户帐户。当攻击继续进行并后续的失败达到 Max Login Failures
时,禁用帐户的时间周期会增加。
当用户被临时锁定并尝试登录时,Red Hat build of Keycloak 会显示默认的 Invalid username 或 password
错误消息。这个消息与为无效的用户名或无效密码显示的消息相同,以确保攻击者不知道帐户被禁用。
常用参数
Name | 描述 | 默认 |
---|---|---|
最大登录失败 | 登录失败的最大数量。 | 30 个故障。 |
快速登录检查 Milliseconds | 登录尝试之间的最短时间。 | 1000 毫秒。 |
最小快速登录等待 | 当登录尝试比 Quick Login Check Milliseconds 更快时,用户禁用的最短时间。 | 1 分钟. |
临时锁定参数
Name | 描述 | 默认 |
---|---|---|
wait Increment | 当用户登录尝试超过 Max Login Failures 时,用户临时禁用到用户的时间。 | 1 分钟. |
Max Wait | 临时禁用用户的最长时间。 | 15 分钟. |
故障重置时间 |
故障计数重置的时间。计时器从最后一次失败的登录中运行。请确保此数字始终大于 | 12 小时. |
临时锁定算法
成功登录后
-
重置
计数
-
重置
在失败的登录时
如果此故障和最后一个故障之间的时间大于 Failure Reset Time
-
重置
计数
-
重置
-
增加
计数
-
根据定义的波形强制策略计算
等待
(请参阅以下策略来设置 Wait Time)。 如果
等待
等于小于 0,且此失败与最后一个故障之间的时间小于 Quick Login Check Milliseconds,请将wait
设置为 Minimum Quick Login Wait。-
为
等待
和 Max Wait 秒的最小值临时禁用用户 - 增加临时锁定计数器
-
为
当临时禁用的帐户提交登录失败时,计数
不会递增。
设置等待时间的策略
红帽 Keycloak 的构建提供了两个用于计算等待时间的策略: By multiples 或 Linear。通过多个策略,是红帽构建的 Keycloak 所引入的第一个策略,因此是默认的策略。
根据多个策略,当故障的数量(或计数)是 Max Login Failure
的倍数时,等待时间会递增。例如,如果您将 Max Login Failures
设置为 5
,而 Wait Increment
设为 30
秒,则帐户在多次验证尝试失败后将被禁用的有效时间:
|
|
|
|
1 | 30 | 5 | 0 |
2 | 30 | 5 | 0 |
3 | 30 | 5 | 0 |
4 | 30 | 5 | 0 |
5 | 30 | 5 | 30 |
6 | 30 | 5 | 30 |
7 | 30 | 5 | 30 |
8 | 30 | 5 | 30 |
9 | 30 | 5 | 30 |
10 | 30 | 5 | 60 |
在第五次尝试 Effective Wait Time
时,帐户在 30
秒内被禁用。到达下一次 Max Login Failures
后,本例中为 10
,时间从 30
秒增加到 60
秒。
By multiple 策略使用以下公式来计算等待时间: Wait Increment * (计数
/ Max Login Failures)。划分是一个整数部门,舍入为一个整数。
对于线性策略,当失败的数量(或计数)等于或大于 Max Login Failure
时,等待时间会递增。例如,如果您将 Max Login Failures
设置为 5
,而 Wait Increment
设为 '30' 秒,则帐户在多次验证尝试失败后将禁用的有效时间:
|
|
|
|
1 | 30 | 5 | 0 |
2 | 30 | 5 | 0 |
3 | 30 | 5 | 0 |
4 | 30 | 5 | 0 |
5 | 30 | 5 | 30 |
6 | 30 | 5 | 60 |
7 | 30 | 5 | 90 |
8 | 30 | 5 | 120 |
9 | 30 | 5 | 150 |
10 | 30 | 5 | 180 |
在第五次尝试执行 Effective Wait Time
时,帐户在 30
秒内被禁用。每次新失败尝试都会增加等待时间。
线性策略使用以下公式来计算等待时间: Wait Increment *(1 + count
- Max Login Failures)。
永久锁定参数
Name | 描述 | default |
---|---|---|
最大临时锁定 | 在发生永久锁定前允许的最大临时锁定数量。 | 0 |
永久锁定流
- 遵循临时锁定流
如果临时锁定计数器超过 Max temporary lockouts
- 永久禁用用户
当 Red Hat build of Keycloak 禁用用户时,用户无法登录,直到管理员启用了该用户。启用帐户重置 计数
。
红帽构建的 Keycloak 盘检测的缺点是服务器会受到拒绝服务攻击的影响。在实施拒绝服务攻击时,攻击者可以通过猜测其知道的帐户的密码来尝试登录,并最终导致红帽构建的 Keycloak 禁用帐户。
考虑使用入侵防止软件(IPS)。Red Hat build of Keycloak 会记录每个登录失败和客户端 IP 地址失败。您可以将 IPS 指向红帽构建的 Keycloak 服务器日志文件,IPS 可以修改防火墙以阻止来自这些 IP 地址的连接。
16.3.1. 密码策略 复制链接链接已复制到粘贴板!
确保您有一个复杂的密码策略,以强制用户选择复杂的密码。如需更多信息,请参阅 密码策略 章节。???通过将红帽构建的 Keycloak 服务器设置为使用一次性密码来防止密码猜测。