先日、くらのVPSで運用しているWordPressサイトがDDoS/DoS攻撃を受けました(その2)プラグインやスケールアップによる対策についてという記事を公開しました。
その記事の中で「WordPressへのDDoS/DoS攻撃 2種類の対処方法」という見出しをつけ、wp-login.phpとxmlrpc.phpに対する攻撃に分けてそれぞれ対処方法を説明しています。今回の記事では、とくに前者のwp-login.php攻撃に対処する方法をご紹介します。
wp-login.phpに対するDDoS/DoS攻撃とは
WordPressのwp-login.phpに対するDDoS/DoS攻撃は、ログインページへの高頻度の不正接続(ブルートフォース攻撃)を行なっている可能性があります。
総当たり攻撃(そうあたりこうげき)とは、暗号解読方法のひとつで、可能な組合せを全て試すやり方。力任せ攻撃、または片仮名でブルートフォースアタック(英: Brute-force attack)とも呼ばれる。
ブルートフォース攻撃についてWikipediaで調べると、このように説明されています
Login rebuilderによる対策
WordPressのプラグインの1つでLogin rebuilderを有効化すると、WordPressログインページのURLを変更できるようになります。WordPressのログインページはデフォルトでは”wp-login.php”という名前が使用されていますが、その名前を”wp-hoge”など任意の名前に変えることができます。
もし攻撃者が不正ログインのために”https://dummy.com/wp-login.php”などにアクセスすると、WordPressの404.phpに飛ばされることになります。
Login rebuilderの利用方法については上記のページが参考になります。
SiteGuard WP Pluginの利用
株式会社ジェイピー・セキュアが開発したSiteGuard WP Pluginは、WordPressの管理画面からインストールするだけでログインページの保護を簡単に行うことができます。
- SiteGuard WP Plugin | 国産WAFのJP-Secure
- ログインページ変更 | SiteGuard WP Plugin | 国産WAFのJP-Secure
- ログインロック | SiteGuard WP Plugin | 国産WAFのJP-Secure
そのプラグインの概要とwp-login.phpの保護についてはそれぞれ上記のページが参考になります。
SiteGuard Liteの利用
SiteGuard Liteはウェブアプリケーションの脆弱性を悪用した攻撃からWebサイトを保護するためにジェイピーセキュア社が開発したWAF(Webアプリケーションファイアウォール)です。製品の特徴として高品質なシグネチャによる防御性能と、シンプルで直観的なGUIを兼ね備えています。
SiteGuardLiteのインストールと基本設定
SiteGuard WP Pluginは、さくらインターネット以外のサーバーを使用しているWordPressサイトでもインストールすることができます。ですがSiteGuardLiteはLinuxサーバーのアプリケーションのため、root権限のあるサーバーなどでそのインストールが済んでいることが前提となります。
- さくらのVPSでSiteGuard Lite(Web Application Firewall)をセットアップする方法(その1)
- さくらのVPSでSiteGuard Lite(Web Application Firewall)をセットアップする方法(その2)
- さくらのVPSでSiteGuard Lite(Web Application Firewall)をセットアップする方法(その3)
そのインストールと基本的な設定については、上記の記事を参考にしてください。さくらのVPSではすでにSiteGuard Liteが標準でインストールされているOSを選択することができます。
具体的にはSiteGuard Lite内のカスタム・シグネチャという機能を使用して、wp-login.phpに対するブルートフォース攻撃に対抗します。そのカスタム・シグネチャには、パス名・パラメータ名・要求メソッドを設定します。
パス名の設定
条件登録の準備
SiteGuard Liteの管理画面に入って「モジュール設定」→「カスタムシグネチャ」に進みます。画面をスクロールすると現在の条件が登録されています。sample-02にチェックボタンを入れて、「編集」ボタンをクリックします。
条件編集の準備
「シグネチャ登録変更画面/編集」という画面が表示されますので、「条件編集」をクリックします。
デフォルトの条件は”/login\.php”となっていますので、”/wp-login\.php“に変更します。
条件の追加(パラメータ名)
wp-login.phpでパラメータ名を設定するということは、WordPressのログイン画面で、inputタグのname属性の値を設定することになります。したがってパラメータ名の設定は、「パラメータの名前」にチェックを入れた上で、「ユーザー名とパスワードの2種類のうちどちらかを追加設定する」ことになります。
「シグネチャ登録変更画面/編集」という画面が表示されますので、「条件追加」をクリックします。
「ユーザー名とパスワードの2種類のうちどちらかを追加設定する」という内容は、正規表現で”\A(log|pwd)\z“と記述します。パラメータ名のうち「ユーザーID(log)かパスワード(pwd)のいずれかの文字列に合致した場合」という意味になります。
条件の追加(要求メソッド)
WordPressの管理画面にログインするときのメソッドはPOSTです。正規表現の記述で”\APOST\Z“の文字列を入力します。
最終的にこのような状態にして「OK」ボタンをクリックします。
条件の有効化と登録
sample-02の項目を有効にして、「適用」ボタンをクリックします。条件の画面に遷移しますので、変更を確認(OK)して条件を登録します。
サーバーでバーチャルホストを設定している場合
当該サーバーでバーチャルホストを設定している場合のパス名の設定は、接続先URLがどうなっているかで、1つもしくは複数のパス名設定を行います。
パス名の設定が1つで済む場合
/var/www/html → https://hoge1.com 検査文字列 /wp-login\.php
当該URLにバーチャルホストのディレクトリ名を含まない場合、パス名の検査文字列は1つだけになります。
パス名の設定が複数必要な場合
/var/www/hoge1.com → https://hoge1.com /var/www/hoge2.com → https://hoge2.com 検査文字列 /hoge1.com/wp-login\.php /hoge2.com/wp-login\.php
当該URLにバーチャルホストのディレクトリ名を含む場合、パス名の検査文字列は複数必要になります。
以上の作業を行うことによって、1秒間に3回以上、wp-login.phpへアクセスを行なったIPアドレスからの接続について、より安全に拒否できるようになります。