WordPressの脆弱性とは?リスクや攻撃手法、対策方法をまとめて解説!

WordPressの脆弱性に驚く男性
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

WordPressは脆弱性がありセキュリティに弱いと言われていますが、どんな被害があって、脆弱性の被害に合わないようにするにはどうしたら良いのでしょうか。

本記事では、過去にあった被害と攻撃手法、対策方法について初心者の方でもわかるように解説していきます。

弊社では、保守サポートも行なっておりますので参考にしてみてください。
WordPressの保守はこちらから

WordPressの脆弱性

脆弱性とは、OSやソフトウェアなどプログラムで作成された対象物の不具合や設計ミスで起こる、セキュリティの欠陥です。

WordPressはOSS(オープンソースソフトウェア)として提供されているもので、どこの誰でもプログラムコードを閲覧することができるため、脆弱性を発見する可能性も高くなります。

ではWordPressの脆弱性を狙われた事例についてみてみようと思います。

WordPress脆弱性を狙った改ざん被害

近年で最も大きなWordPressの脆弱性被害は、2017年にあった150万サイト以上が改ざん被害にあった事案です。

WordPressのバージョン4.7.0およびバージョン4.7.1の「攻撃に対する認証が不要」、「リクエストを送るだけで改ざん可能」といった脆弱性が狙われ、大規模な被害に発展しました。

参考情報:WordPressの脆弱性対策について

ログインしたユーザーが権限の範囲を超えた操作を実行できてしまう

バージョン4.9.6で起きた特定の権限を持つユーザーがuploadディレクトリ外のファイルを削除できてしまうという脆弱性が発見されました。

影響範囲が非常に大きな事例でしたので、多数のメディアでも取り上げられました。

参考情報:WordPress 4.9.7 セキュリティ・メンテナンスリリース

WordPress脆弱性の情報収集に役立つサイトのご紹介

上記のような影響範囲の大きな脆弱性が発見されることは稀です。
ただし、WordPressの脆弱性は日々発見されるとともに、アップデートによって改善されています。

こうした脆弱性に関する情報を、なるべく早くキャッチすることが大切なサイトを守ることに繋がります。
以下から、脆弱性が確認された場合に情報を提供しているサイトをご紹介します。

JVN iPedia 脆弱性対策情報データベース

『JVN iPedia 脆弱性対策情報データベース』は、国内外問わず脆弱性の情報が日々公開されているサイトです。

トップページの検索からWordPressと検索することで、WordPressに関する脆弱性情報を閲覧することができます。
より詳細に情報を得たい場合は、詳細検索からベンダ名や製品名、深刻度など指定して検索することも可能ですので、ぜひ活用してみてください。

もちろん、WordPressだけでなく他の脆弱性情報も取得することができます。

JVN iPedia 脆弱性対策情報データベースはこちら

IPA 独立行政法人情報処理推進機構

『IPA 独立行政法人情報処理推進機構』では、セキュリティについての情報発信がされています。
2017年のWordPressバージョン4.7.0およびバージョン4.7.1に関する脆弱性の情報も、本サイトにて注意喚起が行われており、影響範囲や対策、参考情報など詳しく掲載されています。

IPA 情報処理推進機構はこちら

JPCERT コーディネーションセンター

『JPCERT コーディネーションセンター』では、注意喚起や脆弱性情報、Weekly Reportなどセキュリティ関連の情報が配信されています。

『JPCERT コーディネーションセンター』に報告されたインシデント件数も記載してあるので、参考にしてみてください。

JPCERT コーディネーションセンターはこちら

WordPressの脆弱性を狙った攻撃手法

WordPressの脆弱性を狙った様々な事案がありました。
ここでは、WordPressの脆弱性を狙った攻撃手法をご紹介します。

クロスサイトスクリプティング(XSS)

クロスサイトスクリプティングは、サイトにコードを埋め込むことで他のサイトへの誘導を行ったり、個人情報の不正取得などを狙ったものです。

