WordPressは、オープンソースで最も有名なコンテンツマネジメントシステムです。
ですが、オープンソースなので、脆弱性が発見されやすく、ハッカーの標的になりやすい。といった特徴もあります。
その為、WordPressを利用しているサイト運営者は、セキュリティ上の問題を決して軽視せず、自ら対策を講じなければなりません。
今回の記事では、この「対策内容」を、11にまとめました(下記)
- テーマやプラグインは、Wordpress公式のものを利用する
- WordPress本体やテーマ・プラグインは、最新版にしておく
- WordPressのバージョン情報について
- 「wp-config.php」を、アクセス不可に設定する
- データベーステーブルのプレフィックスを、デフォルト値から変更する
- 「Akismet」プラグインを利用して、スパムコメント対策をする
- ブルートフォースアタック(総当たり攻撃)への4つの対策
- Web独自の攻撃手法(SQLインジェクションやクロスサイトスクリプト等)に対して、対策しておく
- WordPressの管理画面とログイン画面をSSL通信に設定する
- WordPressのセキュリティ関連プラグインについて
- バックアップをとっておく
では、順に解説していきます。
テーマやプラグインは、Wordpress公式のものを利用する
利用するテーマやプラグインは、なるべくWordpress公式のものにしましょう。
一般的に、Wordpress公式のものの方が、脆弱性やバグが少ないです。
また公式のものであれば、脆弱性やバグが発見された際、すぐにバージョンアップが行われ対策がされます。
ですが、公式でないプラグインやテーマだと、全くバージョンアップがされていなかったり、脆弱性があるにも関わらず、全く対策がされていない。といった事もあります。
また、Wordpress公式のテーマやプラグインは、FAQやサポートページが充実しており(現状、英語表記しかないが、、)設定手順や使用方法に困った時でも、参考情報が多いので、そういった意味でも公式のものを使っておく方が良いでしょう。
WordPress本体やテーマ・プラグインは、最新版にしておく
WordPressは、オープンソースで最も有名なCMSです。
なので、ハッカーのターゲットになりやすく、脆弱性も発見されやすいです。
脆弱性が発見された場合、Wordpressは、その都度バージョンアップをして対策をしています。
なので、最新バージョンは(既知の)脆弱性がなく、逆に古いバージョンは、古ければ古いほど、脆弱性は多くなります。
なので、「常に最新バージョンにしておきましょう!」と頻繁に言われるわけです。
基本的な事ですが、非常に重要なので、できるだけ常に最新版にしておくことをオススメ致します。
※「未使用のプラグイン」の取り扱いについて
デフォルトでインストールされているが、使っていないプラグインや、一度は使用したが、使わなくなったプラグインは、「停止」にするだけじゃなく、「削除」しておきましょう。
なぜなら、「削除」しておかないと、プラグインに脆弱性が存在した場合、その脆弱性が狙われる可能性があるからです。
なので、使わないプラグインは ”完全に削除” しておきましょう。
WordPressのバージョン情報について
サイトのソース上にある「Wordpressのバージョン情報」を隠すことは、セキュリティ上有用である。といった記事をいくつか拝見します。
実際にソースをみてみると、下記のようにバージョン情報が明記されていますね。
こちらを表示させなくすることで、ハッカーに、バージョン情報を特定させなくし、セキュリティレベルを上げる。といった内容になりますが、
結論から言いますと、余り意味はありません。
なぜなら、「バージョン情報」が表記されている部分は他にもあります。
例えば、ソース上でも「.js」ファイルや「.css」ファイルに明記されていますし、RSSフィードからも確認することができます。
他にも、ハッカーが、バージョン情報を確認しようと思ったら、いくつか手段があるでしょう。
なので、上図で示している「メタタグのバージョン情報」を削除したところで、ハッカーからしたら、痛くも痒くもありません。
だから、Wordpressのバージョン情報の明記を気にする必要はありません。
それよりも、「バージョンを常に最新にしておく」事の方が、よっぽど重要です。
「wp-config.php」を、アクセス不可に設定する
「wp-config.php」というファイルは、Wordpressを利用する上で、最も重要で、最もセキュリティレベルを高く設定しなければいけないファイルです。
なぜなら、「wp-config.php」には、データベースのアカウント情報が記載されているからです。
このファイルが、ハッカーの手に渡ってしまったら、データベースが直に操作されてしまう危険性があります。
なので、大事なのが「外部からのアクセスを不可に設定し、パーミッションも厳しく設定する」事です。
以下、手順になります。
まず、「wp-config.php」と同じ階層に「.htaccess」ファイルを作成し(既にある場合は作成しない)、「.htaccess」ファイルに、下記を入力してください。
order allow,deny
deny from all
</files>
これで、外部からのアクセスは不可能になります。
次に、パーミッションですが、「wp-config.php」のパーミッションは「400」にしておく事を推奨します。管理者のみ「読み取り」権限を付与しましょう。
以上です。
データベーステーブルのプレフィックスを、デフォルト値から変更する
WordPressをインストール後、デフォルトのままだと、全てのテーブルには「wp_」というプレフィックスが設定されています。
ですが、このままだと「テーブル名」が特定されてしまうので、データベースに対してのハッキングが容易になってしまいます(例えば、SQLインジェクションで、不正にテーブルが削除・変更されてしまう)
なので、「テーブル名」を特定されにくくするために、プレフィックスをオリジナルに設定する必要があります。
設定手順についてはこちらで、解説しています→【プレフィックス(prefix)とは?Wordpressのテーブル名(プレフィックス)を変更する3つの手順】
「Akismet」プラグインを利用して、スパムコメント対策をする
「Akismet」とは、記事にコメントを投稿してもらった場合に、自動的にスパムコメントを分類してくれるプラグインです。
当ブログでは、一日数百件のスパムコメントが来ているため、欠かすことのできないプラグインになっています。
WordPress 2.0 以降のバージョンを利用している場合は、デフォルトでインストールされていますので、利用する事をオススメします。
設定手順については、こちらで詳しく解説しています→【Akismetとは!Wordpressで、スパムコメント対策をしてみる】
ブルートフォースアタック(総当たり攻撃)への4つの対策
ブルートフォースアタック(総当たり攻撃)とは・・・考えられうる全ての(ユーザー名とパスワードの)パターンを、片っ端から試して(ログイン試行して)いく、ハッキング手法です。
このブルートフォースアタック(総当たり攻撃)によって、Wordpressが不正にログインされ、乗っ取られる。といった事例が、昨今、非常に増え話題になっています。
なので、この「ブルートフォースアタック」に対しての対策は、必ずおこなっておく必要があります。
以下、対策内容を4つにまとめましたので、順に解説していきます。
- デフォルトユーザーの「admin」は削除しておく
- ログインページと管理ページへのアクセス制限をしておく
- アクセスログを取る
- 『二段階認証』と『ワンタイムパスワード』・『画像認証』を取り入れる
デフォルトユーザーの「admin」は削除しておく
WordPressをインストールして、デフォルトのままだと「admin」というユーザーアカウントが存在します。
この「admin」アカウントを、残しておくと非常に危険です。
なぜなら、ハッカーから「ブルートフォースアタック」を受けた場合、「パスワードのみ特定すれば良い」ので、不正ログインのハードルがかなり下がります。
実際に、Wordpressへの「ブルートフォースアタック」は、ほとんどがユーザ名「admin」として、不正ログイン試行されているみたいです(参考記事→「WordPressへの不正アクセスログを取ってみた」)
なので「admin」アカウントは必ず削除しておきましょう。
削除手順については、こちらで解説されています→【WordPressのadminユーザーを変更(削除)する方法。乗っ取られる前にセキュリティ強化!】
ログインページと管理ページへのアクセス制限をしておく
ブルートフォースアタック(総当たり攻撃)による不正ログインは、必ずログインページにアクセスしなければなりません。
なので、そもそも「ログインページ」にアクセスできるのが、自分のPCだけであれば、ブルートフォースアタックは完全に防ぐ事ができます。
WordPressでログインページに該当するのが「wp-login.php」というファイルです。
なので、このファイルに対するアクセス制限を設定しておきましょう。
また、念のため管理画面じたいも、アクセス制限を設定しておくと良いでしょう(管理画面へのアクセスは必ずログインページを介すので、必須ではないですが、念のためです)
管理画面は・・・「wp-admin/」ディレクトリ以下のファイル全てになります。
「ログイン画面と管理画面へのアクセス制限」設定手順については、こちらで解説しています→【ハッキング対策:サイト管理画面とログイン画面をIPアクセス制限する手順】
アクセスログを取る
ログイン画面へのアクセスログをとっておく事で、”どのIPから・どこの国から・どのユーザー名で・・・”といった情報を確認することができます。
これにより、下記のような対策を行うことができます。
- 「111.222.333.444」からのアクセスが頻繁にあるため、このIPを制限する
- 海外からの不正アクセスがほとんどなので、海外のIPをアクセス制限する
- 「admin」というユーザー名で、頻繁にログイン試行がされているので、ユーザー名を変更する
上記から、アクセスログを取っておく事は、セキュリティ的にとても有用です。
WordPressをご利用であれば、「Crazy Bone」というプラグインがオススメです。
このプラグインを利用することで、”どのIPから・どこの国から・どのユーザー名で・・・”といったアクセス情報を確認することができます。
【画面例】
『二段階認証』と『ワンタイムパスワード』・『画像認証』を取り入れる
ブルートフォースアタック(総当たり攻撃)対策は、まだいくつかあります。
その中でも、一般的で有効な下記三つを紹介していきます。
- 二段階認証
- ワンタイムパスワード
- 画像認証
まず、「二段階認証」とは、下図のように認証プロセスを二段階に分けておこなうことです。
普通であれば、「ユーザー名」と「パスワード」を入力してログインする一段階の認証プロセスですが、それに加えて、認証キーを入力する認証プロセスを追加する事で、セキュリティレベルとグッと高める事ができます。
次に「ワンタイムパスワード」の説明ですが、こちらは名前通り”一回限りしか有効でないパスワード”の事です。
ログインする度に、毎回パスワードが変更されているので、こちらも、不正ログインがされにくくなりセキュリティレベルが高くなります。
実は、この「二段階認証」と「ワンタイムパスワード」ですが、同時に満たしてくれる認証サービスを、Googleが無料で提供しています。
それが「Google Authenticator」というサービスです。
WordPressを利用であれば、「Google Authenticator」というプラグインも用意されていますので、こちらをインストール・設定するだけです(設定手順についてはこちら→【Google Authenticatorで、ワンタイムパスワードをWordpressログイン時に適用する手順】)
次に、「画像認証」ですが、下図を見てください。
上図のように「画像認証(CAPTCHA)」とは、画像内に羅列された文字列を入力する認証方式です。
機械(コンピュータ)は、画像内の文字列を認識することはできないので、機械による自動入力を防ぐ事ができます。
WordPressを利用であれば、「SI CAPTCHA Anti-Spam」という便利なプラグインがあります。
こちらを導入することで、Wordpressのログインに画像認証を取り入れる事ができます。
導入手順については、こちらで解説しています→【画像認証(CAPTCHA)を、WordPressログイン時に適用する手順】
※今回解説した対策とは別に、”同じIPからの「制限回数以上のログイン失敗」で、一定時間ログイン試行をすることができなくなる” といった「不正ログイン対策」のプラグインもありますが、こちらはオススメできません。
なぜなら、ハッカー側は、IPを機械的に切り替えてログイン試行をしているケースがほとんどなので、あまり意味はありません。
Web独自の攻撃手法(SQLインジェクションやクロスサイトスクリプト等)に対して、対策しておく
WordPressを利用して、Webサイト(ブログ)を公開している場合は、Web独自の攻撃に対しても対策をとっておかなければなりません。
「Web独自の攻撃」で主だったものは、下記があります。
- SQLインジェクション
- クロスサイトスクリプティング(XSS)
- Dos攻撃
- HTTPヘッダインジェクション
各攻撃の仕組みや、対策については下記にまとめています。
- クロスサイトスクリプティング(XSS)とは?仕組み・脅威から対策についてのまとめ
- Dos攻撃とDDos攻撃の違いと対策についてまとめてみた
- 【HTTPヘッダインジェクション】の仕組みと対策のまとめ記事
- SQLインジェクションの基本と対策
また、上記に挙げている攻撃に対して有効な「WAF(Webアプリケーションファイアウォール)」という仕組みもあります。
「WAF」は、Webサイトへの攻撃に特化したファイアーウォールになり、各レンタルサーバーでも採用されています。
「WAF」の詳細は仕組みについては、こちらで解説しています→【WAF(Webアプリケーションファイアウォール)とは?ロリポップで【WAF】がちゃんと機能しているか確認してみた】
「SQLインジェクション」や「クロスサイトスクリプティング」は、現在、最も一般的な攻撃手法になっているので、必ず対策しておきましょう。
WordPressの管理画面とログイン画面をSSL通信に設定する
SSL通信とは、データを暗号化して通信します。
Wordpressの管理画面とログイン画面を「SSL」対応させる事で、通信内容を第三者から傍受されていても、暗号化されているので、ログイン(アカウント)情報を特定されることはありません。
もし「SSL」対応してなくて、第三者から傍受されていた場合、ログイン情報が筒抜けとなり、容易に不正ログインがされてしまいます。
ですので、なるべく管理画面とログイン画面は、「SSL」対応しておきましょう。
対応手順に関しては、こちらで解説しています→【「WordPress HTTPS(SSL)」プラグインで、WordPressの管理画面をSSL通信に設定する手順】
WordPressのセキュリティ関連プラグインについて
WordPressには、セキュリティ関連のプラグインが多数用意されています。
セキュリティ関連とは、大きく三つに大別することができます(下記)
- セキュリティレベルを上げるための設定をするプラグイン
- 脆弱性を発見(スキャン)するためのプラグイン
- ウィルス感染や悪意のあるコードが設定されていないかをチェックするプラグイン
上記の、「セキュリティレベルを上げるための設定をするプラグイン」と「脆弱性を発見(スキャン)するためのプラグイン」に関して、一般的なプラグインは「Acunetix WP Security」です。
「Acunetix WP Security」
また、「ウィルス感染や悪意のあるコードが設定されていないかをチェックするプラグイン」に関して、一般的なプラグインは「AntiVirus」です。
「AntiVirus」
もし、セキュリティ系のプラグインを導入する場合は、上記二つを入れておけば良いでしょう。
ですが、個人的には ”当記事の項目をちゃんと対策しておけば、セキュリティ系のプラグインは導入しなくても良い”と思っています。
実際に、当ブログでもセキュリティ系のプラグインは入れていません。
ですが、当記事に挙げてある対策をちゃんとやっている事が前提ですし、必要がない訳ではありません。
ただ、プラグインを導入するデメリットもあるんです。
それはプラグインを利用することにより、その分メモリ領域を使用するので、サイトの動作が遅くなってしまう懸念があります。また、導入したプラグインが原因で、予期せぬ動作を引き起こしたり、プラグイン自体に脆弱性が存在する可能性もあります。
こういったデメリットもあるので、セキュリティ面との兼ね合いで、責任を持ってプラグインの利用可否を決めましょう。
バックアップをとっておく
まず大前提として、Webサイトを公開している場合、ハッキングを100%防ぐことは不可能です。
日々、ウィルスや不正プログラムは進化していますし、そもそもシステムというのは(既知・未知含め)何かしらの脆弱性を含んでいるものです。
なので、もしもハッキング被害に遭った時のために、バックアップをとっておく事は必須です。
バックアップすべきなのは、下記3つになります。
- WordPressのフォルダ・ファイル一式
- WordPressで利用しているデータベース
- WordPress管理画面からエクスポートできる「各記事・固定ページ・カテゴリ・タグ等の情報(XML形式)」
上記3つのバックアップ手順については、こちらで分かりやすく解説していますので、確認しておいてください→【ハッキング対策:バックアップをとっておく】
まとめ
今回の記事では、Wordpressを利用する上で、やっておくべき「セキュリティ対策」を11に分けて解説してきました。
最初に述べたように、WordPressはオープンソースのCMS(コンテンツマネージメントシステム)です。
なので、脆弱性が発見されやすく、ハッカーの標的になりやすいのが特徴(デメリット)です。
その為、WordPressを利用しているサイト運営者は、必ず「セキュリティ対策」をしておかなければなりません。
今回まとめている「10の項目」をしっかり対策しておきましょう。