2018年7月8日の早朝、当ブログをレンタルサーバーからVPSに移設しました。
その際、WordPress のセキュリティ対策を再検討しました。
ながらく試行錯誤した経験値と、IT技術者としてのノウハウから、最低限やるべきセキュリティ対策が見えました。
この記事は、こんな境遇の人のお役に立つと考えます。
- セキュリティ対策は薦められるがままに手を出してしまう
- セキュリティ対策をどこまでやるべきか分からない
- お金がかからない最低限のセキュリティ対策を知りたい など
どなたかの参考になれば幸いです。
WordPressのセキュリティ対策は3要素を考慮すべき
WordPressサイトのセキュリティ対策について、まずは3つの要素に分けて考えることを推奨します。

図:セキュリティ対策検討の3要素
- 攻撃者
- 運営サイトに対して、悪意を持ってアクセスや仕掛けをする訪問者のこと
- 脆弱性
- ソフトウェアやネットワークなどで、悪用できる不具合のこと
セキュリティ対策1. 侵入対策
まずは攻撃者の侵入を防ぐ対策を考える必要があります。
その侵入経路は、次の3つが主に考えられます。
- 通常の通信経路:通信ポートへのアクセス
- 通常の通信経路:管理画面への不正ログイン
- 異常な通信経路:脆弱性を突く不正アクセス
つまり、正攻法での侵入を防いだ後、イレギュラーな方法での侵入を防せぐと考えると良いわけです。
これらはどれかだけ対策すれば良いのではなく、それぞれ対策を考える必要があります。
セキュリティ対策2. 侵入後対策
攻撃者の侵入を許したとしても、それで話は終わりではありません。
管理者アカウントの乗っ取りであれ、RAT (Remote Access Tool) やハッキングツールなどの不正プログラムの設置であれ、攻撃者の動きを早く掴むこと、そして攻撃者の活動を制圧する必要があります。
そのためには、次のような方法を素早く実行する必要となります。
- 様々なログから活動の痕跡を発見する
- 不正な通信を把握する
- 変更されたデータやプロセスが何か把握する
セキュリティ対策3. 復旧対策
攻撃者の活動を止めた後は、いち早く復旧することが必要になります。
変更されたデータを正確に特定できる場合には、そのデータだけ元に戻せば復旧完了です。
また、ログインアカウントの乗っ取りにあったなら、パスワード変更が必要です。
影響範囲が正確に把握できることが条件になる一方、これら部分的な復旧作業なら短時間で済むはずです。
しかし、影響範囲が正確に把握できないのであれば、全データを元に戻す完全リストアとその時間が必要になります。
ただ、いつのデータまで戻せば影響がなかった時の状態に戻せるのかについて把握できなければ、完全リストアでもリスクを伴う点には注意が必要です。
以上の考え方を踏まえた上で、まずはレンタルサーバーだろうが、VPSだろうが、共通するアプリケーション「WordPress」のセキュリティ対策について紹介します。
WordPressのセキュリティ対策
WordPressのセキュリティ対策は、主にWordPressの管理画面にログインしてから施せる対策となります。
セキュリティ対策1. 侵入対策
侵入対策のうち、3つの対策をWordPressで施すことには次のような方法があります。
ネットワーク対策

WordPressでの対策として考える場合、スパムコメント投稿者や攻撃者の接続を遮断する対策です。
その主な手段は、通信ポートの制御やIPアドレス単位のブロックとなります。
これらはWordfence Security などWordPressプラグインでもある程度は対策できますが、OSやネットワークで施す方が簡単で柔軟です。
そのため、可能な限りOSやネットワークで設定して、WordPressでは設定しないというのが良いでしょう。
どこのレンタルサーバーでもファイアウォールは使ってるはずですから、あまり考える必要はないかもしれません。
脆弱性対策

WordPressでは、脆弱性対策がセキュリティ対策の要です。
なぜなら、WordPressというアプリケーションは本体とプラグインとテーマなど複雑な構成になっていて、それぞれに脆弱性が混入しやすくなってしまう宿命だからです。
これは柔軟性の高いアプリケーションである以上は仕方ないのですが、その対策について次のように注力する必要があります。
2017年には多くの被害を出した下記のような脆弱性も発見されています。



これほど大きな脆弱性はなかなか無いにせよ、ちょくちょく脆弱性は報告されているので要注意です。
なお、レンタルサーバーやVPSではWAFなどの脆弱性を緩和する仕組みが利用できることもありますが、過信は禁物です。
まずは自力で可能な対策は施しておくべきでしょう。
アップデートの即時適用
WordPress本体だけでなく、テーマやプラグインについて、最新バージョンに可能な限り早くアップデートするのが最良です。
これはWordPress本体やテーマ、プラグインのソースコードには手を入れずに、下記のプラグインでアップデートを自動的に適用するのが有効です。


もちろん不具合などのリスクはありますから企業サイトなら勧めません。
しかし、個人で開発環境を持って厳密に検証をしているようなブロガーでなければ、慎重になって時間を空けるだけ無駄です。
バックアップなどでロールバックできる(すぐ元に戻せる)準備を整えて、ガンガン更新しましょう。
ピンバック停止
過去にDDoS攻撃に悪用された仕組みとしてピンバックがあります。

現在ほとんど利用されていない機能ですし、攻撃者に加担しないためにもプラグインでピンバック停止しましょう。
この SiteGuard を利用すれば、簡単に停止できます。

