Webサイトのお助け隊

改ざんされたファイルを特定する方法

65 views
約14分

ある日突然、自分の愛用しているWordPressサイトが、見知らぬ広告だらけになっていたり、Googleの検索結果から「このサイトは乗っ取られている可能性があります」なんて警告が表示されたり…。考えただけでも、血の気が引きますよね。

【実録】WordPressサイトが改ざんされた!犯人(不正ファイル)を見つけ出すための全手法

正直に告白します。私も昔、クライアントのサイトで似たような経験をして、深夜に一人で冷や汗をかきながら対応したことがあります。本当に心臓に悪いです。パニックになって、どこから手をつけていいか分からなくなる、あの感覚。痛いほど分かります。

でも、大丈夫。落ち着いて一つずつ確認していけば、犯人である「改ざんされたファイル」は必ず見つけ出せます。この記事は、単なる対策の羅列ではありません。私が実際に経験した失敗談や、「ぶっちゃけ、ここから見るのが一番早い」という現場の知恵を詰め込んだ、実践的なガイドです。

まずは落ち着いて症状を確認。これって改ざんかも?

「改ざん」と一言で言っても、その症状は様々です。まずは、あなたのサイトで何が起きているのか、客観的に把握しましょう。

サイトの表示がおかしい。見知らぬ画像、テキスト、広告が表示される。特に多いのが、海外のブランド品の偽サイトへのリンクなど。「あれ、こんなバナー貼ったっけ?」と思ったら要注意です。

不審なリダイレクトも典型的な症状です。自分のサイトにアクセスしたはずが、全く関係のないサイトに飛ばされる。これ、本当に焦ります。訪問者からしたら、あなたのサイトが詐欺サイトに見えてしまうわけですから。

管理画面にログインできないというのも、かなり危険なサインです。いつものIDとパスワードが弾かれる。これは、ユーザー情報を書き換えられている可能性があり、すでに家の鍵を取り替えられてしまった状態。

身に覚えのないファイルやユーザー。FTPでサーバーを覗いたら、見たこともないPHPファイルがあったり、WordPressのユーザー一覧に知らない管理者がいたり…。これはもう、家の中に知らない人が住み着いているようなものです。

Googleからの警告。Search Consoleから「マルウェアが検出されました」という通知が届いたり、検索結果に警告が表示されたりする。これが来たら、もう言い逃れできません。

これらの症状が一つでも当てはまったら、残念ながら改ざんの可能性が高いと言えます。でも、ここで慌ててファイルを削除したりするのはNG。まずは証拠を確保し、原因を特定することが最優先です。

手法その1:文明の利器に頼る!セキュリティプラグインでのスキャン

正直、一番手っ取り早くて確実なのが、専門のプラグインを使ってサイト全体をスキャンしてもらう方法です。自力で探すのは、広大な砂漠でたった一本の針を探すようなもの。まずはプロの探偵にお願いしましょう。

いくつか有名なプラグインがありますが、個人的なイチオシは「Wordfence Security」です。

Wordfence Security – Firewall & Malware Scan
無料版でもかなり高機能なスキャンが可能です。WordPressの公式リポジトリにあるファイルと比較して、コアファイルの改ざんを検出してくれるのが非常に強力。私もまず最初にこれを使います。

他にも、「WPドクターマルウェアスキャナー」は日本の企業が開発していて、日本語で分かりやすいと評判です。Sucuri社の「Sucuri Security」も有名ですが、少し設定が専門的なので、初心者の方はまずWordfenceから試すのが良いでしょう。

【本音】
ぶっちゃけ、これらのプラグインを一つ入れておくだけで、大半の改ざんは検知できます。ただし、プラグイン自身が脆弱性の原因になることもあるので、常に最新版にアップデートしておくことが絶対条件です。怠ると、守るはずの盾が、逆にアキレス腱になりますからね。

