WordPress脆弱性の原因とやっておくべき7つの脆弱性対策

WordPressで発生した脆弱性についての解説と、サイト運営者が行っておくべき7つの脆弱性対策をまとめて説明しています。オープンソースCMSのWordPress脆弱性を悪用して150万以上のサイトが改ざん被害にあった理由や、サーバのファイルアクセス権やバージョンアップなどのセキュリティ対策方法を解説。

WordPress脆弱性対策

WordPressの脆弱性について

WordPressは全世界のwebサイトのうち、4分の1で利用されているという報告があり(参考:https://w3techs.com)、 非常に多くのユーザーが日々使用しているサービスです。 その一方で、WordPressはオープンソースソフトウェアであるということもあり、 度々セキュリティ面で問題が発生することが少なくありません。 最近では、2017年初頭に起きた大規模なWordPressのセキュリティインシデントは記憶に新しいと思います。

150万超のサイトが改ざん被害

2017年2月2日、WordPressから公式に脆弱性について発表がありました。 これはリモートからサーバ上にあるコンテンツを改ざんできるという脆弱性でした。 この時、対象となったバージョンはWordPress4.7.0 、WordPress4.7.1で、 WordPress利用サイト150万件以上が改ざん被害を受けたと言われております。

この脆弱性の特徴は特定の内容を含んだリクエストを GETまたはPOSTデータとして攻撃したいURLに送ることで、 簡単にコンテンツを改ざんできるという、比較的初歩的な内容でした。
WordPressは様々なフリーのプラグインが提供されているブログツールなので、便利さゆえにそれらを利用すると その分脆弱性も増えてしまうというのが実情です。

とは言え、全くプラグインを活用しないでWordPressを利用するというのは現実的ではないわけで、どのような点に注意して活用していけば良いか次から見ていきましょう。

SQLインジェクションとは

上記の例は、コンテンツインジェクションと呼ばれる攻撃方法ですが、他に一般的な攻撃にSQLインジェクションがあります。 SQLインジェクションは、サーバーに渡される文字列に、有害なコードを挿入する攻撃です。 例えばSQLインジェクション対策が施されていないアプリケーションでは、データベースで構文的に有効なクエリがすべて実行されてしまいます。高いスキルを持った悪意のあるハッカーによる攻撃では、通常のリクエスト文字列に巧妙にSQLコマンドを忍ばせることで、開発者の意図しないSQLが連結されて実行されることを狙っています。このため、SQLを利用する箇所については必ずインジェクションに対する脆弱性を検証する必要があるでしょう。

ブルートフォースアタックとは

ブルートフォースアタックとは、パスワード解析方法の1つで、とにかく総当たりで正解パスワードを割だそうというかなり強引な手法です。単語から生成された辞書ツールなどを使って考えられるパスワードを順番に試すもので、そう簡単には当たらないだろうと思いがちですが、PCの性能も高速化しているので8桁以下のパスワードはクラッキングされる危険性があります。

ゼロディ攻撃とは

ゼロデイ攻撃とは未知の脆弱性が発見されてから、 ベンダのセキュリティパッチが施される前を狙った攻撃になります。 修正プログラムが適用されていないため、攻撃を防ぐことは非常に難しいです。
ゼロデイ攻撃への対策は、攻撃されることを前提として セキュリティ環境を考えておくことが重要です。
例えば、SQLインジェクション対策のWAF(Webアプリケーションファイヤーウォール)を導入したり、バックアップをこまめに取得しておくなどです。

WordPressのセキュリティ対策でやっておくべきこと

前項でWordPressの脆弱性について確認しましたが、打ち手がないのかといえばそんなことはありません。きちんと、セキュリティ対策を行うことで、ある程度は防ぐことができます。一般的な対策を5つに絞って見ていきたいと思います!

WordPressのバージョンを常に最新に保つ

オープンソースであるため、クラッカー(悪意のあるハッカー)のターゲットになりやすく、脆弱性が度々発見されているWordPressですが、 脆弱性が発見された場合にWordPressは、都度適切なセキュリティ対策を施したバージョンを配布してくれています。

ですのできちんとアップデートを行えば、多くの攻撃に対して防ぐ事ができます。最も基本的なことですが、最も重要なことなので、できるだけ常に最新のWordPressのバージョンを利用するようにしましょう。


wp-config.phpをアクセス不可にする

WordPressの「wp-config.php」というファイルは、データベースのアカウント情報などWordPressを利用する上で最も重要な情報が書かれているファイルのため、セキュリティレベルを高くしておく必要があります。具体的には、Webサーバ経由でのアクセスを不可に設定しておくことが重要です。

nginxを使っている場合は、
location ~* /wp-config.php {
	  deny all;
}


apacheを使っている場合は、.htaccessファイルを作成して、
<files wp-config.php>
order allow,deny
deny from all
</files>

この設定により、Webサーバからのアクセスが遮断され、セキュリティを確保することができます。また、ファイルのパーミッションは自動作成した場合は「666」などになっていますが、所有者のみがアクセスできる「400」に設定しておくようにしましょう。


データベースのプレフィックスをデフォルト値以外にする

WordPressをインストールする際に、デフォルト値では「wp_」というプレフィックスでデータベースのテーブルが作成されます。このまま利用している場合も多いと思いますが、テーブル名が簡単に特定できてしまうので、SQLインジェクションによる攻撃の成功確率が上がることになってしまいます。このため、プレフィックスを「wp_」からオリジナルな文字列に変更しておいたほうが安心です。

テーブル名自体を実際に変更してwp-config.phpの「$table_prefix」を書き換えるなどの手順が必要ですが、「Change DB Prefix」などのプラグインでも対応可能です。


管理画面の認証方法を複雑化する

管理画面の認証方法を複雑化する
管理画面のパスワード認証に加えて、追加的な入力を求めることでブルートフォースアタック(総当たり攻撃によるパスワードクラッキング)への対策ができます。これらを実現するプラグインも、いろいろ種類があります。
・二段階認証
・画像に表示される文字列の入力を求めて認証
・日本語の文字列入力を求めて認証
・ワンタイムパスワードを発行する認証
特に、「SiteGuard WP Plugin」などの日本語の文字列を入力させるプラグインは、外国人には解読不可能なのでよりお勧めです。


管理画面をSSL通信に設定する

管理画面をSSL通信に設定する
SSL通信とはデータを暗号化して通信するプロトコルです。 暗号化されているので、仮に通信内容を第三者から傍受されたとしても、その文字列は解読できないのでユーザ名パスワードなどのアカウント情報を特定されることを防げます。

レンタルサーバなどではSSL証明書を購入した上で、サーバに認証情報を設定することでHTTPS通信を行うことができます。AWSでは、ロードバランサーを利用していれば無料でSSL証明書を取得することができるので、より簡単に導入できます。


セキュリティ関連のプラグインを活用する

セキュリティ関連のプラグインを活用する
WordPressでは多数のセキュリティ関連のプラグインがあります。 大きく分けると以下の種別のプラグインがあります。
・脆弱性の存在をいち早く発見する
・セキュリティレベル自体を上げる
・ウィルス感染や悪意のあるコードが存在していないかのチェック

このうち、セキュリティレベル自体を上げるために有効なプラグインとして代表的なものが「SiteGuard WP Plugin」です。このプラグインには、ブルートフォースアタック、パスワードリスト攻撃、コメントスパムなどを防ぐための機能が搭載されており、プラグインをインストールするだけで管理画面への不正ログイン対策などセキュリティレベルを上げることができます。

ただし、プラグインを導入することによるデメリットも存在します。それは、プラグインが動作するためにはメモリ、CPUなどのリソースを消費するため、サイト自体の動作が遅くなってしまう可能性があります。セキュリティレベルを上げようとして色々なプラグインを入れすぎると、その分重くなってしまうこともあるので、十分検証の上で導入を決めましょう。


バックアップを定期的に取得しておく

バックアップを定期的に取得しておく
こういった対策を実施していたとしても、 ウィルスや不正プログラムは進化しているので、ゼロディ攻撃などの被害に遭うこともありえます。 そこで万が一ハッキング被害に遭った時のために、定期的なバックアップをとっておく事は大事なことなのです。 「BackWPup」などバックアップ用のプラグインも用意されております。 また、AWSを利用している場合は、定期的に自動スナップショットをとるLambdaスクリプトを設定しておけば、世代管理も可能で、もしものリカバリ時も最小の時間で対応できるので便利です。

『翔』で安心の高速WordPressライフを!

高速WordPress『翔』では、WordPressに最も適したAWS環境を構築しました。Linuxカーネルやデータベースなど様々なパラメーターがWordPressに特化してチューニングされております。 もちろん、セキュリティにも注意を払い設計されており、エンタープライズプランではWAFを標準で装備しています。

高速WordPress『翔』
WAFを標準で装備!
WAF(Web Application Firewall)とは、Webサイト上のアプリケーションに特化したファイアウォールです。ユーザーからの入力を受け付けたり、リクエストに応じて動的なページを生成する一般的なWebサイトをSQLインジェクションなど不正な攻撃から守ります。

一般的にファイアウォールと呼ばれるものとは異なり、データの中身をアプリケーションレベルで解析しますので、もしWebサイト上のアプリケーション自体にセキュリティ脆弱性があってもそれを防ぐことができるという特徴があります。

また、企業情報戦略面のニーズでいうと、ISMS、PCIDSSの準拠を満たしております。
APN Consulting Partner
スーパーソフトウエアはAWSパートナーネットワーク(APN)のコンサルティングパートナーです。


お問い合わせ

メールでのお問い合わせは下記フォームよりご連絡ください。お電話でのお問い合わせは03-6721-7105までご連絡ください。
お名前 (例:山田太郎)必須
貴社名/貴団体名 (例:株式会社スーパーソフトウエア)必須
メールアドレス (例:abc@xyz.com)必須
お電話番号 (例:03-1234-5678)
お問い合わせ内容 必須