ウェブサイトにログインモジュールを作成しました。ユーザー名/メールに基づいてユーザーを識別し、ユーザーアカウントごとの失敗したログイン試行に基づいてログインを調整できるため、単純なブルートフォース攻撃に対処することができました。
しかし、ユーザーが列挙したブルートフォース攻撃(別名、逆ブルートフォース攻撃)に関しては、ユーザーの特定はかなり困難になります。 IPアドレスごとの失敗した試行に基づいてログインを調整すると、同じ外部IPアドレスが割り当てられるため、ローカルネットワーク経由でインターネットに接続しているユーザーがうまく機能せず、他の誰かが試行に失敗したために調整に直面する可能性があるため、煩わしいネットワーク。
そのようなユーザーを一意に識別する方法はありますか?
同じ外部IPアドレスを持つユーザーを一意に識別する方法は?そのようなユーザーを一意に識別する方法はありますか?
はい、たくさんの方法があります:
しかし、これらのほとんどはブルートフォース攻撃からの防御には役立ちません。これは、それらを実行するプログラムがCookieを受け入れたり、JavaScriptを実行したりしないためです。
あなたの場合、あなたは試すかもしれません:
HTML5& WebRTC を使用すると、インターネットからでもユーザーの内部IPアドレスを取得できます。詳細については、記事 HTML5 WebRTCを使用したローカルIP検出:セキュリティとプライバシーのリスク? を確認して試してみてください。 http://net.ipcalf.com/ 。
記事を掲載しているウェブサイトは現在ダウンしているようです。ただし、この記事 WebRTC Founding Leaking Local IP Adresses もいくつかの情報を提供できると思います。
私の知る限り、なりすまし方法はありません。すでに最大試行回数を1分間のタイムアウトで1分あたり8回に制限している場合。 1分のタイムアウトは、ユーザーに十分な情報を提供する限り、一般的に迷惑とは見なされません。
誰があなたをブルートフォースにしようとしているのかを調査するのは興味深いかもしれないので、IPアドレスからブルートフォースが疑われる場所でこれらの発生を積極的に確認してください。
ここで説明する他のほとんどの方法は、簡単に無効にされたり、パフォーマンスが大幅に低下したりします。
これが、Webアプリケーションファイアウォール(WAF)がそれらに依存しない理由です。
2つの信頼できる方法は次のとおりです。
ソリューションをレート制限と組み合わせる場合、正しいレート制限は、ページあたりのURL数の1〜2倍にする必要があります。たとえば、login.phpに2つのCSSファイル、4つのJavaScriptファイル、10の画像と1つのページ自体が含まれている場合、クライアントセッションCookieごとに1秒あたり少なくとも合計17ヒットを許可する必要があります。それ以外の場合は、通常のリクエストをブロック/制限している可能性があります。
持続的な攻撃の場合は、上流のルートをブロックまたはブラックホール化するようにISPに依頼する必要があります。
他のソリューションを使用しないのはなぜですか?
「User-Agent:」はなりすましに非常に簡単です。
wget -O index.html --user-agent="My Fake Browser"
セッションCookie、「X-Forwarded-For:」HTTPヘッダー、およびその他のヘッダーも、盗む/偽造するのは簡単です。 Googleの「Firesheep」、「Cookies Manager +」、「Modify Headersプラグイン」、「LiveHeadersプラグイン」など。
ステルス攻撃はリクエスト間のランダム化または待機時間の増加を引き起こすため、レート制限だけでは十分ではありません。
wget --limit-rate=10 http://example.com/index.php
通常、ブルートフォースが唯一の問題ではありません。https://www.owasp.org/index.php/Top_10_2013-Top_1 =効果的な保護のコーディングとテストにも時間がかかります。 Webサーバーの時間やCPUサイクルを節約するには(サーバーファームがある場合は何倍にもなる無駄です)、Webホストは、これが構成されたフロントエンドWAFを提供する必要があります。これが最善の解決策です。サーバー側で実行しないでください。上流で行います。
一意の識別は難しいかもしれませんが、ユーザーエージェントなどのサーバー変数やCookieなどのローカル変数を追加する可能性があります(どちらも偽装や回避される可能性がありますが、少なくともIPアドレスと一緒にいくつかのバリエーションを追加します)。 JavaScriptがオプションの場合、次のことを試すことができます ブラウザフィンガープリント (JavaScriptまたはHTML5 Canvas)