Wordfenceの使い方(超簡単)

  1. WordPressの管理画面から「プラグイン」→「新規追加」
  2. 検索窓に「Wordfence」と入力
  3. 「今すぐインストール」→「有効化」
  4. 左メニューに「Wordfence」が追加されるので、「Scan」をクリック
  5. 「Start New Scan」ボタンを押して、あとは待つだけ

スキャンには、サイトの規模にもよりますが、だいたい5分から30分くらいかかります。コーヒーでも飲みながら待ちましょう。終わったら、検出された問題が一覧で表示されます。赤色で「Critical」と表示されているものは、最優先で対処が必要です。

手法その2:自らの目で確かめる!FTPでの手動チェック

プラグインのスキャンでも検知できない、巧妙に隠された不正ファイルも存在します。ここからは、自分の目で直接サーバー内を探す、ちょっとだけ上級者向けの「探偵ワーク」です。

更新日時で炙り出す

攻撃者がファイルを改ざんしたり、新しいファイルを設置したりすると、必ず「最終更新日時」が変わります。FTPソフト(FileZillaなど)や、レンタルサーバーのファイルマネージャー機能を使って、ファイルのタイムスタンプをチェックしましょう。

私が以前経験したケースでは、深夜の3時という、ありえない時間にwp-includesディレクトリ内のファイルがいくつか更新されていました。それを見つけた時の、「見つけたぞ…!」という感覚は、今でも忘れられません。

特に注意して見るべきは、以下のファイルやディレクトリです。

  • wp-config.php
  • .htaccess
  • index.php (ルートディレクトリ直下)
  • wp-content/uploads (ここにPHPファイルが置かれていたら100%黒)
  • wp-content/themes/あなたのテーマ名/functions.php

怪しいファイル名を探せ

攻撃者は、一見するとWordPressのシステムファイルに見えるような、巧妙な名前をつけたファイルを設置することがあります。

  • wp-signups.php
  • wp-conflg.php (configのスペルミス!)
  • xmIrpc.php (xmlrpcのlとIを間違えさせている)
  • adminer.php (データベース管理ツールだが、なぜここに?)
  • ランダムな英数字のファイル (例: d8fG3h.php)

これらの「いつものメンバー」に似ているけど、ちょっと違う。そんな違和感が大事です。あれ?と思ったら、すぐに中身を確認しましょう。

禁断のコードリーディング

怪しいファイルを見つけたら、中身を覗いてみましょう。とはいえ、「コードを読めと言われても…」って感じですよね。分かります。全部を理解する必要はありません。ヤバいコードには、特徴的な「顔」があるんです。

eval(base64_decode(...))
gzinflate(base64_decode(...))

このbase64_decodeevalという文字列がセットで使われていたら、ほぼ100%マルウェアです。これは、悪意のあるコードを暗号化して隠している典型的な手口。「俺は悪いやつだぞ」と自己紹介してくれているようなものです。

【余談ですが…】
このbase64_decode自体は、別に悪い関数ではありません。画像をテキストデータに変換したり、ちゃんとした目的で使われることもあります。ただ、evalと組み合わせて、意味不明な長い文字列を復号して実行する、という文脈で使われていたら、もうアウトです。そこだけ覚えておけばOKです。

手法その3:コマンドラインで一気に検索!grepの魔法

もしあなたがSSHでサーバーにログインできる環境なら、grepコマンドを使うと、一瞬で怪しいコードを含むファイルを洗い出せます。これは本当に強力です。

例えば、base64_decodeevalを含むファイルを全部探すなら、こんな感じ。

grep -r "base64_decode" /path/to/wordpress/ | grep "eval"

これで、該当するファイルのパスと、該当する行が一覧で表示されます。まあ、コマンドラインに慣れていない人には、ちょっとハードルが高いかもしれませんが。

私は個人的に、この方法が一番好きです。プラグインのスキャンよりも早いし、自分で条件をカスタマイズできるので。ただ、間違ったコマンドを打つとサーバーに負荷がかかったり、最悪の場合ファイルを壊してしまうこともあるので、慣れないうちは無理に使わなくてもOKです。

