WordPressのセキュリティ対策 Part1

まず、なにがどうなのかよく分からない。セキュリティ対策の基本は「何を何から守るのかをはっきりさせること」だと言われるのだが、それがどういうことになるのかがなんともはっきりしない。ただ、現象として分かっていることは、「どうやら最近ブログの管理ページへのログインを試みる攻撃があっちこっちで行われているらしい」ことだ。ログインに成功すれば、当然自分のサイトが書き換えられたり、あるいは削除されたりするだろう。

そういうわけで、とにかくログインされるようなことは防がなければならない。サーバーのセキュリティにも気を配れよな、という話もあるが、それは別に行っていくとして、とにかくWordPressのセキュリティ対策として行ったことを記録しておく。なにか役に立てば幸いである。

参考にしたサイト

具体的な組み込み方法などは、下記リンクをご覧いただきたい。それほど面倒ではないとは言え、こういうことに気を配らなければならないのはなかなか面倒な話だ。

何を何から守るのか

まずここから考えてみた。実際にはみんなどんな対策を行い、何を何から守ろうとしているのかを情報収集したのであるけれど。そこから見えてきたのは、こんなところだ。

  • 管理者権限を乗っ取って、サイトにログインして、最終的にはサイトの乗っ取りを行う
  • そのために、ユーザ名とパスワードを推測して総当たりで試して見る攻撃を行う。
  • WordPressのシステム上、デフォルトの管理者アカウント名は分かっているから、まずはここから攻めてみる。
  • いくつかの手段で、管理者以外のユーザ名を知ることができるので、それも使って総当たり攻撃をしてみる。

なかなか手が込んでいる。仮に自分のサイトに他人が不正にアクセスできてしまうと、朝起きてみたら自分のブログがアダルトサイトになっているかもしれない。あるいは、大量の迷惑メールを送るために使われているかもしれない。それは意図していないこととはいえ防がなければならない種類のことだろう。ということで、下記が私が取った対策。

攻撃が行われていることを検知する

管理ページにログインしようとしたときに、私にメールが届くように設定してみた。ログインに成功したのか失敗したのかも含めてメールが届く。当然自分がログインしてもメールが届く。実際にやってみると、昼夜を問わずなんらかのログインを試みられていることが分かる。

使ったプラグインは、『Login Alert Notification』というもの。これを見ているだけでも、なんらかの対策をしなければという気持ちになる。

攻撃のパターンはあるのか

それなら、攻撃にパターンはないのだろうか。パターンがあれば、そのパターンに応じた対策を行えば良い。分かっていることは、デフォルト管理者のユーザ名であるadminでログインを試みていること。ならば、adminユーザが存在することが危険なわけである。ユーザ名を変更できないのか?

ということで、したのような手順で変更してみた。

  • adminアカウントでログインする。
  • 新しく管理者アカウントを作成する
  • 作成できたら、adminアカウントからログアウトする。
  • 新しく作ったアカウントでログインする。
  • adminアカウントを削除する。もしadminアカウントで書いた記事やページがあれば新しい管理者アカウントに移行する。

上記のように書いたが、私は管理者アカウントでは記事やページは書かないことにしている。こうすることでそもそも管理者権限でログインしている時間を短くできる。また、管理者の投稿者アーカイブを開かれてしまったときにも、書いた記事やページがなければ管理者IDが漏れるリスクが減らせるようなのだ。投稿者アーカイブに関しては後述する。

そういうわけで、私は管理者の他に普段記事を書いたりコメントの承認をしたりするためのアカウントを作っている。権限は「編集者」にしている。

なお、複数のユーザでブログを管理しているような場合、すべてのユーザで上記作業をすることが必用だと思う。もちろんadminが最も狙われているのだが、admin以外のユーザも狙われる。また、後述するように既にユーザ名が攻撃者側に知られてしまっていることも考えなければならないからだ。

他のユーザ名でログインを試みられている?

ログイン記録メールを見ていると、どうやらadmin以外のユーザ名でもログインを試みられていることが分かる。そしてそのユーザ名はちゃんと存在するユーザ名だ。なぜばれてるのだろうか。

どうやら、WordPressにはユーザ名がURLから推測できてしまうことがあるのだ。具体的には下記二つ。もっとあったら教えてほしいな~。

  • 各投稿者(ユーザ)のアーカイブ。複数人でブログを運営しているような場合に、便利な機能。あの人の記事だけまとめて読みたいな、みたいなことができる。このページのURL内にユーザ名が隠れている。
  • 各記事にある投稿者名部分のリンク。このリンクをクリックすると上記投稿者アーカイブに飛ぶのだが、ここにもユーザ名が入っている。つまり、各記事には何らかの形でユーザ名が埋まっている。

ということで、ばれないようにするには、記事に埋め込まれているユーザ名を違うなにかに置き換えるような仕組みが必用だ。私が使ったのは、『Edit Author Slug』というプラグイン。これでユーザ名を見えなくすることができる。しかし、一度Googleなどの検索エンジンに取り込まれたり、そもそも攻撃者側に知られてしまっている場合にはもう防げない。もちろんやらないよりは良いのだろうけれど。

複数のユーザでブログを管理していたり、そもそも管理者用と投稿者用など複数のユーザでブログを管理しているような場合、念のためにすべてのユーザ名を変更し、ユーザ名を見えなくすることが必用だと思う。adminだけを変更してもその他のユーザは結局狙われ続ける。

最後に

実に大変だ。HTMLを完全手書きしていた時代ならばこんなことは考えなくて良かったが、今時そうも言っていられない。ということで、私のメモは終わるのだ。