軽量なWordPress用ブルートフォースアタック対策プラグイン

軽量なWordPress用ブルートフォースアタック対策プラグイン

ネット上には非常に強力なWordPress向けブルートフォースアタック対策プラグインが転がっているのですが、結構重めのものが多いです。実名は挙げませんが、有料機能が存在するとか、特定の機能へのアクセスはAPIが必要など、何だかんだで動作が重いです。なのでシンプルなブルートフォースアタック対策プラグインを作ることを目的として完成させたものです。

brute-force-guard-lite

特徴はとにかく軽量です。あと一応PCPでチェック掛けているので、エラーは出ません(readmeがない以外)。いくつか列挙すると

  • 指定ユーザーのカウント対象外機能
  • 一定回数失敗時のロックアウト(wp-login.phpもREST APIもXMLRPCもすべて叩けなくなります)
  • UIによる設定変更
  • リバースプロキシがある環境下でもREAL IPの取得ができる
  • エラーメッセージなどは自由に編集可能
  • ログイン画面で一切のヒントを与えない

というものです。

ログイン画面でヒントを与えてはいけない理由

有名すぎて書くのも面倒ですが、本来ならログイン画面でのエラーメッセージは(あなたがGoogleのエンジニアでない限り)絶対に統一しなければいけません。例えば「user1@example.comはパスワードが間違っています」と表示することは親切に見えますが、攻撃者からすれば最高のヒントです。なぜならそのサイトに「user1@example.comというユーザーがいる」とわかるからです。正解は「IDかパスワードが違います」だけで良いのです(または「コーヒーブレイク」とでも出すか)。

基本インターフェイス

極力単純な作りにしました。

  • Max attempts:試行を許可する回数。これを超えるとそのIPアドレスはロックアウトされます
  • Block minutes:何分間ロックアウトするか
  • Custom block status:REST APIで表示するエラーコード
  • Custom block code:REST APIでのステータスコード
  • Custom block message:ログイン画面で表示するエラーメッセージ。空欄の場合は何分間制限するかが表示されるので適当な文字を入れることをお勧めします
  • Custom rest message:REST APIでのメッセージ
  • Custom login error message:wp-login.phpやXMLRPCを叩いた際のエラーメッセージ
  • Log retention (seconds):IPログの保持秒数。通常は300秒(5分)ぐらいで良いと思います
  • log_enabled:機能の有効・無効(これをオフにすると意味がありません)
  • Trusted proxy IPs (one per line, CIDR supported):cloudflare環境下など、リバースプロキシを使っている場合の信頼するプロキシ。サブネットマスク指定可能。
  • Disable e-mail Login:メールアドレスログインを禁止する。危ないのでメアドログインは禁止して良いと思う
  • Users not subject to regulation:ログイン制限を適用しないユーザー。ここに改行で突っ込んだユーザーIDはカウント対象外になります。自分自身のロックアウト対策に使ってください

実際の動作

evilという架空のユーザーIDとパスワードでログインを試行します。通常であれば不明なユーザー名ですとか、パスワードが違うというヒントを提示してしまいますが、このプラグインではそんなメッセージは出しません。すべて統一します。これは、パスワードのリマインダー画面でも同様のエラーが発生するようになっています。理由は先に挙げた通り(あなたが攻撃者に親切な人でなければ)、ヒントを与えること自体が攻撃の危険性を増すためです。また、間違えれば間違えるだけ、内部でデータベースのカウント回数があがっていくため、ロックアウトへのタイムリミットが始まります。今回のしきい値は5回なので、このまま5回間違えてみます。

無事にロックアウトされました。試しにREST APIを叩いても同様にエラーが返ります。XMLRPCは別のプラグインを入れているため今回は省いていますが、XMLRPCでも同様にエラーが返ります。完全にロックダウンされました、本当にありがとうございました。

内部ログ

肥大化防止のため揮発性にしていますが、制限時間内はログを全保存するようにしています(管理者ユーザーのロックアウト対策として)。なので、ログを完全保存したい場合はロックアウトの時間数と保持秒数を同一にしてください。

注意点

通常のブルートフォースアタック対策プラグインと違い、本気でブロックするタイプのプラグインです。そのため、極力管理者ユーザー、ホワイトリスト対象ユーザーはホワイトリストに入れることを推奨します。一応、最大制限時間数は24時間に設定していますが、固定IP環境など、プロバイダーから割り当てられたIPアドレスが変わらない環境下で、自分自身が間違えすぎると自分が締め出されてしまいます。このプラグインには緊急リセット機能などは設けていません。また、REST APIなど代替経路もブロックするため、締め出しを喰らうと自身でSQLの値を弄る以外に解除の方法がありません。設定の際には十分注意が必要です。そのため、推奨するのは特権ユーザーのみログイン制限を適用せず、低権限ユーザーはすべて規制対象とするものです。もちろん、わざと間違えまくれば自分のログインができなくなって詰みますが…

ダウンロードはGitHubからどうぞ。

コメントを投稿する

メールアドレスは公開されませんのでご安心ください。 * が付いている欄は必須項目となります。

内容に問題なければ、下記の「コメントを送信する」ボタンを押してください。

ページの先頭