手法その4:外部ツールに頼る!VirusTotalとSucuri SiteCheck

自分のサイトのファイルを直接触るのが怖い、という人には、外部のオンラインツールを使う方法もあります。

VirusTotal

VirusTotalは、ファイル単位でマルウェアをチェックできるサービスです。60以上のアンチウイルスエンジンが同時にスキャンしてくれるので、かなり信頼性が高いです。

使い方は簡単。怪しいファイルをFTPでダウンロードして、VirusTotalのサイトにアップロードするだけ。数秒で結果が出ます。ただし、ファイル一つずつしかチェックできないので、大量のファイルを調べるのには向いていません。

Sucuri SiteCheck

Sucuri SiteCheckは、URLを入力するだけで、サイト全体をスキャンしてくれる無料ツールです。マルウェア、ブラックリスト登録、不正リダイレクトなどを検出してくれます。

私も、クライアントのサイトで「なんか変だな」と思った時は、まずこれで確認します。外部から見た時にどう見えているか、という視点でチェックできるのが良いところです。

手法その5:盲点になりがち!データベースの中も忘れずに

ファイルの改ざんばかりに目が行きがちですが、攻撃者はデータベースも狙ってきます。家(ファイル)は綺麗なのに、金庫(データベース)の中身がごっそり盗まれていた、なんてことも。

phpMyAdminなどのツールで、データベースの中を直接確認しましょう。特に見るべきは以下のテーブルです。

wp_postsテーブル: 投稿や固定ページの記事本文(post_content)に、見知らぬ<script>タグや<iframe>タグが埋め込まれていないか確認。これがリダイレクトの原因になることが多いです。

wp_usersテーブル: 身に覚えのない管理者権限(administrator)のユーザーが追加されていないか。もしいたら、乗っ取り犯がいつでも出入りできる合鍵を持っているのと同じです。

wp_optionsテーブル: siteurlhomeの項目が、自分のドメインから書き換えられていないか確認します。

私も以前、クライアントのサイトでwp_postsの全レコードに不正なスクリプトが追記されているのを発見して、血の気が引いたことがあります。一つ一つ手で直すのは不可能なので、バックアップから復元するか、SQLクエリで一括置換する必要がありました。本当に悪夢です。

【実例】こんなケースに遭遇しました

ここで、私が実際に経験した改ざんのケースを一つ紹介します。

あるクライアントのECサイトで、「カートに商品を入れると、全く別のサイトに飛ばされる」という連絡がありました。最初は「プラグインの不具合かな?」と軽く考えていたのですが、Wordfenceでスキャンしたところ、wp-content/themes/使用中のテーマ/footer.phpに不正なJavaScriptが埋め込まれていることが判明。

さらに調べると、wp-content/uploads/2023/05/というディレクトリに、wp-feed.phpという名前のバックドアファイルが設置されていました。uploadsディレクトリにPHPファイルがあること自体が異常です。

原因は、使っていたプラグインの脆弱性でした。そのプラグインは2年以上更新されておらず、既知の脆弱性があったのですが、クライアントは「動いているから」という理由で放置していたんです。

結局、バックドアファイルを削除し、改ざんされたfooter.phpをバックアップから復元し、問題のプラグインを削除して代替プラグインに切り替えることで、事なきを得ました。でも、発見が遅れていたら、顧客情報が流出していた可能性もあります。本当に怖かったです。

改ざんを見つけた後、どうすればいい?

さて、不正なファイルを見つけたとして、その後どうすればいいのか。ここが一番大事です。

ステップ1:バックアップを取る(最優先!)

何をするにしても、まずは現状のバックアップを取りましょう。「え、改ざんされてるのにバックアップ?」と思うかもしれませんが、これは証拠保全のためです。後で「どこが改ざんされていたのか」を調査する際に必要になることがあります。

ステップ2:不正なファイルを隔離または削除

明らかにマルウェアだと分かっているファイルは、削除してOKです。ただし、「これ、元々あったファイルが改ざんされてるのか、それとも新しく追加されたファイルなのか」が分からない場合は、慎重に。