攻撃者がそのサイトに埋め込んだコードが、Webサイトを訪問したユーザーのブラウザ内で実行されるといったものです。
Webサイトを閲覧するだけで、ユーザーの個人情報などが不正取得されたり、使用しているコンピュータ上のファイルが破壊されたり、バックドアを仕掛けられるといったリスクがあります。

多くの訪問者のいるサイトであれば、それだけ被害規模も大きくなってしまうため注意が必要です。

クロスサイトリクエストフォージェリ(CSRF)

クロスサイトリクエストフォージェリは、ユーザーが意図していないリクエストを送信してしまうことです。

例えば、
攻撃者が、不正なリクエストを送信できる攻撃用Webページを作成し、それを他者のサイト内のリンクに設置します。
設置したリンクをユーザーがクリックすることで、意図していない処理が行われ、情報がもれてしまったり、不正書き込みが行われたりといった攻撃を行うことができます。

クロスサイトリクエストフォージェリで、WEBサイトに登録していた情報が勝手に変更されたり、非公開情報が公開されてしまうといった被害が起きるリスクがあります。また、2012年には攻撃者による不正な投稿により、5名の誤認逮捕が発生しています。

SQLインジェクション

SQLインジェクションは、データベースから情報を抜き取られたり、改ざん・消去されてしまう攻撃です。

フォーム等に文字列を入力した場合に単なる文字列ではなく、SQL文として実行してしまうことでデータベースを不正に操作することが出来てしまいます。

エスケープ処理などを行い、対策する必要があります。

特に、ECサイトなど、第3者の個人情報等を管理している場合には、個人情報漏洩に繋がる可能性もあり、巨額の損害賠償が発生するリスクもあります。

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

ブルートフォースアタックは「総当たり攻撃」ともいい、その名の通り総当たりして解読するという攻撃です。

例えばですが、ユーザーログイン画面のパスワードなどを総当たりして割り出すのに用いられています。
ブルートフォースアタックが成功してしまうとアカウントが乗っ取られてしまうので、簡単なパスワードや同じパスワード複数のサービスで使い回すといったことは避けましょう。

パスワードの文字数や文字の種類の組み合わせごとの解読されてしまう時間を見てみましょう。

password解読時間

出典:情報処理推進機構 表1-1: 使用できる文字数と入力桁数によるパスワードの最大解読時間

英字の大文字小文字を混ぜたとしても、4文字であれば2分で破られてしまうことがわかると思います。
解読されにくいパスワードとしては、英字の大文字小文字を混ぜ、数字や記号を合わせ8文字以上にしておくことを意識しましょう。

今では、難しい文字列のパスワードを生成してくれるWebサービスや、パスワードマネージャーなど便利なサービスがあります。
これらを利用すれば、難しいパスワードを自分で考えたり、複雑にしすぎて忘れてしまうこともありません。

今後、コンピュータの処理スピードなどのパフォーマンスが 上がってくると時間はさらに短縮される可能性はあります。
可能な限り、パスワードは厳重にして対策しましょう。

WordPressの脆弱性を放置した際に起こること

サイトの記述の改ざん・削除

代表的な被害のひとつが、投稿した記事の内容が改ざん・削除されるケースです。
記事の内容が変更されるだけでなく、危険なサイトにリンクされたり、アクセスするだけでリダイレクトされる等の被害が考えられます。

2017年にWordPressの脆弱性を狙った事案でも不正改ざんが起きています。

WordPressの管理画面にログインできなくなる

ユーザーIDやパスワードに間違いがなく、サーバー等にも問題がないのに、管理画面にログインができないという場合、不正ログイン等のハッキングを受け、ユーザー情報が書き換えられている可能性があります。

二段階認証やIP制限による不正ログイン対策を行いましょう。

Googleのブラックリストに登録される

不正な改ざんにより、Googleから悪質なサイトと判断され、その状態を放置しておくとGoogleのブラックリストに登録されてしまいます。
ブラックリストに登録されると、検索結果に表示されなくなってしまうため、注意が必要です。

Googleサーチコンソール等から何らかの警告が来た場合には、早急にサイトの状態を確認し、修正対応を行いましょう。

