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