私は、削除する前に一旦別の場所に移動(隔離)してから、サイトが正常に動くか確認するようにしています。もし削除してサイトが壊れたら、元に戻せますからね。

ステップ3:クリーンなバックアップから復元

一番確実なのは、改ざんされる前のクリーンなバックアップから、サイト全体を復元することです。ただし、これには注意点があります。

バックアップの日付が古すぎると、その後に書いた記事や、追加したプラグインの設定なども全部消えてしまいます。なので、定期的にバックアップを取っておくことが本当に大事なんです。

ステップ4:侵入経路を塞ぐ

不正なファイルを削除しただけでは、また同じ手口で侵入されてしまいます。侵入経路を特定し、塞ぐことが必須です。

よくある侵入経路は、以下の通り。

  • 古いプラグインやテーマの脆弱性
  • 弱いパスワード
  • 管理者権限の不正取得
  • FTPやSSHのパスワード漏洩

特に、古いプラグインは本当に危険です。今回の事例でも、それが原因でした。使っていないプラグインは、迷わず削除しましょう。

予防策:二度と同じ目に遭わないために

改ざんの対応が終わったら、次は予防です。同じ轍を踏まないために、以下の対策を必ず実施しましょう。

プラグインとテーマを常に最新に保つ。これが一番大事です。更新通知が来たら、すぐに対応する習慣をつけましょう。

使っていないプラグインは削除する。「いつか使うかも」は禁物です。使っていないプラグインも、脆弱性の入り口になります。

強力なパスワードを使う。「password」とか「123456」とか、論外です。パスワード管理ツール(1PasswordやLastPassなど)を使って、ランダムな文字列を生成しましょう。

定期的にバックアップを取る。これは本当に大事。私は、UpdraftPlusというプラグインを使って、毎日自動でバックアップを取るように設定しています。

セキュリティプラグインを入れておく。Wordfenceなどのセキュリティプラグインは、改ざんの検知だけでなく、予防にも役立ちます。ファイアウォール機能で、不正なアクセスをブロックしてくれます。

完璧なセキュリティは存在しない

ここまで色々な手法を紹介してきましたが、「情報が多すぎて、結局何からやればいいの?」と感じたかもしれません。当然です。

なので、私ならこう動く、という手順を最後に示します。

  1. まずWordfenceをインストールしてスキャン! これで8割方の問題は見つかるはず。まずは専門家に任せるのが一番。
  2. FTPで接続し、更新日時を降順でソート! 最近更新されたファイルで、身に覚えのないものがないかを目視で確認。特にuploadsディレクトリは念入りに。
  3. WordPressのユーザー一覧を確認! 知らない管理者がいたら、即座に権限を変更するか削除。
  4. データベースもチェック! phpMyAdminでwp_postswp_usersを確認。
  5. 侵入経路を特定して塞ぐ! 古いプラグインがないか、パスワードは強固か、再確認。

まずはこの5ステップです。これだけでも、かなりの精度で改ざんの状況を把握できるはずです。

改ざんされたファイルの特定は、本当に骨の折れる作業です。でも、これを乗り越えれば、あなたのサイトはさらに強固になります。今回の経験は、決して無駄にはなりません。

正直に言うと、完璧なセキュリティなんて存在しません。どんなに対策をしても、新しい攻撃手法は次々と生まれてきます。でも、だからこそ、「早期発見・早期対応」が大事なんです。

この記事が、その戦いのための少しでも助けになれば、これほど嬉しいことはありません。


WordPressのセキュリティ、不安に感じていませんか?

「自分のサイトは大丈夫だろうか…」
「専門的なことはよく分からない…」

そんなあなたのWordPressサイトの健康状態を、専門家が無料で診断します。
手遅れになる前に、一度プロの目でチェックしてみませんか?

WordPressセキュリティ診断サイトはこちら

FacebookでシェアTwitterでシェアPinterestでシェア