ユーザー情報の漏洩

何らかの脆弱性を足がかりに、ユーザー情報が漏洩した場合、深刻な被害が発生する恐れがあります。
「WordPress自体の乗っ取り」や「ECサイトユーザーの個人情報の漏洩」などが起これば、そのサイトに対する信頼は大きく失墜し、さらに場合によっては損害賠償を請求される恐れもあります。

WordPressは常にバージョンアップ等のメンテナンス・セキュリティ対策を欠かさないように運用することが大切です。

WordPress脆弱性の対策

WordPressの脆弱性対策ですが、初心者でも簡単に行えるものを紹介しています。
小さいことかもしれませんが、一つ一つ行なっていくことが脆弱性対策にとって重要なことです。

WordPressを最新にする

まず、WordPressのバージョンを最新にしておくことです。
WordPressは機能追加や脆弱性対策などを目的に、月1回程度のペースでアップデートされています。
メジャーアップデートとマイナーアップデートと両方ありますが、マイナーアップデートは積極的に行なった方がよいでしょう。

マイナーアップデート(1.9.◯の◯部分の数字変更です。例:「1.1.8」から「1.1.9」など)は、軽微な修正や脆弱性対策が主な目的です。大きくレイアウトが崩れたりテーマやプラグインが使えなくなるといった可能性は低いので、可能な限り早めにアップデートするようにしましょう。

メジャーアップデート(◯.◯.9の◯の部分です。例:「1.5.9」から「1.6」、「1.9.2」から「2.0」など)は、大きな変更や機能追加を伴う修正ですので、場合によってはテーマやプラグインに影響が出る場合があります。こちらも早めのアップデートが推奨ですが、サイトやプラグインへの影響範囲を確認してから行った方が良いでしょう。

アップデート前には必ずバックアップをとっておくことをおすすめします。
また、可能ならテストサイトなど、検証環境でサイトに影響が出ないかを確認しておいた方がいいでしょう。

アップデート内容はwordpress.orgのブログ等で告知されます。特に脆弱性に関する内容が含まれるアップデートは早急に対応してください。

テーマ・プラグインを最新に保つ

WordPress本体同様に、テーマやプラグインも最新の状態に保つことが重要です。
ただし、長期に渡ってアップデートされていないテーマやプラグインがあります。アップデートを怠っている場合と同様、長期間、アップデートをしていないテーマやプラグインにも脆弱性がある可能性があります。

テーマやプラグインにもよりますが、目安として1年以上アップデートがされていないテーマやプラグインは使用を停止し、新しく使用開始することもやめておいた方がいいでしょう。

こちらで、プラグインの選び方について解説していますので、新しくプラグインを入れようと考えている方はぜひ参考にしてみてください。

また、使用していないテーマやプラグインもハッキングの対象となる場合がありますので、適宜、管理画面から削除することをおすすめします。

アップデート状況は、最終更新日や開発ログから確認することができるので、参考にしてみてください。

不正ログイン対策

WordPressの不正ログインは以下のようなポイントに注意して不正ログインを防ぎましょう。

  • ユーザー名とパスワードを複雑にする
  • ログインページのアドレスを変更する
  • ログインページにIP制限をかける
  • 秘密の質問を設置する
  • 画像認証を設置する
  • 2段階認証を設置する

ユーザー名とパスワードを複雑にする

WordPressデフォルトの設定では、ユーザー名が投稿者名として投稿ページに公開されています。
ユーザー名はログインに使われるものですので、これが漏れてしまうとブルートフォースアタックでの不正ログインを容易にしてしまうので、表示しないようにしましょう。

では画像を使ってユーザー名とパスワードの変更方法を6つの手順で説明します。
ユーザー名変更画面

新規ユーザー追加画面

ユーザー追加後画面

前のユーザーを削除する

新規追加ユーザーに権限を譲渡する

新規追加したユーザーになっていること確認

また、WordPressインストール時に変更していない場合、ログインユーザー名は自動で「admin」となります。
このデフォルトユーザー名を使い続けるのは、ユーザー名を公開している場合と同様、不正ログインに対して弱くなることにも繋がるので、変更する必要があります。

