この前、お客さまより相談がありました。
管理画面にログインできなくなり、ホームページ上に変なメッセージが表示されてしまったとのこと・・・。
調べてみると、WordPressのコアプログラムが不正に書き換えられていました。
残念ながら、ハッキング被害に合ったようです…。
怪しいプログラムが仕込まれた箇所を特定し、最新のWordPressのコアプログラムに差し替えました。
対応はできたものの、また脅威にさらされるのは嫌ですよね…。
これを機に、WordPressのセキュリティについて、「とりあえず、これやっとけばOK!」ではなく、必要な対策を説明できるよう、自分なりに知識を深めておきたいと思い、記事にしました。
WordPressのセキュリティ被害例
WordPressは世界中で利用者の多いブログシステムです。
使用者が多いだけでなく、オープンソースでプログラムが公開されていることから、攻撃者から狙われやすいツールでもあります。
まず、WordPressを運営時にどういった被害に合うリスクがあるのかみていきましょう。
管理画面に不正ログインされる
WordPressのサイトは、
「http(s)://WordPressサイトのインストールアドレス/wp-admin/」… 管理画面
「http(s)://WordPressサイトのインストールアドレス/wp-login.php/」… ログイン画面
というように、アドレスが決まっています。
WordPressを運営したことある人なら、誰でも簡単にWordPressのログイン画面にたどり着けます。
ユーザー名やパスワードを推測したり機械的に試して、ログインが通ってしまうと、管理画面を攻撃者が操作できるようになってしまいます。
もし管理画面を乗っ取られてしまうと、下記のような被害が起きる可能性があります。
- 悪意のあるファイルのアップロード、外部サイトへの転送など、コンテンツを改竄される
- WordPressのデータベースに保存されていた個人情報が漏洩してしまう
- ホームページ・運営者の信用性が下がる
WordPressのコアプログラム、テーマ、プラグインの脆弱性を利用される
WordPressのプログラム、テーマ、プラグインなどのプログラムの脆弱性を悪用し、不正なコンテンツやスクリプトが混入されるという被害もあります。
こちらも、プログラムを介して、コンテンツの改竄や、ウィルスの感染、重要情報の漏洩などの被害につながる可能性があります。
コメント機能・お問合せフォームをスパムに利用される
コメントを受け付けている場合、コンテンツと関係ないコメント(スパムコメント)が大量に投稿されてしまうことがあります。
お問い合わせフォームを設置している場合、管理者宛にスパムメールが送られてくることがあります。また、お問合せフォームには入力した内容のコピーをメールアドレスに自動送信される仕組みがあります。その機能を悪用することで、第三者に迷惑メールを送られてしまう恐れがあります。
管理画面を不正ログインから守るには
ユーザー名には「admin」を使用しない
ユーザー名は
admin
administrator
ドメイン名(このサイトだったら、0forest)
などは、推測されやすいので避けましょう。
ただし、これは最低限の対策になります。
WordPressの仕様上、ユーザー名は著者の記事一覧URLなどで使われているので、外部に見えてしまう場合があります。
また、ユーザー名がわからなくても、ログインにはメールアドレスが代用できます。メールアドレスは、身近な人は知っているでしょうし、SNSなどのプロフィールに公開していることもあるかと思います。
ログイン画面のユーザー名/メールアドレスは隠しきれないことを前提に、その他の対策と併用することで、全体のセキュリティ強化した方がいいです。
パスワードには複雑なものを設定する
パスワードは桁数を増やし推測されにくいものにしましょう。
WordPressはユーザー設定画面でパスワードの強度を確認できます。
「強力」となるパスワードを設定しましょう。
二段階認証を入れる
二段階でID とパスワードを認証することで、管理画面のセキュリティを強化します。
一つのやり方はBasic認証を管理画面にいれる方法です。
また、後で紹介する「Wordfence Security」の機能でも認証アプリを利用して二段階認証を設定できます。
管理画面にアクセス制限をかける
外部の人が管理画面にアクセスできないよう制限をかけます。
海外IPからのアクセスを制限する
エックスサーバーの場合はサーバーパネル>WordPressセキュリティ設定で海外IPを制限できます。
ログインロックを入れる
ログインロックは、何度も連続してログインに失敗するときに、一定期間ログインできないようにする機能です。
機械的にユーザー名とパスワードを試してログインしようとする攻撃に有効です。
サーバーのセキュリティ機能で用意されている場合があるので調べてみましょう。
エックスサーバーの場合はサーバーパネル>WordPressセキュリティ設定にあります。
プラグインを使う場合には、後で紹介する「SiteGuard WP Plugin」の機能で設定できます。SiteGuard WP Pluginだと、何回連続で失敗するとロックとするかなど、より細かく設定ができます。
プラグインによる管理画面の保護:SiteGuard WP Plugin
SiteGuard WP Pluginは管理画面の不正ログインを防止するための機能が入ったプラグインです。
- 管理画面のURLを変更
- ログインに画像認証を追加
- ログイン失敗を繰り返す接続元を一定期間ロック
- ログインしていない接続元IPアドレスから管理画面へアクセスできないようにする
- ログイン履歴を確認できる
- 攻撃者から狙われやすい機能(XMLRPC)を防御
WordPressコアファイル、テーマ、プラグインのセキュリティ対策
WordPressのソフトウェア、テーマ、プラグインのアップデート
最新のWordpressソフト、プラグインを使うようにしましょう。
メンテナンスされていないテーマ、プラグインは使用しない
テーマやプラグインをインストールする時には、しっかりメンテナンスされているか確認してから使用するようにしましょう。
- テーマの公式HPのアップデート情報を確認する
- ユーザーサポート/コミュニティがあり、不具合の修正/対応が活発にやりとりされている
- 最終更新が1年以上前だと、メンテナンスされていないまま脆弱性が残っている可能性がある
- 最新のWordPressのバージョンにverに対応されているか
使っていないテーマとプラグインは削除する
テーマは、現在使用しているテーマと、WordPressの公式テーマ「Twenty Twenty-One」を残して、他は削除しましょう。
またプラグインも、その時使うプラグインのみを有効化し、有効化していないプラグインは削除しましょう。
重要ファイルの保護
WordPressのプログラムファイルの中には「wp-config.php」というファイルがあります。このファイルには、データベースへのアクセス情報など、重要な情報が書かれているため、漏洩したり、不正に書き換えられないように保護します。
サーバーにアクセスし、wp-config.phpのファイルのパーミッションを、「400(読取専用)」に変更します。
ファイルの場所:/(WordPressをしたインストールディレクトリ)/wp-config.php
WAF(Web Application Firewall)
WAFはアクセスの内容を検査し、Webアプリケーションへの不正な攻撃とみなしたアクセスを遮断する仕組みです。この仕組みのおかげで、Webアプリケーションの脆弱性を悪用した攻撃を防ぐことができます。
サーバー機能でWAFを設定
サーバーのセキュリティ機能にWAFがついている場合は導入しましょう。
このサイトが動作しているエックスサーバーにもWAF機能があります。(初期はなぜかOFFなので、忘れずONにしましょう)
サーバー管理>セキュリティ>WAF設定で設定できます。
プラグインでWAF設定:Wordfence Security
WordPressのセキュリティを強化するための多様な機能を提供しているプラグインです。
このプラグインはWAFはもちろん、二段階認証など、多様なセキュリティ強化のための機能が含まれています。
- Web Application Firewallにより、悪意のあるアクセスをブロック
- 二段階認証
- WordPressソフトをスキャンし、不正にプログラムが書き換えられていないか チェックする
- スパムコメントのブロック
- リアルタイム・トラフィック解析:アクセスしてきた人間やBOTを監視できる
- IPブロック機能:指定したIPアドレスと接続元ネットワークからの接続を拒否する
コメント機能・お問合せフォームのスパム対策
お問い合わせフォームやコメント機能を利用している方はGoogle reCaptchaを導入しておきましょう。
よく使われるお問合せフォームにもreCAPTHCAの設定ができたりします。
万が一被害にあったときのために
バックアップを取る
仮に攻撃者によってホームページが改ざんされてしまった場合に備えて、バックアップを取っておきましょう。
万一ハッキングされてしまっても、バックアップを取った時点のデータに戻すことができます。
サーバーのバックアップ機能を利用する
多くのサーバーには、データのバックアップ・復旧機能がついています。
例えば、エックスサーバーではデータは7日分、データベースは14日分保管しています。
Webデータ (WordPressソフト、テーマ、プラグイン、画像ファイル) | MySQLデータベース (記事本文、投稿日時、カテゴリー、コメントなどのデータ) | |
保存期間 | 過去7日分 | 過去14日分 |
プラグインを利用する
サーバーの機能とは別に、バックアップを取りたい場合にはプラグインを使います。
WordPressのおすすめセキュリティ対策まとめ
攻撃例 | 対応策 |
管理画面への不正ログイン | ユーザー名をadmin以外にする パスワードの強化 二段階認証の追加 アクセス制限 プラグインによる保護 |
プログラムの脆弱性を利用 | WordPress、テーマ、プラグインのアップデート こまめにメンテナンスされているテーマ・プラグインを使う 不要なテーマとプラグインを削除 重要なファイルの保護 WAFの導入 ファイルのバックアップ |
コメント機能・お問合せフォームの悪用 | Google reCaptchaの導入 |
以上、WordPressのセキュリティ対策でした。