WEB制作に関わる全ての人に見ていただきたい、WordPressの脆弱性とセキュリティ

WordPress

WordPressは世界で1番使用されているCMSかつオープンソースであるが故に、悪意のある第三者やプログラムから世界で1番攻撃されやすいCMSと言われています。

私自身も何度か攻撃を受けていて、実害に及ばなかったものから及んだものまで様々でした。クライアントの稼働しているWEBサイトに実害があった場合は、原因究明や報告、一次対応から恒久的対策までを行い、安全性を確保した上で再度稼働させる必要があり、その作業は簡単なものではありません。
被害があるのはクライアントだけではなく、そのサイトにアクセスしたユーザーに及びます。たとえ納品後の保守契約を結んでいなかったとしても、実装者の責任としてクライアント、ユーザーに安心して利用できるWEBサイトを目指さなければいけません。

私はセキュリティの専門家ではないもののWordPressを10年以上触っている中で様々な問題に当たり、対応してきました。その経験で得た知識や経験を皆さまに共有することで、同じことで失敗ないでもらえたら幸いです。
ここで紹介する対策は初めてWordPressの実装をする人でも出来るものを多く紹介していますので、参考にしていただけたらと思います。

どんな攻撃があるのか? ユーザーへの被害は?

私が実際にあった被害ですが、WordPressのプログラムを改ざんされたことで、アクセスするとたまに知らないWEBサイトへリダイレクトされてしまうようになりました。(たまにということで発見も遅れました)
このような挙動はユーザーの混乱を生むだけでなく、リダイレクト先でユーザーのPCにウィルスが入ってしまう、間違えてクリックしたリンクで架空請求がされてしまうなど、不利益が発生することがあるかもしれません。

この攻撃手法は クロスサイトスクリプティング(XSS) と呼ばれ、代表的な攻撃の一つです。詳しく知りたい方は下記の記事をご確認ください。

クロスサイトスクリプティング(XSS)とは|攻撃の仕組みと対策方法を解説
https://www.amiya.co.jp/column/cross_site_scripting_20210118.html

その他にも代表的な攻撃があるので紹介していきます

ブルートフォースアタック(総当たり攻撃)

ログイン画面などパスワードが必要なページへ、プログラムでパスワードを繰り返し入力して全てのパターンを入れることでパスワードを暴く攻撃手法です。WordPressの管理画面はデフォルトの設定で/wp-admin/wp-login.phpとなっており、簡単にログイン画面のURLが推測できるので、攻撃が容易となっています。
実際に攻撃を受けていたサイトでログイン画面へのログを確認してみると、海外のIPアドレスからアクセスが膨大にありました。
ログインされてしまうとその管理者権限でできることの攻撃を受けます。私はテーマファイルのプログラムを改ざんされたり、攻撃用の管理者ユーザーを作られたりなどの被害を受けました。

ブルートフォースアタック(総当たり攻撃)とは?そのやり方・実際にかかる時間・対策方法は?
https://cybersecurity-jp.com/column/17426

SQLインジェクション

サーバーへ送る文字列に有害なプログラムを仕込んで攻撃する手法です。攻撃を受けることで本来意図していないデータベースの操作を行なわれてしまい、情報の流出やデータ改ざんなどの被害を受けます。
「機密情報は取り扱っていない」と思っていても、WordPressはユーザー登録に使われているメールアドレスがありますので、油断は禁物です。

SQLインジェクションとは?仕組み・被害事例・対策をわかりやすく解説
https://www.shadan-kun.com/waf/sql_injection/

DDoS攻撃

これはWordPressに限ったことではありませんが、何度もサイトへアクセスすることでサーバーに負荷をかける手法です。F5アタックと言われたりもしていますが、これはDoS攻撃になります。DDoS攻撃はもっと悪質で不特定多数のデバイスに仕込んだウィルスから、そのデバイスのユーザーに気づかれない形でサイトへのアクセスを繰り返す攻撃になります。

DDoS攻撃とは?攻撃の目的や種類から実例と対策までを解説
https://business.ntt-east.co.jp/content/cloudsolution/column-185.html

対策方法

ここまで不安を煽るように攻撃の話をしましたが、WordPressは攻撃されやすいので、その対策も常に施されています。多くの攻撃は運用や実装時に当たり前のことを気をつけるだけで防げると思います。
ここからは具体的にWordPressのセキュリティ対策をどうするかを考えていきましょう。

サイトヘルスチェック

WordPress管理画面の左メニュー 「ツール」 → 「サイトヘルス」 にアクセスしてください。これはWordPressのデフォルト機能で備わっているもので、現在の設定で注意を払うべき点をリストアップしてくれます。

