長く更新されていないWordPressでは、表側がいつもどおり表示されていても、裏口やバックドアが何年も残されていることがあります。2026年10月、当社がPHPの更新をお引き受けした12サイトでも、テーマ23個から管理者として入れる裏口が見つかりました。さらに、画像フォルダなどには2012〜2014年の日付のバックドアが5つありました。発見につながったのは改ざんの相談ではなく、「バックアップの書き出しが終わらない」という別の不具合です。
この事例を通して、放置されたサイトの内部で起きていたことや、同じサーバーにあるサイトへの影響、運営者自身で確認できる点を解説します。後半では、制作・保守を担当する技術者に向けて確認方法を紹介します。
依頼は「PHPとWordPressの更新」だった
ご依頼いただいたのは、同じレンタルサーバーのアカウントで運用する12サイトの更新です。PHPは7.4から8.3へ、WordPressは4.5〜6.2から最新へ更新し、プラグインも最新にするという内容でした。そのアカウントには、ご依頼の対象に含まれない、使われていない古いWordPressも5つ残っていました。
当社では、本番をすぐに更新するのではなく、全サイトを手元の検証環境(ローカル)に再現し、更新後の全ページを確認したうえで本番に反映しています。今回も、その準備として各サイトのバックアップの書き出しから着手しました。PHPの更新に伴う不具合については、PHPバージョンアップ後のWordPressトラブル10事例にまとめています。ここでは、更新作業の途中で見つかった改ざんに焦点を当てます。
「バックアップが終わらない」の正体は35GBのログ
あるサイトのバックアップを書き出そうとすると、進捗が0%のまま止まってしまいました。「この規模のサイトで、これほど時間がかかるのはおかしい」。その違和感からサーバー内を確認したところ、wp-content に約35GBの debug.logが見つかりました。
debug.log は、WordPressのデバッグ設定(WP_DEBUG)がオンのときに、エラーや警告を記録するファイルです。開発中などに一時的に使うものの、このサイトでは何年もオンのままで、テーマから出る警告が記録され続けていました。
容量が大きいことだけが問題ではありません。この debug.log は、URLさえ分かれば誰でもダウンロードできる状態になっていました。エラーの記録にはサーバーのフォルダ構成なども含まれ、攻撃者がサイトの内部を把握する手がかりになります。また、サーバー上に残されていたバックアップファイル13個も、外から読める場所に置かれていました。これらは、すぐに外部から見えない場所へ移しています。
書き出しに時間がかかっていたサイトは、ほかにもありました。そちらでは、承認待ちのスパムを含め、数十万件のコメントがたまっていたことが原因でした。
テーマ23個に「管理者として入れる裏口」
サイト内の調査を進めると、2つのサイトでテーマの functions.php に不正な処理が見つかりました。対象は使用中のテーマにとどまらず、インストール済みのテーマ合計23個すべてに及んでいました。
不正な処理には、次のような働きがありました。
- 特定のパラメータを付けたURLにアクセスすると、パスワードなしで管理者としてログインした状態にする
- 管理画面が開くたび、同じフォルダ内のほかのテーマに自分を書き写す
- 攻撃者への通知を目的としたメール送信の処理も含まれる
パスワードを変更しても、URLを1つ開けば管理画面に入れてしまう状態だったのです。データベースにも、裏口が作動したことを示す印が残っていました。少なくとも一度は使われた形跡があったということです。
未使用のテーマにまで広がっていた理由は、2つ目の働きである「自分を書き写す」処理にあります。使っていないテーマを残したままにすると、このような裏口の隠れ場所になってしまいます。
2012年の日付のバックドアが5つ
画像用のフォルダ(uploads)とテーマからは、外部から命令を送り込めるバックドアも5つ見つかりました。画像の処理やテンプレートを思わせるファイル名が付けられていました。たとえば「class-image.php」や、拡張子を二重にした「archive.php.php」といった名前で、一見しただけでは正規のファイルと見分けがつきません。
それらのファイルに付いていた日付は2012〜2014年です。日付が書き換えられる場合もあるので断定はできません。ただ、日付のとおりであれば、10年以上だれにも気づかれずに残っていたことになります。セキュリティプラグインの記録にも、ログイン画面への総当たり攻撃(パスワードを次々に試す攻撃)による失敗が大量に残されていました。
どこから侵入されたのかは、特定できていません。一方で、WordPress本体は4.5〜6.2のまま、テーマやプラグインも古い状態でした。これを踏まえると、更新されずに残った部分が多いほど、侵入の入り口になり得る場所も多かったと言えます。
同じサーバーのサイトは「一蓮托生」