ログインページのアドレスを変更する

理由はサイトのアドレス変更していないと、初期の状態である『http://自分のドメイン名/wp-login.php』というURLになり、誰でもログイン画面に到達できる状態になってしまいます。

ログインページのURLを変更することで、不正ログインのハードルを上げることが出来ます。
ハッカーを泥棒に例えると、どんな鍵でも開けられる泥棒でも、玄関がどこにあるかわからなければ家に入ることができないというイメージですね。

ログインURLの変更は、Login rebuilderというプラグインを使うのが簡単です。
他にも、「functions.php」や「.htaccess」といったファイルを編集することでも変更可能ですので、知識がある方はそうした方法で実装しても良いでしょう。

ログインページ・管理画面にIP制限をかける

また、ログインページや管理画面にアクセス出来る人を限定することも有効です。
代表的なのが、ログインページへのアクセスにIP制限をかけるというもの。

IPアドレスを調べることで、インターネットユーザーがどこからアクセスしてきたか判断できます。
自宅や会社以外のIPアドレスを制限することで、悪意のある攻撃者によるログインページへのアクセスを防ぐことができます。

IP制限は、『SiteGuard WP Plugin』などのプラグインで実装できる他、「.htaccess」ファイルにコードを追加することでも実装できます。

『SiteGuard WP Plugin』は、上記のログインURLの変更や何度もログインに失敗した場合にログイン画面をロックする設定もできる高機能なセキュリティプラグインです。

ただし、以下のような場合はIP制限をかけることは難しいので注意してください。

  • 固定IPアドレスがない場合
  • 何らかの理由でIPアドレスを限定することができない

IP制限をかけることが難しい場合は、他の方法で不正ログイン対策を行いましょう。

秘密の質問を設置する

WordPressのログイン画面に秘密の質問を設定することで、よりセキュリティを強化することができます。

以下のセキュリティ対策用のプラグインを導入します。
WP Security Questionのダウンロードはこちら
WP Security QuestionはWordPressのプラグイン画面からもダウンロード可能です。

以降は画像を使って各種設定を5つの手順で説明します。

セッティングページに遷移する

秘密の質問を追加、削除する

ユーザー画面にて秘密の質問を設定する

ログアウトすると設定が反映されていることを確認する

秘密の質問が設定されているか確認のためのエラー画面

秘密の質問やその回答は、第三者が調べればわかるもの、予想しやすいものは避けましょう。
また、PC上や実際のメモ等に残していると、盗み見られるリスクもあるので、何も見なくても回答できるような内容にしておくと良いでしょう。

画像認証を設置する

画像認証は、最近では様々なサービスやサイトで導入されているので、見たことがある人も多いでしょう。
WordPressのログイン画面に画像認証を設置することで、画像を認識することが難しい機械的な攻撃を防ぎやすくなります。

文字列を使った認証を行うためのプラグインを導入します。
『SiteGuard WP Plugin』のダウンロードはこちら
『SiteGuard WP Plugin』はWordPressのプラグイン画面からもダウンロード可能です。

IP制限の項目でも紹介していますが、『SiteGuard WP Plugin』は、他にもログインアドレス変更やIP制限、ログインロックなども設定することができます。

以降は画像認証を設定する3つの手順を画像で説明します。

文字認証を行うための設定画面に遷移する

表示する文字の選択

ログアウトして設定が反映されていることを確認する

他にもログイン履歴を確認できます

2段階認証を設置する

WordPressへのログイン時に2段階認証を設定することで、不正ログインを防ぐことが可能です。
一定時間のみ有効なワンタイムパスワードを発行することで、「ユーザー名」と「通常のパスワード」「ワンタイムパスワード」の3点で認証を行います。

まずは、ワンタイムパスワードを発行するために、Googleが提供しているGoogle AuthenticatorをiPhoneかAndoidでダウンロードします。

Apple StoreでGoogle Authenticatorをダウンロードする

Play StoreでGoogle Authenticatorをダウンロードする