このキャプチャは実際に私がインストールしたWordPressのものですが、インストール直後であっても改善点が出てきます。使用していないテーマやプラグインをそのままにしておくと、アップデートがされずに脆弱性を突かれる可能性があるので不要なものは削除しておきましょう。

WordPressのバージョンアップ

バージョンアップというと新機能に目が行きがちですが、一番頻繁に行なわれているのはセキュリティメンテナンスのバージョンアップです。この記事を執筆時の最新バージョン5.9.3でしたが、一番右の数字「3」はセキュリティとメンテナンスリリースのバージョンになります。バグの修正もありますが、セキュリティ問題に関するものもあるので常に最新になるようにしましょう。
このセキュリティとメンテナンスのバージョンアップだけを自動化することも可能です。「ダッシュボード」 → 「更新」 にアクセスし、設定を有効にしましょう。
メジャーバージョンについても自動にできますが、オリジナルテーマの場合は自身の書いたプログラムが動作するかの検証を行なってからバージョンアップをするのがいいでしょう。

プラグイン導入時のチェック

WordPressのプラグインは他の人が作ってくれた機能を容易に実装できるとても便利な機能ですが、不特定多数の方が作っているものありますので、導入の際には注意が必要です。
私が考える必要最低限のものとして下記の点を挙げさせていただきます。

  • 最新更新日が古すぎないか?
  • 現在のWordPressのバージョンと互換性がありになっているか?
  • Google検索をした時に脆弱性の報告がされていないか? 幅広く使われているものか?
  • IPAやJPCERTのようなセキュリティ情報を配信しているサイトで脆弱性が報告されていないか?

こちらは最終更新日も近く、互換性ありの表示があります。

自身のプログラムに脆弱性がないかを確認

オリジナルのテーマを作る時には自身で組み込んだPHPやWordPressのプログラムが使われることになるでしょう。WordPressの関数はメンテナンスがされていますが、古いもので現在は非推奨のものもありますので、公式ドキュメントのチェックを行いましょう。

サポートフォーラム
https://ja.wordpress.org/support/

セキュリティプラグインの導入

自身でプログラムしての対策も可能ですが、プラグインに頼ることで容易にセキュリティ対策をすることもできます。
私は日本製で無料で使えて、アップデートもされている 「SITEGUARD」 をお薦めします。このプラグインでは対策できることを一部紹介します。

  • ログインページのURL変更
  • ログイン時の画像認証
  • ログインがあったことのメール通知
  • WordPress、プラグイン、テーマの更新をメール通知

予算がたくさんあるプロジェクトばかりではないと思いますので、こういったプラグインを知っておくことで低予算でも対策が可能です。

SiteGuard WP Plugin
https://www.jp-secure.com/siteguard_wp_plugin/

脆弱性診断

WEBサイトへの攻撃はされた段階ですぐ反応があるものもありますが、しばらく潜伏して顕在化しない部分で準備をしてから実害を及ぼしてくるものもあります。そのため、何も起こっていない時でも脆弱性の診断を定期的に行うことが大切です。WEBサービスで外部からチェックするもの、プラグインで内部からチェックするものもありますので定期的に診断を行うことを心がけましょう。

【無料・有料10選】WordPressの脆弱性診断ツール・サービスを解説!
https://qeee.jp/magazine/articles/8442

この記事を執筆時に調べていたところWPScanというプラグインが良いかと思っていたんですが、8ヶ月間更新が止まっており、現在のWordPressの最新バージョンでは未検証でした。定期的に診断をしてメールで通知してくれるので、保守運用の際にアラートを検知しやすいかと思いました。(私は個人のサイトなのでリスクを背負った上でしばらく使ってみようと思います)

WPScanを使ってWordpressをスキャンする
https://qiita.com/koujimatsuda11/items/d49e8642dea1a1b0d067

データのバックアップ

バックアップの方法は様々あり、ホスティングのレンタルサーバーでもコントロールパネルで設定できるものがあります。ここではWordPressのプラグイン 「BackWPup」 を紹介させていただきます。

簡単な設定で定期的に自動でバックアップをとってくれるプラグイン「BackWPup」
https://tcd-theme.com/2013/02/backwpup.html

こちらはバックアップのスケジュールや何を保存しておくかなどの細かい設定も可能です。SQLを直接叩いたり、phpmyadminにアクセスしなくてもデータベースのバックアップが取れるので初心者にも使いやすいプラグインかと思いました。ファイルのバックアップ先に他のサーバーやサービスを選べるのも良い点です。無料版と有料版がありますが、無料でも十分な機能が揃っているようでした。

1つ気をつけていただきたいのが問題が発覚した時点で、過去のバックアップデータに戻せば復帰できるかというとそうではありません。なぜなからバックアップデータにすでに攻撃を受けたプログラムが存在する場合があったり、バックアップデータ以外の箇所で攻撃を受けている可能性があるからです。
あくまで保険の一つと考えておきましょう。

