web-dev-qa-db-ja.com

ユーザーのログインがブルートフォースに攻撃されたときにサイトをフラッディングから保護する

私が管理しているウェブサイトにボットを押し込もうとするボットで問題が発生しています。洪水システムがトリガーされているのは毎日のようです(私はD7にいます)。

洪水システムが機能して攻撃を停止していることに満足していますが、問題はボットがプライベートIPを使用しているため、洪水がトリガーされると全員がロックアウトされることです。

実際のログイン検証に到達するボットの数を制限する方法があるかどうかを確認したいと思います。ログインフォームに隠しキャプチャを追加しようとしましたが、これは問題ありませんが、ボットの疑いがある場合でも、ログイン検証を停止しないため、フラッドシステムがトリガーされます。ボットの量を制限するためにそのプロセスの前に置くことができることを誰かが知っていますか?煩わしさが少ないほど、明らかに優れています。

2
Jance

他の誰かが同様の問題に遭遇した場合、私は2つのIPアドレスが私のワニスサーバーから来ていることに気づきませんでした。安全なログインを使用してユーザーのログイン試行をhttpsにリダイレクトすることができ(それはとにかくそれを行う必要があったはずです)、最終的にバニッシュをバイパスして、実際のIPをキャプチャできるようになりました。これにより、意図したとおりに機能するようにテーブルをフラッディングすることができました。

2
Jance

あなたが説明するタイプの悪意のあるボットは、世界中の オープンプロキシ (通常 許可なしに )を介して接続でき、それぞれが異なるIPアドレスを持っています。また、ハイジャックされたクライアントコンピューター/サーバーで トロイの木馬 やウイルスを使用して、作業を行うこともできます。言い換えると、IPアドレスをブロックに使用するDrupalの組み込みのフラッドコントロールシステムは、この種の攻撃に対処するには適していません。洪水システムによって問題が発生した場合(「全員をロックアウト」)は、システムを再構成するか、オフにする必要があります。

これを行うには、サイトのsettings.phpファイルに次の構成設定の1つまたは両方を追加します。

// Set per-IP failed login attempt limit to max and window to 5 seconds
$conf['user_failed_login_ip_limit'] = PHP_INT_MAX;
$conf['user_failed_login_ip_window'] = 5;

// Set per-user failed login attempt limit to max and window to 5 seconds
$conf['user_failed_login_user_limit'] = PHP_INT_MAX;
$conf['user_failed_login_user_window'] = 5;

このようにして、誰もロックアウトされません。

Drupalに組み込まれているフラッドコントロールを使用する代わりに、Apache ModSecurity を使用してサーバーへのボットのアクセスを制限し、コンテンツをフィルタリングします([ 〜#〜] post [〜#〜]リクエスト)、IPアドレスの代わりに。

HTTPトラフィックロギング に関するドキュメントから:

Webサーバーは通常、マーケティング分析に役立つ形式でトラフィックをログに記録する機能を備えていますが、Webアプリケーションへのトラフィックのログには不十分です。特に、ほとんどはリクエストボディをログに記録することができません。あなたの敵はこれを知っており、そのため、ほとんどの攻撃が[〜#〜] post [〜#〜]リクエストを介して実行され、システムをレンダリングしていますブラインド。 ModSecurityは完全なHTTPトランザクションロギングを可能にし、完全なリクエストとレスポンスをログに記録できるようにします。また、そのログ機能により、ログに記録される内容とタイミングについてきめ細かな決定を行うことができ、関連するデータのみが確実に記録されます。

まず、ボットが作成する[〜#〜] post [〜#〜]リクエストでパターンを発見し、Apacheを使用してそれらをブロックします。

5
Free Radical