元の投稿の方法 3 と 4 を一種の「ファジー」または動的ホワイトリストに組み合わせてから、ホワイトリストに登録されていない IP をブロックせずに、それらを調整して元に戻します .
この対策は、この非常に特殊なタイプの攻撃を阻止することのみを目的としていることに注意してください。もちろん、実際には、認証に対する他のベストプラクティスアプローチと組み合わせて機能します。固定ユーザー名のスロットリング、IP ごとのスロットリング、コード強制の強力なパスワードポリシー、スロットリングされていない Cookie ログイン、すべての同等のパスワードを保存する前のハッシュ化、決してセキュリティ質問などの使用
攻撃シナリオに関する仮定
攻撃者が変数のユーザー名をターゲットにしている場合、ユーザー名のスロットリングは作動しません。攻撃者がボットネットを使用しているか、広範囲の IP にアクセスしている場合、当社の IP スロットリングは無力です。攻撃者がユーザーリストを事前にスクレイピングしている場合 (通常はオープン登録 Web サービスで可能)、「ユーザーが見つからない」エラーの数に基づいて進行中の攻撃を検出することはできません。また、システム全体 (すべてのユーザー名、すべての IP) に制限的なスロットリングを適用すると、そのような攻撃は、攻撃とスロットリング期間の間、サイト全体を DoS 攻撃します。
ですから、何か他のことをする必要があります。
対策の最初の部分: ホワイトリスト登録
私たちがかなり確信できることは、攻撃者が数千人のユーザーの IP アドレスを検出して動的にスプーフィングすることができないということです(+)。これにより、ホワイトリストが実現可能になります。つまり、ユーザーごとに、ユーザーが以前 (最近) ログインした (ハッシュ化された) IP のリストを保存します。
したがって、私たちのホワイトリスト スキームは、ロックされた「フロント ドア」として機能し、ユーザーがログインするには、認識された「適切な」IP のいずれかから接続する必要があります。この「正面玄関」へのブルート フォース攻撃は事実上不可能です(+)。
(+) 攻撃者がサーバー、すべてのユーザーのボックス、または接続自体のいずれかを「所有」していない限り、これらの場合、「認証」の問題はなくなり、本物のフランチャイズ サイズのプルが発生します。 -プラグFUBARの状況
対策の 2 番目の部分:認識されていない IP のシステム全体のスロットリング
ユーザーが頻繁にコンピューターを切り替えたり、動的 IP アドレスから接続したりするオープン登録 Web サービスでホワイトリストを機能させるには、認識されていない IP から接続するユーザーに対して「猫のドア」を開いたままにしておく必要があります。その秘訣は、ボットネットが立ち往生し、正当なユーザーができるだけ煩わされないようにドアを設計することです。
私のスキームでは、たとえば 3 時間 (サービスの種類によっては、より短いまたはより長い期間を使用する方が賢明な場合があります) にわたって、承認されていない IP による失敗したログイン試行の非常に制限的な最大数を設定することによってこれが達成されます。その制限をグローバルにします。すべてのユーザー アカウントに対して。
この方法を使用すると、遅い (試行間隔が 1 ~ 2 分) 総当たり攻撃でさえ検出され、迅速かつ効果的に阻止されます。もちろん、非常に遅いブルート フォースは依然として見過ごされる可能性がありますが、速度が遅すぎると、ブルート フォース攻撃の目的そのものが無効になります。
このスロットリング メカニズムで達成したいことは、最大制限に達した場合、「キャット ドア」がしばらくの間バタンと閉じますが、通常の方法で接続する正当なユーザーに対してフロント ドアは開いたままになるということです。
- 認識されたIPの1つから接続することによって
- または永続的なログイン Cookie を使用して (どこからでも)
攻撃中に影響を受ける正当なユーザーのみ。スロットリングがアクティブ化されている間 - 永続的なログイン Cookie を持たないユーザーで、不明な場所から、または動的 IP を使用してログインしていた可能性があります。これらのユーザーは、スロットリングが解除されるまでログインできません (攻撃者がスロットリングにもかかわらずボットネットを実行し続けた場合、時間がかかる可能性があります)。
この小さなユーザーのサブセットが、ボットがまだドアを叩いているときでも、密閉されている猫のドアを通り抜けることができるようにするために、CAPTCHA を使用した「バックアップ」ログイン フォームを使用します。そのため、「申し訳ありませんが、現時点ではこの IP アドレスからログインできません」というメッセージが表示された場合は、「安全なバックアップ ログイン - HUMANS のみ (ボット: 嘘をつかない)」というリンクを含めます。冗談はさておき、彼らがそのリンクをクリックすると、サイト全体のスロットリングをバイパスする reCAPTCHA 認証済みのログイン フォームが提供されます。そうすれば、彼らが人間であり、正しいログインとパスワードを知っている (そして CAPTCHA を読み取ることができる)場合、たとえ未知のホストから接続していて自動ログイン Cookie を使用していない場合でも、サービスが拒否されることはありません。
ああ、そして明確にするために:私はCAPTCHAは一般的に悪だと考えているので、「バックアップ」ログインオプションはスロットリングがアクティブな間だけ表示されます.
このような継続的な攻撃が依然として DoS 攻撃の形態を構成することは否定できませんが、説明されているシステムが整っていれば、ユーザーのごく一部であると思われるユーザー、つまり、 「remember me」Cookie であり、攻撃が発生しているときにたまたまログインし、通常の IP からログインしておらず、CAPTCHA を読み取ることができない. これらすべての基準にノーと言える人、特にボットと本当に不運な身体障害者だけが、ボット攻撃の際に追い返されます。
編集:実際には、CAPTCHA に挑戦したユーザーでも「ロックダウン」中に通過できるようにする方法を考えました: バックアップの CAPTCHA ログインの代わりに、または補足として、使い捨てのオプションをユーザーに提供します。 、ユーザー固有のロックダウン コードがメールに送信され、スロットリングをバイパスするために使用できます。これは間違いなく私の「煩わしさ」のしきい値を超えていますが、これはごく一部のユーザーの最後の手段としてのみ使用されており、アカウントからロックアウトされるよりはましであるため、許容範囲内です。
(また、攻撃がここで説明した厄介な分散バージョンよりも洗練されていない場合、これは何も起こらないことに注意してください。攻撃がほんの数個の IP から来ているか、少数のユーザー名にしかヒットしていない場合は、はるかに早く阻止されます。 、サイト全体への影響なし)
それで、それが健全であり、私が見逃したより簡単な解決策がないことを確信したら、それが私の認証ライブラリに実装する対策です。実際のところ、セキュリティにおいて間違ったことを行う巧妙な方法は数多くあります。私は、誤った仮定や絶望的に欠陥のある論理を作ることを避けません。したがって、すべてのフィードバック、批判、改善、微妙な点などは高く評価されます。