最新のセキュリティ情報をチェック

脆弱性に関する情報は専門の機関から発信されているものがありますので、その情報は随時チェックを行いましょう。私はメールで受け取れるようにして、自身が担当したサイトに係るものかをチェックしています。全てをカバーしようとするとサーバー側のプログラムについてもチェックが必要ですが、まずはWordPressやPHPの脆弱性が報告されていないかをチェックすれば良いかと思います。

IPA 独立行政法人 情報処理推進機構
https://www.ipa.go.jp/

JPCERT コーディネーションセンター
https://www.jpcert.or.jp/

WordPressに限らない基本的な対策

WEBサイトを制作、運用する身としてどのようなシステムを使っていても守っておくべきことがありますので、私が業務で気にしていることを挙げさせていただきます。

ユーザーアカウントの共有はしない

WordPressやFTPなどのアカウントの1つを複数人で共有するのは避けましょう。ユーザーアカウントかならず1つを1人が使うようにアカウントを整備し、パスワードはそのアカウントを使う人以外が知らないようにするべきです。
共有したアカウントを使っていると何か問題が起こった際に原因の切り分けが困難が困難になったり、情報漏洩の危険性があります。

パスワードの定期変更は必要か?

パスワードを変更する、しないについては様々な議論があり、昔は定期的に更新することが良いとされていた状況が変わっています。例えば前述しているブルートフォースアタックでは全てのパスワードパターンを狙って攻撃を仕掛けてくるので、定期的にパスワードを更新していてもあまり意味がないように考えられます。

そうなるとパスワードだけの管理というのはとても危険に思えませんか? その対策として画像認証や2段階認証がありますので、パスワードの定期更新よりも必ず人が操作しなければいけない2重の認証が安全でしょう。
先ほど紹介したSITEGUARDプラグインには含まれていませんが、スマートフォンアプリによる2段階認証のプラグインも紹介しておきます。

WordPressに二段階認証を 『Google Authenticator』プラグイン設定方法
https://uzurea.net/wp-plugin-google-authenticator/

アカウントの棚卸し

セキュリティ対策は全てがシステム上で行われるものとは限りません。意外と見落としがちなのがユーザーアカウントの整理です。すでに退職した人やプロジェクトから外れた人のアカウントがそのまま残っている状態は健全な状態とは言えません。使用しなくなったユーザーは削除する、長期休暇の場合はユーザーの権限をなくして一時停止にしましょう。

WordPressのユーザー設定から管理者権限で権限の操作が可能です。

管理画面のIPアドレス制限

管理画面のURLのみIPアドレス制限を掛けることで、想定外のネットワークからの作業を防止したり、悪意のある第三者からの管理画面への攻撃を防ぐことができます。フリーランスの方ですとなかなか自宅の固定IPを持っていることはないかもしれません。契約しているインターネットのサービスに固定IPを持つためのオプションや、外部サービスでもVPN伝いで固定IPを使用できるサービスもあるので、セキュリティ対策のためにご検討ください。下記にVPNサービスを紹介しておきます。

マイIPはどこでも固定IP環境を実現します | インターリンク【公式】
https://www.interlink.or.jp/service/myip/

余談ですが私は副業で固定IPがないと作業ができない案件を受けた時に上記のサービスを利用しました。クライアントによっては固定IPが必要なこともありますので、知っておいて損はないサービスです。

FTPは使わない

FTPはデータを送受信する際に暗号化を行わないため、悪意のある第三者にその通信を傍受されてしまった時に被害が及ぶ危険性があります。FTPは使わずに必ずSFTPを利用するようにしましょう。

常時https化

昔のWEBサイトではお問い合わせフォームなどの情報を送信するページにのみhttps通信を行なっていることが多くありましたが、最近ではセキュリティの観点からサイト全体がhttps通信になっていることが当たり前になっています。

ブラウザでサイトを見ている際に私たちの目にはつかないところで様々な情報のやりとりがされていますので、通信の暗号化がされないhttpではなくhttpsでアクセスできる状態にしておきましょう。
ホスティングのレンタルサーバーでは無料で使えるものもあるようなので、自身の使っているサーバーの情報に合わせて設定をしましょう。

終わりに

私の技術、経験の範囲ではございますが、WordPressのセキュリティ対策を紹介させていただきました。

これまでセキュリティについて考えてこなかった人にはこの記事をきっかけに他人事ではないことに気づいてもらえたらと思っています。もっとセキュリティに詳しい方がこの記事を読んでくださいましたら、是非ともアドバイスをコメントにていただけましたら幸いです。検討しまして、本記事に書き加えさせていただきます。

よろしくお願い致します。

サムネイル制作:トオリノ Twitter

コメント

タイトルとURLをコピーしました