次にWordPressにGoogle Authenticator用のプラグインを導入します。
Google Authenticatorのダウンロードはこちら

以降は、同名プラグインを使ってWordPressの管理画面上で2段階認証を設定するまでの手順を、画像を使って説明します。

Google Authenticatorを設定するためにQRコードを表示する

スマートフォンのGoogle Authenticatorを起動する

QRコードを読み取った後の、ワンタイムパスワード画面

ログアウトしてワンタイムパスワードを使ってログインできるか確認

SSL対応

「このサイトへの接続は保護されていません。」といったような表示が出てきたことが誰しも一度はあるのではないでしょうか。

通信保護されていない画面

URLがhttpという表記になっており、このサイトは安全ではありませんという警告を表しています。
SSL化の方法は、契約しているサーバーごとにSSL化に関する設定方法が異なりますので、各サーバー会社のよくある質問などで確認してください。
SSL化した後にWordPressの一般設定から変更を行う必要があります。

WordPress側のSSL設定

SSL化が完了したら、実際にサイトを開いてみましょう。
保護されていない通信が、この接続は保護されていますに変わっているのがわかると思います。

SSL設定後の通信保護表示

httpとhttpsの違い

httpとhttpsの違いは、通信内容が保護されているかどうかという点です。
保護されていない通信だと、第三者が通信内容を傍受したり、通信内容に変更を加えることが出来てしまいます。

Googleも検索順位のランキングを決める際の要素とするなど、SSL化は世界的に標準となっています。
安全なWebサイトであることを示し、ユーザーに信頼してもらうためにもSSL化は必須です。

セキュリティ機能があるプラグインを導入

上記で既にいくつか紹介していますが、セキュリティ機能のあるプラグインの導入もオススメです。
代表的なセキュリティプラグインは『Wordfence Security』や『SiteGuard WP Plugin』などが挙げられます。

各プラグインごとに設定出来る項目が異なる他、日本語対応をしていないものもありますので、以下の記事を参考にそれぞれのプラグインの特徴を理解した上で導入してください。

各セキュリティプラグインの特徴について詳しく見る

セキュリティプラグインは数を入れればいいというものではないので、自分のサイトに必要なものや使いやすいものを選んで導入しましょう。

定期的にバックアップ

定期的なバックアップを行うことで、万が一脆弱性を狙われたとしても復元できるようにしましょう。
また、テーマやプラグインのアップデート時やWordPressのメジャーアップデート時にもバックアップしておくことで、レイアウト崩れやバグなど発見した時に復元することができます。

プラグインによるバックアップ方法

それでもセキュリティが不安な場合はWordPress保守のプロに任せる

WordPressの脆弱性で起きた事案を含め、セキュリティ対策を紹介してきました。

セキュリティ対策は厳重にしようと思えばどこまでも厳重に出来ますが、それに比例して対策にかかる時間や費用の負担も大きくなります。
重要なのは、リスクと負担のバランスをとること。
セキュリティ対策の基礎知識を学び、自分のWordPressサイトにどこまでのセキュリティ対策が必要なのかを見極めて運用していきましょう。

もし、セキュリティ面で不安を感じていたり、日々のメンテナンスにお悩みなら、WordPress保守の専門家にご相談ください。

WordPress保守のご相談はこちらから

土井純也

土井 純也 Twitterアイコン Facebookアイコン

WordPressスペシャリスト・エンジニア
株式会社プレートテクノロジー 取締役
1985年北海道生まれ。200社以上のWordPressサイトの制作を担当し、「wp.support」では一部上場企業を含め、様々なサイトのWordPress保守・セキュリティをサポートしている。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

記事が気に入ったら
wp.supportを "いいね!"
Facebookで更新情報をお届け。

WordPressの保守・セキュリティ対策なら「wp.support」

WordPressのプロによる保守サービス

ワードプレスのバージョンアップセキュリティ対策
お悩みではないですか?
「何かが起きる前に!」
WordPressのプロフェッショナル集団が対応します。
サーバー保守にも対応。月額4万円〜
SSL対応、定期バックアップもお任せ下さい。