16.3. 総当たり攻撃
総当たり攻撃は、複数回ログインを試みることで、ユーザーのパスワードを推測しようとします。Red Hat build of Keycloak にはブルートフォース検出機能があり、ログインの失敗回数が指定のしきい値を超えた場合にユーザーアカウントを完全にまたは一時的に無効にできます。
ユーザーがロックされている状態でログインしようとすると、Red Hat build of Keycloak はデフォルトの Invalid username or password エラーメッセージを表示します。このメッセージは、アカウントが無効になっていることに攻撃者が気付かないようにするために、無効なユーザー名または無効なパスワードに対して表示されるメッセージと同じエラーメッセージです。
Brute Force Detection (ブルートフォース検出) は、デフォルトでは無効になっています。この機能を有効にして、総当たり攻撃から保護します。
この保護を有効にするには、以下を実行します。
- メニューで Realm Settings をクリックします。
- Security Defenses タブをクリックします。
- Brute Force Detection タブをクリックします。
要件に最適な Brute Force Mode を選択します。
ブルートフォースの検出
16.3.1. 完全なロックアウト リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak は、管理者が再度有効にするまで、ユーザーアカウントを無効にします (ログイン試行をブロックします)。
完全なロックアウト
永続的なロックアウトのパラメーター
| 名前 | 説明 | デフォルト |
|---|---|---|
| Max Login Failures | ログイン失敗の最大数。 | 30 failures |
| Quick Login Check Milliseconds | ログイン試行の最小時間。 | 1000 milliseconds |
| Minimum Quick Login Wait | ログイン試行が Quick Login Check Milliseconds よりも短い場合にユーザーが無効になる最小時間。 | 1 minute |
永続的なロックアウトフロー
正常なログイン時
-
countをリセット
-
ログインの失敗
-
countをインクリメント countがMax login failures以上の場合- ユーザーをロックします。
それ以外の場合、この障害から最後の障害までの時間が Quick Login Check Milliseconds 未満の場合
- Minimum Quick Login Wait で指定された期間、ユーザーをロックします。
-
ユーザーアカウントを有効にすると、count がリセットされます。
16.3.2. 一時的にロックアウト リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak は、特定の期間、ユーザーアカウントを無効にします。攻撃が続くと、アカウントが無効になる期間が長くなります。
一時的にロックアウト
一時的なロックアウトパラメーター
| 名前 | 説明 | デフォルト |
|---|---|---|
| Max Login Failures | ログイン失敗の最大数。 | 30 failures |
| Strategy to increase wait time | ユーザーのログイン試行回数が Max Login Failures を超えた場合に、ユーザーが一時的に無効になる時間を延長するストラテジー | Multiple |
| Wait Increment | ユーザーのログイン試行が Max Login Failures を超えると、ユーザーが一時的に無効になる時間に追加された時間。 | 1 minute |
| Max Wait | ユーザーが一時的に無効になっている最大時間。 | 15 minutes |
| Failure Reset Time |
失敗数がリセットされる時間。最後にログインに失敗したタイミングからタイマーが実行されます。この数値は必ず | 12 時間 |
| Quick Login Check Milliseconds | ログイン試行の最小時間。 | 1000 milliseconds |
| Minimum Quick Login Wait | ログイン試行が Quick Login Check Milliseconds よりも短い場合にユーザーが無効になる最小時間。 | 1 minute |
一時的なロックアウトアルゴリズム
正常なログイン時
-
countをリセット
-
ログインの失敗
この障害から最後の障害までの時間が Failure Reset Time よりも長い場合
-
countをリセット
-
-
countをインクリメント -
定義されたブルートフォースストラテジーに従って
waitを計算します (以下の「待機時間を設定するストラテジー」を参照してください)。 waitが 0 以下で、この失敗から最後の失敗までの時間が Quick Login Check Milliseconds 未満の場合-
waitを Minimum Quick Login Wait に設定します。
-
waitが 0 より大きい場合-
wait秒および Max Wait 秒の短い方のユーザーを一時的に無効にします。
-
一時的に無効にされたアカウントがログインに失敗した場合、count は増加しません。
待機時間を設定するストラテジー
Red Hat build of Keycloak は、待機時間を計算するための 2 つのストラテジー (By multiples または Linear) を提供します。By multiples は、Red Hat build of Keycloak で導入された最初のストラテジーであるため、これがデフォルトになります。
By multiples ストラテジーでは、失敗の数 (またはカウント) が 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 |
5 回目の失敗で、アカウントは 30 秒間無効になります。Max Login Failures の次の倍数 (この場合は 10) に達すると、時間は 30 秒から 60 秒に増加します。
By multiple ストラテジーでは、待機時間の計算に Wait Increment (秒) x (count / Max Login Failures) という式を使用します。除算は、整数に丸められる整数除算です。
線形ストラテジーの場合、失敗の count (または回数) が 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 |
5 回目の失敗で、アカウントは 30 秒間無効になります。新しい障害が発生するたびに wait increment で指定された値に従って待機時間が増加します。
Linear ストラテジーでは、待機時間の計算に Wait Increment (秒) x (1 + count - Max Login Failures) という式を使用します。
16.3.3. 一時的なロックアウト後の完全なロックアウト リンクのコピーリンクがクリップボードにコピーされました!
混合モード。指定された回数、ユーザーを一時的にロックし、その後ユーザーを完全にロックします。
一時的なロックアウト後の完全なロックアウト
一時的なロックアウト後の永久的なロックアウトパラメーター
| 名前 | 説明 | デフォルト |
|---|---|---|
| Max Login Failures | ログイン失敗の最大数。 | 30 failures |
| Maximum temporary Lockouts | 永続的なロックアウトが発生する前に許可される一時的なロックアウトの最大数。 | 1 |
| Strategy to increase wait time | ユーザーのログイン試行回数が Max Login Failures を超えた場合に、ユーザーが一時的に無効になる時間を延長するストラテジー | Multiple |
| Wait Increment | ユーザーのログイン試行が Max Login Failures を超えると、ユーザーが一時的に無効になる時間に追加された時間。 | 1 minute |
| Max Wait | ユーザーが一時的に無効になっている最大時間。 | 15 minutes |
| Failure Reset Time |
失敗数がリセットされる時間。最後にログインに失敗したタイミングからタイマーが実行されます。この数値は必ず | 12 時間 |
| Quick Login Check Milliseconds | ログイン試行の最小時間。 | 1000 milliseconds |
| Minimum Quick Login Wait | ログイン試行が Quick Login Check Milliseconds よりも短い場合にユーザーが無効になる最小時間。 | 1 minute |
一時的なロックアウト後の完全なロックアウトアルゴリズム
正常なログイン時
-
countをリセット -
temporary lockoutのリセット
-
ログインの失敗
この障害から最後の障害までの時間が Failure Reset Time よりも長い場合
-
countをリセット -
temporary lockoutのリセット
-
-
countをインクリメント -
定義されたブルートフォースストラテジーに従って
waitを計算します (以下の「待機時間を設定するストラテジー」を参照してください)。 waitが 0 以下で、この失敗から最後の失敗までの時間が Quick Login Check Milliseconds 未満の場合-
waitを Minimum Quick Login Wait に設定します。 -
quick login failureをtrue`に設定します。
-
waitおよびMaximum temporary Lockoutsが 0 より大きい場合-
waitをwaitと Max Wait (秒単位) の最小値に設定します。
-
quick login failureがfalseの場合-
temporary lockoutカウンターの値を増やします。
-
temporary lockoutカウンターがMaximum temporary lockoutsを超えた場合- ユーザーを完全にロックします。
それ以外の場合
-
waitの値に応じてユーザーを一時的にブロックします。
-
一時的に無効にされたアカウントがログインに失敗した場合、count は増加しません。
16.3.4. Red Hat build of Keycloak の欠点 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak のブルートフォース検出の欠点として、サーバーが DoS 攻撃に対して脆弱になることが挙げられます。攻撃者は、DoS 攻撃を実行する際に知っているアカウントのパスワードを推測してログインを試み、最終的にそのアカウントが Red Hat build of Keycloak によって無効にされる可能性があります。
侵入防止ソフトウェア (IPS) の使用を検討してください。Red Hat build of Keycloak は、ログインの失敗とクライアント IP アドレスの失敗をすべてログに記録します。IPS を、Red Hat build of Keycloak サーバーのログファイルを指すように設定できます。IPS は、ファイアウォールを変更して IP アドレスからの接続をブロックできます。