はじめに
いつ頃からか正確に覚えていないが、当サイトも少しずつ総当たり攻撃の洗礼を受けるようになった。
これは、WordPressを運用しているサイトでは珍しいことではないようだ。
ここで言う総当たり攻撃とは、IDやパスワードを手当たり次第に大量に入力し、サーバーへの不正ログインを試みる行為のことだ。
このような行為は当然違法なのだが、踏み台サーバーを経由するなどして攻撃元を隠蔽する手法などが存在し、中々捕まえるのが難しいようだ。
当サイトは2段階認証を導入するなどしてセキュリティを高めてはいたものの、ある時期からは連日のように総当たり攻撃を受けるようになり、さすがに心配になってきた。
そこで何通りか対策を試してみたのだが、とある方法が劇的な効果を発揮したのでここに備忘として記録しておくことにする。
対策
今回はWordPress用のセキュリティ対策プラグインとして「All In One WP Security」(以下、WPセキュリティ)を試してみた。
他のセキュリティプラグインを使用している場合でも、同等の機能が存在することは多いと思われるので参考になるのではないだろうか。
総当たり攻撃対策をする前に、まずは総当たり攻撃を受けているか否かを把握するのが先決だ。
WPセキュリティの場合、以下の場所に攻撃を検知した場合にメールで知らせる機能が実装されている。
左側のメニューから「ユーザーログイン」を選択しよう。
すると、右側に「Notify by email」という項目が表示される。
このチェックボックスをチェックし、通知を受け取るメールアドレスを入力しよう。
入力が完了したら、「Save settings」を押下しよう。
厳密に言えば、この項目は総当たり攻撃を受けた際の通知先を設定するものではなく、ログイン失敗回数が最大になった際の通知先を設定するものだ。
だが、総当たり攻撃とは基本的に失敗を前提として成功するまで何度も繰り返し行われる攻撃なので、実質的にはほぼ同じ意味になるというわけだ。
以上の設定で、総当たり攻撃を受けてログイン失敗回数が所定の回数に達した場合に、上記で設定したメールアドレスに通知メールが送られてくるようになる。
以下はそのメールの一例だ。
サイトロックアウト通知とは一見すると物騒なタイトルだが、実際にはログインに使用されたユーザー名が一定期間使えなくなることを意味しているようだ。
続いては、総当たり攻撃そのものを無効化する対策だ。
たいていの攻撃者は、総当たり攻撃をWordPressの外部インターフェースを通じて機械的に行っているようなので、まずはこの外部インターフェースを塞いでしまおう。
具体的には、WordPressの「XMLRPC」という機能が攻撃に使われているので、この「穴」を塞いでしまえばよい。
ここで再び、WPセキュリティの画面に戻ろう。
今度は、左側のメニューから「ファイアウォール」を選択しよう。
すると、以下のようにXMLRPCに関する設定画面が表示される。
ここでは、「Completely block access to XMLRPC」の右にあるチェックボックスをチェックしよう。
続いて、画面を下方向にスクロールしよう。
すると、以下のような「Save basic firewall settings」ボタンが現れるので、これを押下しよう。
以上で、XMLRPCの無効化は完了だ。
これでXMLRPCを利用した機械的な攻撃は防げるようになった。
恐らくたいていの攻撃者はこのインターフェースを利用して攻撃を仕掛けているのだと思われるので、もしかすると以上で対策としては十分なのかも知れない。
ただし、手動でIDとパスワードを入力する攻撃はまだ可能だ。
念のためにその対策もしておきたいという場合は、以下でその手法を紹介するので参考にしていただきたい。
手動での攻撃も阻止するには
ここまでの設定では、手動でIDとパスワードを入力する攻撃は阻止できない。
今度は、この攻撃を無効にする方法を検討してみよう。
もっとも、自分でログインする入り口まで塞いでしまってはWordPress自体を使えなくなってしまうので、完全に攻撃を阻止することは実際にはできない。
最低でも自分用の入り口は残しておかなければならないからだ。
そこで、今回は次善の策として、ログイン画面のURLを変更し、URLを知らなければそもそもログイン画面にたどり着けないようにすることを考えた。
ちなみに、WordPressのログインURLはデフォルトでは同じなので、簡単に見つけることが可能だ。
具体的なURLは以下の通りだ。
(WebサイトのURL)/wp-login.php
当サイトの場合は、サイトのURLが「https://hohara.info/」なので、デフォルトのログインURLは「https://hohara.info/wp-login.php」となる。
これを任意のURLに変更してしまえば手動でログインを試行することも困難になる。
幸いなことに、WPセキュリティにはログインURLを変更する機能が用意されているので、これを使ってURLを変更してしまおう。
もっとも変更したURLを忘れてしまうと自分でログインできなくなってしまうので、その点にはくれぐれも注意しよう。
再び WPセキュリティの画面に戻って、左側のメニューから「総当たり攻撃」を選択しよう。
すると、右側に以下の設定画面が現れるので、「Enable rename login page feature」の右のチェックボックスをチェックしよう。
続いて、「Login page URL」の右の入力フィールドに変更後のログインページURLを入力しよう。
今回は仮に neohoharalogin と名付けたが、実際に設定する場合は簡単に推測されないような名前にすることをおすすめする。
全ての入力が完了したら「Save settings」ボタンを押下しよう。
以上で、WPセキュリティを用いた総当たり攻撃対策は完了だ。
対策の効果
前項では、「WPセキュリティ」プラグインを利用した総当たり攻撃の対策を紹介した。
ここでは、この対策を実施してから1か月後までの間に当サイトが被った総当たり攻撃の回数を報告しよう。
その回数は、何と0件だった。
どうやらすべての攻撃が、XMLRPCのインターフェースか、またはデフォルトのURLを通じて行われていたようなのだ。
もちろんこの結果は、当サイトだけの実施結果に過ぎないし、過大評価をし過ぎないように気を付けたいが、効果としては満点の結果が出たことはお知らせしておきたい。
まとめ
WordPressの運用サイトに対する総当たり攻撃対策について紹介した。
よく使われているセキュリティプラグイン「WPセキュリティ」で十分に対策が可能だという結果が出た。
もし総当たり攻撃で困っている方がいたら、本記事の内容が参考になるかも知れない。