JP-SecureによりSiteGuard WP Pluginが公開されたので、ログイン周りに関連する部分を試してみました。調査したプラグインバージョンは1.0.2です。試したのは以下の4つです。
Rename Login
CAPTCHA
Same Login Error Message
Login Lock
です。今回はログイン機能に関連するところを調査しましたので、Admin Page IP Filter、Fail once、Disable Pingback、WAF Tuning Supportは除外しました。
Rename Login
WordPressのログインページは、wp-login.phpになっています。このため、wp-login.phpを決めうちでアクセスし、ユーザー名/パスワードを試す、という攻撃があります。
この機能を有効にする(プラグインインストール直後で有効)と、wp-login.phpではなく、login_*****といったURLでログインしなければならなくなります。wp-login.php決めうちのブルートフォース攻撃には有効だと思われます。
ログインURLは管理画面から設定できます。もし、ログインURLを忘れた場合は、WordPressをインストールしているフォルダの.htaccessを見れば分かります。
パーマリンクを変更している場合、注意点があります。ログインURLを変更しても、URL/loginからリダイレクトされるにあるように、いったんURL/loginにアクセスすると、login_*****へリダイレクトされます。2014年10月時点では、私のブログへ来るブルートフォース攻撃は、ほとんどがwp-login.php決めうちです。ですが、将来、「いったんURL/loginを叩く」というもっと洗練された攻撃が流行するかもしれません。
CAPTCHA
ログイン画面では、通常はユーザー名/パスワードを入力します。この機能は、ランダムな文字列を表示して、その文字列を入力させることで、機械によるアクセスを防ぎます。
画像ではアルファベットですが、ひらがなも選択できるようです。
なお、このプラグインは、Really Simple CAPTCHA プラグイン(作者: Takayuki Miyoshi)をベースに、一部改造してcaptchaを出力しているようです。Really Simple CAPTCHA自体はオープンソースで公開されているので、こういった再利用は構いません。しかし、内部のコードを見ると、同じReallySimpleCaptchaというクラスが定義されています。このため、SiteGuard WP Pluginと、Really Simple CAPTCHAを一緒に使おうとすると、以下のようにエラーになります。
プラグインの説明に注意書きはしておいたほうが良さそうですね。将来的には、WordPressが名前空間を採用して、衝突を起こりにくいように改善するのが好ましいと思います。
Same Login Error Message
この機能は、ログイン失敗した時のエラーメッセージを変更します。
WordPressでは、ログイン失敗時に、「ユーザー名が間違っています」あるいは「パスワードが間違っています」といったエラーメッセージが表示されるので、どこが間違っているかを教えてくれます。ユーザーには便利ですが、攻撃者にも余計な情報を与えることになります。この機能が有効だと、エラーメッセージが同じなので、ユーザー名とパスワードのどちらが間違っているかが分からなくなります。
Login Lock
ログイン失敗を繰り返す接続元を一時的にロックします。ロックは、一定時間経過すると解除されます。
ブルートフォース攻撃には有効と思われる
SiteGuard WP Pluginの機能を使うと、ブルートフォース攻撃にはかなり効果があるのではないか、と思います。もちろんこのプラグインでは防げない攻撃もありますので、「これを入れたら後は何もしなくても良い」というものではありません。脆弱性のあるプラグインを導入してしまえば、そのプラグインの穴から侵入されて乗っ取られる、という可能性はあります。