今回の12サイトは、すべて同じサーバーのアカウント内で動いていました。この構成では、1つのサイトにバックドアがあると、同じアカウントにあるほかのサイトのファイルも読み書きできてしまいます。各サイトの wp-config.php に記載されたデータベースのパスワードも、その一例です。
不正な処理が実際に見つかったのは、12サイト中2つでした。それでも、残りのサイトに関係がないとは言えません。そこで、全サイトを同じ基準で調査しました。ご依頼の対象外だった古いWordPressも、同じアカウント内にある以上、狙われればほかのサイトに影響が及びます。
改ざん以外に見つかった「放置」の跡
改ざんのほかにも、長期間放置されたサイトに特有の問題が見つかっています。
| 見つかったこと | 影響 |
|---|---|
| 1サイトでコメントが約590万件に達していた(承認済み380万・ゴミ箱143万・承認待ち53万・スパム17万) | 上限3GBのデータベースが4.98GBに。コメントを空にすると2.34GBになった。別のサイトではゴミ箱だけで52万件 |
| 古いSEOプラグイン(All in One SEO の2.x)が実質的に機能していなかった | 記事ごとに設定したタイトルや説明文が、何年もページへ出力されていなかった。最新版へ移行して有効に |
| WordPressの版を古い状態に固定するプラグインが入っていた | 5.4.2で固定されており、更新画面に新しい版が表示されなかった |
| 2014〜2018年頃に使われた高速化プラグインの残骸 | 本番で本体を更新した直後に、1サイトが真っ白になった(中身0バイト)。手元の検証では設定ファイルが書き出しに含まれておらず、再現しなかった |
| 配布が終了した古いプラグイン | PHP 8で削除された書き方が残っており、そのままでは動作が止まる |
スパムコメントの蓄積は容量を圧迫するだけでなく、バックアップや移転のたびに時間を取られる原因にもなります。また、SEOプラグインが機能していなかったことは改ざんとは別の問題ですが、「設定したはずのものが効いていない」という点で、放置によって生じたもう1つの代償でした。
どうやって片付けたか
見つかった裏口とバックドアには、次の順序で対応しました。
- 使用中のテーマ(ほかのテーマから参照されているものも含む)は、functions.php の不正な部分だけを除去して置き換え
- 未使用の感染テーマ20個とバックドア5つを、外部から開けない隔離用フォルダへ移動
- 手元に再現した12サイトの wp-content 内にあるPHPファイル約8.6万個を、不正な処理の特徴に基づいて走査し、ほかにないことを確認
- 本番環境のうち手元に写していない部分についても、FTPで走査して確認
- 更新した12サイトの表側の全URL約1万を確認し、エラーを0にしたうえで本番へ反映(修正したファイルは146個)
続いて必要になるのが、サーバー・FTP・データベース・WordPress管理者のパスワードと、ログインの鍵(salt)の変更です。裏口からデータベースのパスワードを読まれた可能性もあるため、ファイルの片付けだけで対応が完了するわけではありません。今回も、ファイルへの対処に続く作業として、お客様と変更を進めます。
運営者が自分で確かめられること
以下の点は、運営者ご自身でも確かめられます。1つでも該当する場合は、サイト全体を一度調べることをおすすめします。
- WordPress本体・プラグイン・テーマ・PHPの版を、何年も古い状態のままにしていないか
- 使わなくなったテーマやプラグインが、大量に残っていないか
- 管理画面の「ユーザー」に、心当たりのない管理者が登録されていないか
- コメントのゴミ箱・スパム・承認待ちに、何万件もたまっていないか
- サーバーの wp-content 内に、容量の大きな debug.log がないか
- バックアップファイル(.wpress・.zip・.sql など)を、サーバーに置いたままにしていないか
- 同じサーバーのアカウント内に、使われていない古いWordPressが残っていないか
同じサーバーで複数のサイトを運用している場合は、特に注意が必要です。古いサイトが1つあるだけで、全体の弱点になります。使っていないサイトは、内容を控えてから削除するのが安全です。
ここまでのまとめ
- 「バックアップが終わらない」「PHPの更新でエラー」といった別の不具合を調べる過程で、改ざんが見つかることがある
- テーマ23個で見つかった裏口は、自分を書き写すことで未使用のテーマにも広がっていた
- 画像フォルダなどに、2012〜2014年の日付のバックドアが残されていた
- 同じアカウント内のサイトは、1つのバックドアによってまとめて危険にさらされる
- debug.log やバックアップファイルを置いたままにすると、情報漏えいの原因になる
- ファイルを片付けたあとは、パスワードと salt の変更まで対応する
ここからは制作・保守を担当する技術者に向けて、裏口の探し方と、更新前に確認しておきたい要点を紹介します。
技術者向け:古いサイトで裏口を見つける
すべてのテーマの functions.php を見る
今回見つかった裏口では、パスワードの確認をせずにログイン状態を作るために、WordPressの wp_set_auth_cookie が呼ばれていました。テーマ内でこの関数を呼ぶ正当な理由はほとんどありません。未使用のテーマも対象に含めて検索すると、見つけやすくなります。
|
1 2 3 |
grep -rl "wp_set_auth_cookie" wp-content/themes/ grep -rlE "eval\(|gzinflate\(|create_function\(" wp-content/themes/ wp-content/uploads/ |
2行目に挙げた関数は、正規のプラグインやテーマでも使われることがあります。見つかった場合は、処理の中身を確認して判断してください。多数のファイルがヒットする場合は、同じ処理がテーマ間で書き写されている可能性があります。
uploads の PHP と二重拡張子を探す
uploads は画像などの保存先なので、本来PHPファイルが置かれることはほとんどありません。テーマ内についても、拡張子が二重になったファイルを探します。
|
1 2 3 |
find wp-content/uploads -type f -name "*.php" find wp-content -type f -name "*.php.php" |
ファイルの日付は、書き換えられる場合があります。「最近変更されたファイル」だけに絞って探すと、今回のように古い日付が付いたバックドアを見落としてしまいます。
debug.log とコメントの量を確かめる
debug.log の既定の書き込み先は wp-content/debug.log で、外部から読める場合があります。デバッグを行う必要があれば、wp-config.php で公開フォルダの外を書き込み先に指定し、作業後はオフに戻します。
|
1 2 3 4 |
define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', '/home/ユーザー名/logs/wp-debug.log' ); // 公開フォルダの外 define( 'WP_DEBUG_DISPLAY', false ); |
コメントは状態別に件数を集計すると、スパムやゴミ箱にどのくらいたまっているかを把握できます(テーブルの接頭辞 wp_ は、対象のサイトに合わせて読み替えてください)。
|
1 2 |
SELECT comment_approved, COUNT(*) FROM wp_comments GROUP BY comment_approved; |
技術者向け:古いサイトの更新前に確かめること
今回の作業から、本番への反映前に確認しておくべきだと分かった点を挙げます。
- 更新画面に新しい版が表示されない場合は、版を固定するプラグイン(WP Downgrade など)が入っていないかを確認する
- wp-config.php の WP_CACHE と wp-content/advanced-cache.php が、現在利用しているキャッシュの仕組みに合っているかを確認する。古い高速化プラグインの残骸によって、本体更新後に真っ白になることがある
- 手元の検証環境では、wp-config.php が書き出しに含まれないことが多い。本番にだけ存在する設定は、別途控えて確認する
- 同じアカウント内では、PHPの切り替えが全サイトに及ぶことがある。ご依頼の対象外のサイトも含めて影響を確認する
- 古いSEOプラグインでは、更新の際に設定を引き継げない場合がある。タイトルと説明文が更新前と同じかどうかを確認する
PHP 8で動作が止まる書き方の修正方法は、PHP 7.4から8へのバージョンアップで何が起きる?で解説しています。
よくある質問
サイトが普通に表示されていれば、改ざんされていないと考えてよいですか?
いいえ。今回見つかった裏口やバックドアも、表側の表示には何も影響していませんでした。見た目に問題がなくても、管理画面へ入るための裏口が残されていることがあります。
使っていないテーマは削除したほうがよいですか?
はい。今回の裏口には、未使用のテーマにも自分を書き写す働きがありました。残しておくのは、WordPressの標準テーマ1つと使用中のテーマ(子テーマがある場合は親テーマも)だけにすることをおすすめします。
同じサーバーにある別のサイトも調べる必要がありますか?
同じアカウント内で動いている場合は、ほかのサイトも調べることをおすすめします。1つのサイトにあるバックドアを通じて、別のサイトのファイルや設定も読み書きできてしまうためです。
侵入経路は分かりましたか?
今回については、特定には至っていません。そのため、本体・プラグイン・テーマを最新にし、不要なテーマを片付けたうえで、パスワードと salt の変更を進めています。入り口になり得る場所をまとめて塞ぐための対応です。
古いWordPressの更新・点検はご相談ください
WordPressを何年も更新していない、同じサーバーで複数のサイトを運用している、PHPの更新を求められたものの何から始めればよいか分からない。そのような場合は、当社へご相談ください。状況をお聞きして、点検・更新・改ざん調査の範囲と費用を無料でお見積りします。必要な作業量はサイトの数や放置されていた期間によって異なるため、着手前にご提示します。
ログイン情報をお預かりする前でも、URL、ご利用中のサーバー会社、サイトの数をお知らせいただければ、進め方をご案内できます。
更新を担当する方が決まっていない場合は、当社の保守サポート(月額3,800円から)に、更新と定期的な点検をお任せいただけます。削除したマルウェアが戻ってしまった別の事例については、消しても戻るWordPressのマルウェアで紹介しています。
更新履歴
- 2026年10月28日:公開(2026年10月に当社が対応した事例をもとに作成)