また、WPXなどのレンタルサーバーでは、標準でピンバックを停止させる機能が提供されていたりもします。
適切なアクセス権設定
WordPressの各ファイルについて、アクセス権を適切に設定するのは地味に重要です。
WordPress開始時点では、きちんと設定されていそうなものですが、丹念に見直して漏れがないようにすべきです。
これらの正解を知るには下記が参考になります。
こちらの 項目9〜16 が参考になります。
その中でも、特に見落としがちだと感じた設定はこちらです。
wp-config.php は、WordPress (wp-includes のある場所) インストールの一つ上のディレクトリに格納できることに注意してください。また、wp-config.phpの読み込み権限があるのはあなた(とウェブサーバー)のみであることを確認してください。(大抵の場合、ファイルパーミッションは400、もしくは440です)
wp-config.php は重要なファイルで、稀にパスワードを書いたりすることもありますから、このようにキチンと保護する必要があります。
不要なAPIの停止
利用する予定が無ければ、REST API や XML-RPC を積極的に止めましょう。
iOSアプリなどで更新を行なっている場合には、動作に影響するかもしれませんから仕方ないですが、そうでなければ止めましょう。
止めたからといって、Webの管理画面から記事を書けなくなることはありませんので、安心して止めましょう。
ちなみに止める方法ですが、XML-RPC は SiteGuard で停止することができます。
この SiteGuard を利用すれば、簡単に停止できます。

なお、REST API は専用プラグインがなければ使えないため、特別な対応は不要です。
ロリポップ などのレンタルサーバーでは、標準で REST API や XML-RPC を停止させる機能が提供されていたりもします。
不正ログイン対策
どんなに穴を塞いでも、正面玄関から入られては意味がありません。
そのため、ログインページから不正にログインされないように下記は最低でも満たしているか確認すべきです。
- アカウント名は、辞書にない、かつ推測しにくい名前にする
- パスフレーズは、複雑(辞書にない言葉+英数字大文字小文字記号)かつ最低16文字以上にする
- ログインページは独自のURLに変更する
これに加えて、下記のような設定も施せれば尚良いです。
- ログインページの接続元が絞れるなら絞る
- 管理画面のログインロックを設定する
- ログインアラートを使う など
これらも SiteGuard を利用すれば、簡単に設定できます。

セキュリティ対策2. 侵入後の対策

侵入対策をしていても、巧妙な攻撃者の場合は防ぎきれない可能性もゼロではありません。
そのため、もし攻撃者の侵入を許してしまった場合、異変に気づける仕組みが重要です。
個人サイトであっても、次のどちらか、あるいは両方の導入を検討しましょう。
不正なログインに気づく

自分以外が管理画面にログインしたことに気づける仕組みを用意しておきましょう。
ログインのログ(監査ログ)を取得するのも良いですが、おすすめはログインアラートです。
タイムリーに気付ければ気づくほど良いからです。
先に紹介した SiteGuard を利用すれば簡単に設定できます。
変更に気づく

自分以外が記事やデータ、プラグイン、テーマを変更したことに気づけるのが望ましいです。
例えば、こちらのプラグインを使うと、変更された場合にアラートを挙げることができます。
こちらの「Online File Comparison」が該当します。
ただし、記事更新や何らか変更を施すたびに毎回アラートが挙がるので、煩わしいと感じるかもしれません。
また、監視によって負荷が高くなって、スローダウンの元になるかもしれません。
狼少年になっては意味がないので、慎重に判断する必要があります。
ちょっと自信が無いなら、個人サイトではWordPressに慣れるまでの間は見送っても良いかもしれません。
上記の2つ以外にも、ウイルスが仕込まれたか検査する仕組み、サイトの表示に異常がないことを監視する仕組みなど、いくつも考えられます。
ただ、これらを個人サイトのWordPressで必須とするには、性能の良い無料プラグインというのが見つからないため、個人的には導入が難しいと思います。
セキュリティ対策3. 復旧対策

攻撃者の攻撃を遮断した後、あるいは無力化するために、素早く復旧できる準備は必要です。
WordPressレベルで考えられる復旧策として、次の3つは個人でも検討しておくべきです。
1つの記事を変更前の状態まで復旧する
WordPressには、記事の変更履歴を保存する機能があります。
この変更履歴から何世代か前の記事に戻さなくてはいけない場合、その手順をご存知ですか?
下記の画面はどうやったら表示できるか、ご存知ですか?

こちらの画面を見たことない、変更前の記事に戻したことがない、という人はぜひ一度は手順を確認することをオススメします。
意外とやってる人が少ないのですが、テスト記事を作って元に戻す訓練をしておくと良いです。
これで、いざという時に焦らなくてすみます。
WordPress全体をある時点まで復旧する
WordPressのデータについて、フルにバックアップしてくれるプラグインとして、下記の2つが有名です。


もし導入していない人は、導入をオススメします。
導入している人は、これで復旧したことがありますか?
もしその経験が無い人は、バックアップから別のWordPress環境にリストアしてみると良いです。
異なるWordPressに復旧すると必ず異なるドメインになるため、hostsファイルの変更をしないとアクセスできませんので、注意が必要です。
しかし、一度試せばスムーズに復旧できるかを確認するには良い練習となります。
その手順はこちらで詳しく紹介されていますので、ぜひ参考にして試してみて下さい。

ちなみに、当ブログでは、UpdraftPlus WordPress Backup Plugin を利用していて、もう10回近く別サイトへリストアしてみたのでお茶の子さいさいです。
これでWordPressセキュリティ対策は万全か?

今回この記事で紹介したセキュリティ対策は、あくまで考え方のポイントと最低限の方法です。
個人サイトならどこまで、法人サイトならどこまで、という線引きは難しいですが、この記事では放置 もしくは 通知を主体に運用できる対策を基準として、それぞれ記載しました。
金に糸目をつければキリがありませんし、個人のWebサイトでやるのは現実的ではありませんよね。
そんな最大値を見据えつつ、まずはスキルやコストが少なくて済むセキュリティ対策を考えていくのが良策だと考えます。