【WordPress】あなたの大切なサイトを守るセキュリティ対策のまとめ(2013年秋)

【WordPress】あなたの大切なサイトを守るセキュリティ対策のまとめ(2013年秋)

イメージ

JOJOのアニメ第三部が正式に決まったそうですね!
楽しみ~な、にわかファン Latin です。
最近のWordPress界隈ではAmazon Web Serviceが俄然盛り上がっておりますが、大好きなWordPressを守るため、セキュリティ対策をまとめてみました。

初期セットアップ・設定系の対策

データベースのプレフィクス(接頭辞)を変更する

wp-config.php 内の「wp_」の接頭辞を任意のものへ変更します。
その場合、追加で以下の作業が発生します。

  1. phpMyAdmin などを使い、データベースのテーブルネームを変更したカスタムプレフィクスに変更する。
  2. options や usermeta テーブルなどの他のフィールドでも「wp_」プレフィクスが使われている可能性がある為、以下のクエリーを走らせてプレフィックスを変更する。
SELECT * FROM `myprefix_options` WHERE `option_name` LIKE '%wp_%'
SELECT * FROM `myprefix_usermeta` WHERE `meta_key` LIKE '%wp_%'

なるほど、よくわからん・・・。
そんな人には、以下のプラグインでもプレフィクスの変更が可能です。

ディレクトリへのアクセス権の制限

パーミッションの変更を行い、アクセスを制限する事でセキュリティを強化します。
これって毎回悩むんですが、さきほどの Acunetix WP Security プラグインで変更が可能です。優秀~

ディレクトリのファイル一覧を非表示に

WordPress にはたくさんのディレクトリがありますが、ダイレクトにアクセスした場合にファイル一覧が表示されてしまいます。
これらを非表示にさせる為に、ダミーの index.html ファイルを置いておいたり、.htaccess での対策を行います。
.htaccess では、以下のコードを追加します。

Options -Indexes

wp-config.php ファイルの保護

WordPress を動かす上で最も重要なファイルの一つなのですが、データベースへのアクセス情報など、かなり重要な情報が書かれているファイルでもあります。
先日の攻撃ではここから侵入を許したのではないかと言われていますので、しっかりと守っておきましょう。

.htaccess へ以下のコードを追加します。

# protect wp-config.php
<files wp-config.php>
order allow,deny
deny from all
</files>

WordPress バージョン情報の削除

WordPress の2.6以上の場合、head 内に使用中 WordPress のバージョン情報が出力されてしまいます。
これらが見えてしまうと、バージョン固有の脆弱性を突かれるなどの危険がありますので、非表示にしておきます。

上で説明した Acunetix WP Security をインストールするだけで、バージョン情報を隠してくれます。
また、直接編集する場合は、header.php 内の該当部分を削除します。

<meta content="WordPress <?php bloginfo('version'); ? />" name="generator" />

管理画面のSSL化

当然ながら、可能であれば管理画面自体をSSL化した方が安全性は高まります。

管理画面にIP制限をかける

管理画面に関係者だけがアクセスできるようIP制限をかけます。
一般的なのは「.htaccess」を使った方法などでしょうか。
ただし、自分のIPアドレスが固定IPではなく、動的IPだった場合は、アクセスできなくなってしまうなどの問題が発生する可能性が考えられますので取り扱いには注意が必要です。

国外IPからサイトへのアクセス制限をかける

WordPress を標的としたハッカーのほとんどは、海外からのアクセスです。
利用中のホスティングサービスがこの制限機能に対応済みであれば、遮断しておいた方が安全です。

運用系の対策

ユーザー名に「admin」や「サイトドメイン」は使わない

一連のブルートフォースアタック(総当たり攻撃)で、とにかくこれらのユーザー名が狙われた事から、
デフォルトユーザー名である「admin」や、攻撃者が容易に推測可能な「サイトドメイン名」などは危険です。

ただし、admin を削除する場合は今までの投稿記事が全て消えてしまう可能性がありますので、注意が必要です。
手順としては、

  1. 新たに「admin」に代わる管理者権限を持つユーザーアカウントを作成し、新管理者アカウントで再ログイン。
  2. 「admin」アカウント削除時に、該当アカウントの投稿(所有コンテンツ)を移行するか確認されるので、新管理者アカウントへ移行する。
  3. 「admin」アカウントを削除

