WordPressサイトが攻撃を受けた場合、何が起きるのでしょうか。
画面の一部が書き換えられるだけなら、該当箇所を元に戻せば解決すると思われるかもしれません。
2013年のWordPressサイト大規模改竄事件では、きっかけが海外のハッキングコンテストということもあり、ヘッダロゴが置き換えられるのみという内容でした。
ところが、実際の改竄はそれほど単純ではありません。
これまで、数十件のWordPressサイトについて、不正プログラムの調査・削除から完全復旧まで対応してきました。
その経験からいえるのは、WordPressの改竄で最も怖いのは「見た目では気づきにくいこと」と「不正ファイルを削除しても復活すること(が多い)」点です。
今回は、実際に対応した事例をもとに、WordPressが改竄されると何が起きるのかを紹介します。
※本記事の事例は、過去に対応した複数の案件を匿名化・一般化したものです。今回公表された脆弱性による被害と断定するものではありません。
実際にあった侵入経路
これまでに対応した案件では、主に次のような侵入経路がありました。
■WordPressのパスワードが破られた
推測しやすいパスワードや、短く単純なパスワードが設定されていると、攻撃者による総当たり攻撃を受ける可能性があります。
ログインURL変更やReCaptcha系のプラグインを導入しているサイトでも被害に遭われています。
管理者アカウントへのログインを許してしまうと、プラグインやテーマの編集・追加などを通じて、不正なプログラムを設置されるおそれがあります。
同じパスワードを複数のサービスで使い回していた場合は、別のサービスから漏洩した認証情報を悪用されるケースも考えられます。
■ FTPアカウントのパスワードが破られた
実はこれが多いと思います。レンタルサーバー契約完了メールに届く「サーバーパスワード」。管理画面ログインのパスワードと違い、まったく気にせず放置される方が多いです。
それが英数8文字の脆弱なので、推測可能なサーバーIDとセットで破られます。
過去の案件には、レンタルサーバーで初期設定された脆弱なFTPパスワードが使用されていたケースもありました。
FTPアカウントを奪われると、WordPressの管理画面を経由せず、サーバー上のファイルを直接書き換えられてしまいます。
この場合、WordPressの管理者パスワードだけを変更しても攻撃を止められません。FTPやサーバー管理画面など、関係する認証情報をすべて確認する必要があります。
■改竄されると何が起きるのか
実際の被害は案件ごとに異なりますが、次のような改竄を確認しています。
ケース1)大量のPHPファイルがバックドアにされる
WordPressを構成する多数のPHPファイルや、アクセス制御に使用される
`.htaccess` などが、一斉に書き換えられるケースです。
↑改竄されたファイルの例
正規のプログラムに不正なコードを混入させることで、攻撃者が外部から命令を送ったり、別の不正ファイルを生成したりできる状態にされます。
さらに、一部のファイルだけを削除しても、残されたバックドアから再び不正ファイルが生成されることがあります。
実は直接サイトにアクセスすると問題なく表示されるケースが殆どで被害に気付きません(後述)
ケース2)トップページのindex.phpだけが改竄される
サイトの入口となる `index.php` が改竄され、ほかのPHPファイルでは実行権限が外されていたケースもありました。
通常のWordPressの処理を妨害し、攻撃者が設置した処理だけを動かすように構成されることがあります。
サイトは何とか表示できるものの、管理画面やプラグインの機能は阻害されます。
ケース3)WEB領域以外に不正プログラムが置かれる
ドキュメントルートの外側や、普段確認しないフォルダー、バックアップ用フォルダーなどに設置されることもあります。
例えばサーバ内で複数サイトを運営している時、たまたま改竄被害を見つけ、不正なファイルを削除しようとしても、ファイルが即復活してしまいます。
WEB領域外に不正プログラム配布の親プログラムがいて、修復作業をさせないようにします。
⇒サイト内の不正ファイルをほぼ一括で同時に削除する必要があります。
※ここまで来ると、このサーバーは諦めるべきですが、サイトのバックアップが無い場合は、一次対処として不正ファイルの全削除作業をすることもあります。
ケース4)WordPressサイトがランサムウェアの被害を受ける
中小企業や個人のサイトでも起きています。
大企業ではないから、WordPressサイトだからランサムウェアとは無関係、というわけではありません。侵入後にどこまで被害が広がるかは、サーバーの構成や権限設定によっても変わります。
以下は起こり得る問題点です。
【問題点1】サイトに直接アクセスしても普通に表示される
実際の改竄で特に発見が難しいのが、アクセス元によって動作を変える不正プログラムです。
サイトオーナーがURLを直接入力したり、ブックマークからアクセスしたりした場合は、何も起きません。見た目も通常どおりです。
ところが、Googleなどの検索結果からアクセスすると、検索エンジン経由であることを示す情報を不正プログラムが判定し、詐欺サイトなどへ転送します。
攻撃者がこのような条件を設定するのは、サイトオーナーや制作会社に発見されにくくするためと考えられます。
「自分のパソコンでは正常に表示される」ことは、サイトが安全である証明にはなりません。
【問題点2】Googleの検索結果が詐欺商品のページに変わる
不正プログラムによる転送だけでなく、検索エンジンに登録される内容が書き換えられることもあります。
自社サイトの検索結果に、身に覚えのない商品名や説明文が表示され、クリックすると詐欺サイトへ転送される状態です。
サイトオーナーから見ると自社サイトは正常なため、検索結果を見た利用者や取引先からの連絡で初めて被害に気づくケースがあります。
この段階になると、サーバー内の復旧だけでは終わりません。
不正なページや検索結果がGoogleに残っている場合は、サイトを正常化したうえで、再クロールやインデックスの修正を進める必要があります。
【問題点3】マルチドメイン環境では全サイトに被害が広がることがある
1つのレンタルサーバーで複数のドメインを運用している場合、被害が1サイトだけで終わらないことがあります。
同じサーバーアカウントの権限で各サイトのファイルにアクセスできる構成では、1つのWordPressから侵入され、同じサーバー内の別サイトまで改竄される可能性があります。
実際に、複数のサイトすべてに不正ファイルが設置された案件がありました。
サイトを1つずつ調べ、不正ファイルを削除しても、作業中に削除済みのファイルが復活します。別のサイトから作業を始めても同じです。
このような場合、どこかに不正ファイル全体を管理・監視する親プログラムが残っている可能性があります。
また、親となる不正プログラム自体が複数設置され、互いに不正ファイルを復元するような構成になっている場合もあります。
そのため、目についたファイルを順番に削除するだけでは解決できません。サーバー内の全サイトと関連フォルダーを調査し、必要に応じて不正プログラムを同時に停止・除去する必要があります。
【問題点4】バックアップがあっても復旧できないことがある
改竄対応では、バックアップが非常に重要です。
しかし、「バックアップがあるから安心」とは限りません。
サイトオーナーが改竄に長期間気づかなかった場合、レンタルサーバーが保存しているバックアップのローテーション期間を超えてしまうことがあります。
例えば、サーバーが過去14日分のバックアップを保存していても、侵入が1カ月前なら、保存されているバックアップがすべて侵入後のものになっている可能性があります。
バックアップそのものに不正プログラムが含まれていれば、そのまま復元することで再び改竄状態に戻ってしまいます。
したがって、復元前にはバックアップの取得日だけでなく、内部のファイルが正常かどうかも検証しなければなりません。
サーバー外のバックアップがない場合の復旧
正常なバックアップがサーバー外に残っていない場合、通常だと復旧はかなり難しくなります。
それでも、すぐにサイト全体を諦めるとは限りません。
WordPress本体のファイルは、同じバージョンの正規ファイルと比較・交換できます。特に `wp-admin` と `wp-includes` は、同じバージョンのWordPress公式ファイルに入れ替える方法があります。
ただし、`wp-content` にはテーマ、プラグイン、画像など、そのサイト固有のデータが含まれています。単純にすべて入れ替えることはできないため、個別の検証が必要です。
データベースについても、不正な管理者、埋め込まれたスクリプト、不審な投稿、改竄された設定などがないかを確認します。
過去の正常なHTMLさえ残っていない場合は、Internet Archiveなどに保存されている過去のページを参照し、文章やページ構成を手作業で復元することもあります。
ただし、アーカイブにはすべてのページや画像が保存されているとは限りません。完全に元の状態を再現できないケースもあります。
改竄対応は「不正ファイルの削除」だけではない
実際の復旧では、被害状況に応じて次のような作業を行います。
- 不正プログラムと改竄ファイルの特定・削除
- サーバー内にある全Webサイトの確認
- ドキュメントルート外を含む関連フォルダーの調査
- バックアップ内部の安全性確認
- 検証環境の構築
- 正常なバックアップからの復元
- WordPress本体と正規配布ファイルの比較
- `wp-admin`、`wp-includes` の正規ファイルへの交換
- テーマとプラグインの検証・更新
- データベース内の不審なデータの確認
- 不審な管理者アカウントの確認
- WordPress、FTP、サーバー管理画面などの認証情報変更
- ファイルやフォルダーの権限確認
- 検索結果や不正転送の確認
- 問題ない事を確認した上で本番環境への反映
- 場合によっては他サーバーへの引っ越し
※レンタルサーバー会社から、サイトへのアクセスを切断されてしまっているケースもあります。
- 復旧後の再発監視
- サーバ外部へのバックアップシステムの適用
- 運用改善の指導
重要なのは、改竄された部分を元に戻すだけでなく、侵入経路と再侵入の仕組みを取り除くことです。
バックドアが1つでも残っていれば、画面が正常に戻った後で再び改竄される可能性があります。
WordPressサイトで今すぐ確認したいこと
WordPressを利用している場合は、少なくとも次の項目を確認してください。
- WordPress本体が修正版へ更新されているか
- テーマとプラグインが最新版になっているか
- 使用していないテーマやプラグインが残っていないか
- ログイン周りのセキュリティプラグインを導入しているか
- 管理者一覧に身に覚えのないアカウントがないか
- WordPressとFTPに長く複雑なパスワードを使用しているか
- 同じパスワードを使い回していないか
- 利用できる場合は二要素認証を設定しているか
- サーバー外にもバックアップを保存しているか
- バックアップから実際に復元できるか確認しているか
- 検索結果からアクセスした場合も正常に表示されるか
- サーバー内に見覚えのないファイルがないか
すでに侵入を受けている可能性がある場合は、アップデートやファイル削除を行う前に、現在のファイル、データベース、アクセスログなどを保全することも重要です。
先に変更してしまうと、侵入経路を調査するための情報が失われる場合があります。
「表示が直った」で終わらせない
WordPressの改竄では、見えている症状が被害のすべてとは限りません。
詐欺サイトへの転送を止めても、別のバックドアが残っていることがあります。不正なPHPファイルを削除しても、ほかのサイトやドキュメントルート外のプログラムから復活することがあります。
また、復旧に使用するバックアップ自体がすでに改竄されていることもあります。
だからこそ、改竄対応では次の3点が重要です。
1. 被害範囲をサーバー全体で確認する
2. 侵入経路とバックドアを取り除く
3. 正常性を確認したバックアップをサーバー外にも保持する
「自分の環境では普通に表示されているから大丈夫」と判断せず、検索経由の表示やサーバー内のファイル、管理者アカウント、バックアップの状態まで確認してください。
早期に発見できれば、それだけ正常なバックアップが残っている可能性も高くなり、復旧に必要な時間と費用を抑えられます。