先日、保守管理対象の WordPress サイトに対して クロスサイト・スクリプティング(XSS)攻撃を受けました。200記事程度に対し、特定のサイトに誘導するような JavaScript が埋め込まれる被害規模です。
完全な原因の特定はできなかったものの、おそらくこれだろうという形での原因はわかり、解消後同じ被害は発生していません。
どのような XSS 攻撃だったのか、原因の可能性、同じような被害に合わないためにどうすればいいかなどをご紹介します。
目次
突然、不正なスクリプト埋め込みが発生
対象サイトは数百記事の記事を保有しているサイトです。WordPress で作られており、弊社サービスである WordPress 保守管理サポート 対象サイトとなり、セキュリティ対策も行っていました。後でわかりましたが、原因は保守管理サポート対象外からの被害経路の可能性が高いという判断となりました。
ある日、対象サイトに対してセキュリティアラート通知がありました。確認したところ不正なスクリプトが埋め込まれていました。
- コードは難読化されており、特定のサイトの公開済みWordPressプラグインのファイルを参照するなどのスクリプトが埋め込まれている
- ページ閲覧後数秒後に不審なサイトに自動リダイレクトされる
- ウェブサイトフロント側においては埋め込みタグの一部が表示されていた
不正なスクリプトは JavaScript にて記述されており、<script>不正なコード</script>
という形でページ内に記述されていました。タグの一部が表示されていた一例をご紹介します。前後は本文が記載されています。
セキュリティチェックを通過するケースもあり
上記のページは一旦手動でスクリプト箇所を削除する対応をしたものの、その他の複数記事ページにおいて同様の不正なスクリプトが挿入されていました。1記事につき5〜20箇所程度のスクリプトが埋め込まれており、手動での削除作業は少々手間がかかる作業です。
手動で対応していく中で気づいたのは、挿入されている前後の文字列がすべて特定の文字列だったことです。よって、WordPress の データベースを上書きされる XSS 攻撃というのがわかりました。
200記事以上被害になっているものの、スキャンを実施しても発見できない
全体の被害を特定するため、サイト全体をスキャンしました。いくつかスキャンツールを利用しましたが、代表的なものは Sucuri 社が提供するスキャンプラグインです。
スキャンを実施しましたが、残念ながらマルウェアスキャンによって発見された脅威はありませんでした。
ところが、直接 db を検索するとマルウェアと思われる記事が該当するのです。記事タイトルに含まれているものもあれば、本文内に含まれているのもあり、ざっとみても200件以上の記事が該当する計算でした。
原因は古く稼働していない WordPress(おそらく)
その後色々と対応していく中で、現在は稼働していないかなり前にインストールされてままの WordPress が下層ディレクトリに存在しているのがわかりました。これらは弊社が関わる前に作られた WordPress でした。
- 古いディレクトリに設置されている WordPress において脆弱性を確認
- 数年前に一時的な目的として作られた WordPress と思われる
- WordPress のバージョンは 4.3.1 となり、古いままアップデートされていない
- アクセスしてもデータベース接続エラーで閲覧不可
- Contact Form 7 の バージョンが4.3となっており、脆弱性を抱えるバージョン
ということで担当者に確認したところ、不要な WordPress とのことでディレクトリ毎削除しました。
ちなみに、サーバー内に WordPress が含まれているかどうかは Linux の find コマンドで確認可能です。
find . -name 'wp-config.php' -print
バックアップデータから復旧
古い WordPress を削除したところでデータベースに書き込まれたスクリプトは削除されません。これらは作成してあったバックアップデータから復旧作業を行いました。安全を期して2ヶ月以上前のデータから復旧しました。その間新たに作られた記事や変更箇所はバックアップを作っておいていただき、復旧後に手作業で追加変更してもらいました。
復旧後から現在まで、XSS 攻撃の形跡はなく、不正なスクリプト埋め込みも確認できていません。おそらく、原因は上記の古い WordPress だったと考えられます。
追加で行ったセキュリティ対策
さらに安全にするため、以下のセキュリティ強化・対策を行いました。
不要なリスクのあるファイルの削除
データベースの一括置換を行うためのツールである Search Replace が設置されていました。基本的に利用後は削除が望ましいディレクトリのため一式削除しましました。ちなみに、日付を見るとこちらも同様古い WordPress と同様の年でした。
また、wp-config.php ファイルのバックアップファイルが残っていました。記載されているアクセス情報は現在無効だったため大きな問題はありませんでしたが、設定ファイルのため削除しておくのが安心です。
管理者権限アカウントのパスワードの変更
WordPress各管理者アカウントのパスワードを堅牢なものに変更しました。WordPress のログインアカウントのパスワードなどが漏洩している可能性を考慮しての対応です。
WordPress 管理画面に対して BASIC 認証の設定
セキュリティ強化のため、管理画面に対して Basic 認証を設定しました。
ちなみに、IP アドレスによる制限はセキュリティ上効果が期待できますが、運営側メンバーのデメリットもあります。例えば動的に IP アドレスが変わる場合は都度追加しないといけず、運用上手間が大きいです。
XSS 被害にあわないために WordPress のセキュリティ対策を
以上、実際にあった XSS 被害事例の共有でした。他にもいろいろな被害が発生しています。
WordPressのアップデートやセキュリティ対策をしなかったことで実際に起きた事件
WordPress は正しく保守・管理していれば問題有りませんが、今回のように脆弱性があるバージョンを使っているまま放置されている WordPress を使い続けていると、被害にあってしまう場合があります。
WordPress のリニューアルの際には今までお付き合いのあった業者変更に伴い、今回のように サーバー内に認知外の WordPress が置き去りになることがあります。リニューアルの際には今後の保守やリスクについても検討することをおすすめします。
WordPress サイトをリニューアルする時に考えたい今後の保守やリスク対応
今回の被害にあった WordPress は保守対象サイトだったため、基本的な対応はサポート内に含まれており、弊社への対応費用は別途かかっていません。WordPress サイトを運用しているが、保守に不安がある・万が一被害にあった場合に対応できない、等でお困りであればお気軽にご相談ください。
コメントを残す