パスワード強度を高める

パスワードはパスワードチェッカーツールなどを使い、強固なものに設定しましょう。

WordPress・プラグインのバージョンは可能な限り最新に

WordPress のバージョンやプラグインは可能な限り最新にしておく事をおすすめします。
当然、古いバージョンのものはそれだけ既知の脆弱性も多いという事になります。

未使用のプラグインは「停止」ではなく、「削除」をする

プラグインの脆弱性を突かれる危険性もありますので、使わなくなったプラグインは削除しましょう。
「停止中」のプラグインは監視・管理が行き届かなくなってしまう側面もあります。

ファイルのアップロード時は「FTPS」で暗号化する

ガンブラー系ウィルスは依然として生き残っているようです。
FTP通信だと通信が暗号化されず、パスワードが平文でやり取りされ、傍受される危険性が高まります。
FTPSやSFTPを使う事で暗号化されます。

セキュリティ精度を高めるプラグイン達

【プラグイン】セキュリティ対策 Acunetix WP Security

WordPress 内の脆弱性をスキャンし、それに対するセットアップが可能なプラグイン。
前述したプレフィクスの変更やデータベースのバックアップ、バージョン情報の削除やパーミッションの変更など、かなり豊富な設定が可能になっており、今や必須となっているプラグインです。

【プラグイン】スパムコメント対策 Akismet

デフォルトでインストールされているアレです。
コメントフォームを解放しているブログサイトには、もはや必須と言われています。
テンプレートカスタマイズ時にコメントフォームを使っていない場合でも、コメント投稿機能そのものが有効になっていると、 裏側から「あんな事やこんな事」される危険性もありますので、コメント機能を使わない場合はしっかりと無効にしておきましょう。

【プラグイン】テーマファイル内のウィルスチェック AntiVirus

無料で配布されているテーマなどは、特に悪意のあるスクリプトを埋め込まれているケースが多いようです。
もちろん無料テーマでなくとも、改ざんの危険性は依然として存在する為、定期的にテーマ内のウィルスチェックは必要でしょう。

【プラグイン】複数回のログイン失敗でログイン画面をロック Simple Login Lockdown

ログインの施行回数を設定し、失敗すると一定時間ログインをロックするプラグイン。
一連の総当たり攻撃では、何度もログインを施行するケースが多い為、これも必須といえるでしょう。

【プラグイン】ログイン履歴で不正アクセスを監視 Crazy Bone(狂骨)

ログイン履歴を一覧化してくれるプラグイン。
何度もアクセスエラーをおこしているIPアドレスなどは、「WP-Ban」プラグインなどを使ってBANしてしまいましょう。

【プラグイン】ログイン画面に Basic 認証をかける WP Admin Basic Auth

Basic認証をかける事で二重認証にしてしまうという手もあります。

【プラグイン】定期的なデータベースのバックアップ WP-DBManager

私は幸いにもまだ未経験ですが、「改ざん」された後の処理は相当大変と聞きます・・・。
兎にも角にも、データベースのバックアップは必須ですよね。
定期バックアップされたデータベースはメールで送信してくれます。

【番外編】StaticPress × Amazon S3 × Vagrant という運用法

今、巷で話題の運用方法。
WordPress の標的となりやすいのは、wp-config.php や wp-login.php などの動的なコアファイルや、プラグインの脆弱性を突いたものが多い傾向にあります。

だったら、「静的ファイル化してしまえ!」って事で、「StaticPress」プラグインを使って、コンテンツを静的ファイルとして出力、
なおかつセキュリティの高い Amazon S3 にアップロードして、ホスティングする。

「WordPress 使う意味ないじゃん!」という方の為に、
Vagrant で仮想環境を構築して、ローカルで WordPress を運用する・・・

っていう感じでしょうか。(認識、間違ってたらすみません。)

まとめると、

  1. Vagrant で仮想環境を構築、WordPress をローカルで保持・運用。
  2. 動的コンテンツを「StaticPress」プラグインを使って、静的ファイルとして出力。
  3. Amazon S3 へアップロード・ホスティング。

という感じです。
すでに「2→3」の工程までを簡単にサポートしてくれる WordPress プラグインも提供されているようです。

参考リンク

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