先日やけにサーバの負荷が高いなと思ってログを見ていたら wp-login.php に大量のアクセスが・・・どうみてもブルートフォースアタックです本当にありがとうございました、実行者は速やかに死んでくださると助かります。
しかし攻撃者が死滅するまでの間は自分で対処しないといけないし、残念ながら死滅する未来を想像できない。幾つか対処方法を考えたので列挙してみる。
デフォルトの Admin をやめる
基本的に攻撃者は WordPress をインストールしたら最初にできるユーザー名である Admin ユーザで試してくる。
これは別の名前にしておこう。が、テーマによってはユーザ名がそのまま出たりするしあまり有効な手ではないと思う。
-- 追記
攻撃のログを見ると表示されているユーザ名でログインを試行してくるので表示名とIDは分けたほうが良いですね。
Basic 認証をつける
認証を二つに増やせばそれだけ突破するのが面倒くさくなる。Basic 認証なら .htaccess をちょっといじるだけで設置も簡単。
<Files "wp-login.php">
Authname "For Members"
Authtype Basic
AuthUserFile /path/to/.htpasswd
require valid-user
</Files>
.htpasswd は各自用意してください。
ただ Basic 認証はユーザ名とパスワードを Base64 化して平文で送ってるので盗聴されるとアウト。でも今回のようなケースの場合には悪くないんじゃないかと思う。
IPアドレスで制限
ログを見ると wp-login.php への不正ログインの試行元は全部海外であった。いっそ自分の IP アドレス以外からのアクセスを除外すれば不正にログインされる危険性はなくなるだろう。
wordpress にある .htaccess へ以下の文言を追加しよう。
<Files "wp-login.php">
order deny,allow
deny from all
allow from 127.0.0.1 # ここに自分のIPアドレスを入れる
</Files>
これで指定した IP アドレス以外からのアクセスを防ぐ事ができる。
現実には通常のブロードバンド契約では固定IPを得られないのであまり実用的ではない。IPが固定されている企業などでは使える手かもしれない。
Simple Login Lockdown でログイン制限
Simple Login Lockdown という WordPress のプラグインがある。これを利用するとある一定回数ログインに失敗したらしばらくの間そのホストからログインできなくなる。手軽に導入できるのが利点だ。
http://wordpress.org/plugins/simple-login-lockdown/設定項目も少なく、名前の通りシンプルで良い。
欠点としては $_SERVER['REMOTE_ADDR'] を利用しているため、攻撃側が接続元のホストを変更すると無効になる点だ。基本的に攻撃者はいくつかの IP アドレスへ変更をかけながら攻撃してくる。
今回のログをざっと見た感じ、一つの IP アドレスから数百ほど試行した後 IP アドレスを変更する、という動作を繰り返していた。それでも無いよりはマシだろう。
WordPress へ二段階認証をつける
通常の Username/Password での認証へ加え、ワンタイムパスワードをつける方法がある。これはかなり強力で突破するのはかなり難しくなる。
利用するのは Google Authenticator という iPhone/Android のアプリ。Google で二段階認証を行う際に利用するものと同じやつを WordPress でも使う事ができる。
そしてそれを利用するための WordPress のプラグインが同じ名前の Google Authenticator です。
http://wordpress.org/plugins/google-authenticator/インストールを行うとユーザー設定のところに Google Authenticator という項目が追加される。ここにある Active にチェックを入れると二段階認証が有効になる。
Secret欄にある Show/Hide QR code を押し、QR コードを表示したらスマートフォン側のアプリで Set up Account -> Scan a barcode からコードを読み込もう。
そうするとアプリに WordPress 用のコードも表示されるようになる。これをログインする時に一緒に入力しないとログインできないようになる。
Google の二段階認証が使える環境でないといけないが、Google を使っていれば二段階認証は普通使うものなので問題無いだろう。
これでログインされる危険性はかなり下がると思う。