WordPressサイトがウイルスやマルウェアに感染してしまった場合、適切な対処を行わないとサイトの信頼性低下や検索エンジンからのペナルティを受ける可能性があります。本記事では、感染の兆候から完全復旧までの手順を詳しく解説します。
感染の兆候を見逃さない
まず、自分のサイトが感染しているかどうかを確認しましょう。以下のような症状が見られる場合は要注意です。
サイトの表示速度が急激に低下したり、見覚えのない広告やポップアップが表示されるようになった場合は、マルウェア感染の可能性があります。また、Googleから「このサイトはコンピュータに損害を与える可能性があります」という警告が表示されたり、サイトが突然リダイレクトされるようになった場合も同様です。
管理画面にログインできなくなったり、知らないユーザーアカウントが追加されている場合は、すでに攻撃者がサイトを乗っ取っている可能性が高いでしょう。サーバーのリソース使用量が異常に増加している場合も、バックグラウンドで不正なプロセスが動作している兆候です。
管理画面にアクセスできない場合の緊急対処
ウイルス感染の多くのケースでは、WordPress管理画面へのログインすらできなくなります。この場合でも復旧は可能です。
FTPでメンテナンスモードにする
まず、FTPソフト(FileZillaなど)でサーバーに接続します。FTPアカウント情報は、サーバー契約時のメールやレンタルサーバーのコントロールパネルで確認できます。
サイトのルートディレクトリ(public_htmlやwwwなど、wp-config.phpがある場所)に、「.maintenance」という名前の新しいファイルを作成します。ファイルの中身は以下の1行だけでOKです。
<?php $upgrademode = time(); ?>
このファイルをアップロードするだけで、サイトは「メンテナンス中」と表示され、訪問者はアクセスできなくなります。管理画面も含めてすべてのページがメンテナンスモードになるので、被害の拡大を防げます。
復旧作業が完了したら、この.maintenanceファイルを削除すればサイトは通常通り表示されるようになります。
データベースから管理者パスワードをリセット
管理画面にログインできない場合、phpMyAdminを使ってデータベースから直接パスワードをリセットできます。
サーバーのコントロールパネル(cPanelやプレスクコントロールパネルなど)にログインし、phpMyAdminを開きます。WordPressのデータベースを選択し、wp_usersテーブルを表示してください。
管理者ユーザーの行を見つけて「編集」をクリックします。user_passフィールドを選択し、関数のプルダウンから「MD5」を選択して、新しいパスワードを入力します。保存すれば、そのパスワードでログインできるようになります。
新しい管理者アカウントを作成する
もう一つの方法として、データベースに新しい管理者アカウントを直接追加することもできます。
phpMyAdminでwp_usersテーブルを開き、「挿入」タブをクリックします。以下の情報を入力してください。
- ID:既存のユーザーと重複しない数字(例:999)
- user_login:新しいユーザー名
- user_pass:パスワード(関数でMD5を選択)
- user_email:メールアドレス
- user_registered:現在の日時
- user_status:0
- display_name:表示名
次に、wp_usermetaテーブルを開いて「挿入」タブをクリックし、以下の2行を追加します。
1行目:
- umeta_id:空欄(自動採番)
- user_id:先ほど作成したユーザーのID
- meta_key:wp_capabilities
- meta_value:a:1:{s:13:”administrator”;b:1;}
2行目:
- umeta_id:空欄(自動採番)
- user_id:先ほど作成したユーザーのID
- meta_key:wp_user_level
- meta_value:10
これで新しい管理者アカウントが作成され、ログインできるようになります。
初動対応:被害を最小限に抑える
感染が疑われる場合、まず行うべきは被害の拡大防止です。
上記の方法でサイトへのアクセスを制限したら、次はパスワードの変更です。WordPress管理者アカウント、FTPアカウント、データベースアカウント、サーバーコントロールパネルのパスワードをすべて強力なものに変更してください。この時点で攻撃者のアクセスを遮断することが重要です。
可能であれば、現時点でのサイト全体のバックアップを取得しておきます。これは感染したファイルを含む可能性がありますが、後の解析や復旧作業に役立つことがあります。FTPでファイルを一括ダウンロードしたり、phpMyAdminでデータベースをエクスポートしたりできます。
重要な注意点:ダウンロードしたファイルには悪意のあるコードが含まれている可能性があります。以下の点に注意してください。
- ダウンロードしたファイルをダブルクリックで開かない
- テキストエディタで閲覧する場合も、実行可能な状態にしない
- ウイルス対策ソフトが最新の状態であることを確認する
- 可能であれば、仮想環境や隔離された環境で調査する
- バックアップファイルは「感染ファイル」として扱い、厳重に管理する
安全のため、バックアップは圧縮してパスワードをかけ、誤って開かないようにしておくことをお勧めします。
感染範囲の特定と調査
具体的な駆除作業に入る前に、どこまで感染が広がっているかを確認する必要があります。この作業はサーバー上で行います。
ファイルの更新日時を確認
FTPソフトやサーバーのファイルマネージャーを使用して、最近更新されたファイルを確認します。身に覚えのない日時に更新されているファイルがあれば、それが感染ファイルである可能性が高いでしょう。特にwp-config.php、.htaccess、index.phpなどの重要ファイルは重点的にチェックします。
多くのFTPソフト(FileZillaなど)では、ファイル一覧を更新日時でソートできます。直近1週間〜1ヶ月程度の期間で、不自然に更新されているファイルがないか確認してください。
サーバーのファイルマネージャーで検索
多くのレンタルサーバーには、コントロールパネルにファイルマネージャー機能があり、テキスト検索ができます。cPanelの場合は「ファイルマネージャー」から「検索」機能を使えます。
以下のキーワードでファイル内を検索してみましょう。
base64_decodeeval(gzinflatestr_rot13assert(preg_replace(eオプション付き)
これらが見つかったファイルすべてが悪意のあるものとは限りませんが、正規のWordPressコアファイルや有名なプラグインには通常含まれないため、要注意です。
SSHが使える場合のコマンド
VPS(Virtual Private Server)やSSH接続が可能なサーバーであれば、コマンドラインでより効率的に検索できます。
# 最近7日間に更新されたファイルを検索
find /path/to/wordpress -type f -mtime -7
# 不審な関数を含むファイルを検索
grep -r "base64_decode" /path/to/wordpress/
grep -r "eval(" /path/to/wordpress/
grep -r "gzinflate" /path/to/wordpress/
検索結果が大量に出る場合は、さらに絞り込むために、wp-contentフォルダ内だけを対象にするなど調整してください。
オンラインスキャナーの利用
Wordfence CLI(コマンドラインツール)やSuccuri SiteCheckなどのオンラインスキャナーを使う方法もあります。ただし、これらのツール自体のインストールや使用には注意が必要です。
最も安全なのは、サーバー上でファイルの更新日時を確認し、怪しいファイルをリストアップしておくことです。
WordPress公式ファイルとの比較
より安全で確実な方法として、WordPress公式のクリーンなファイルと比較する方法があります。
wordpress.orgから使用しているバージョンと同じバージョンのWordPressをダウンロードして、別のフォルダに解凍します。FTPソフトの「ディレクトリ比較」機能(FileZillaなら右クリック→「ディレクトリを比較」)を使えば、サーバー上のファイルと公式ファイルの差分を視覚的に確認できます。
違いがあるファイルが赤やオレンジで表示されるので、それらが改ざんされている可能性が高いファイルです。ただし、wp-config.phpや.htaccessは正常でも差分が出るので除外して考えてください。
セキュリティプラグインによるスキャン
管理画面にアクセスできる場合、または新しい管理者アカウントを作成できた場合は、セキュリティプラグインを使う方法が最も安全で簡単です。
Wordfence Securityをインストールして「スキャン」を実行すると、以下をチェックしてくれます。
- WordPressコアファイルの改ざん
- テーマ・プラグインファイルの改ざん
- 不審なファイルの存在
- データベース内の不正なコード
- 知らないユーザーアカウント
スキャン結果で「Critical」や「High」とマークされた項目を重点的に確認します。プラグインが自動で修復してくれる場合もありますが、重要なファイルは念のため手動確認することをお勧めします。
Sucuri Securityも同様に、マルウェアスキャン機能があります。こちらも無料版でサーバー上のスキャンが可能です。
この方法なら、ファイルをローカルにダウンロードすることなく、サーバー上で安全にチェックできます。
データベースの確認
データベース内もチェックが必要です。phpMyAdminを開いて、以下のテーブルを確認しましょう。
- wp_postsテーブル:投稿内容に不審なコードが挿入されていないか
- wp_optionsテーブル:設定値が改ざんされていないか
- wp_usersテーブル:知らないユーザーが追加されていないか
phpMyAdminの検索機能を使って、<scriptや<iframe、evalなどのキーワードで検索してみてください。見つかった場合は、該当箇所をメモしておきます。
駆除作業の実施
感染範囲が特定できたら、実際の駆除作業に移ります。ここからは感染元の調査が完了しているので、思い切って駆除していきます。
WordPressコアファイルの上書き
管理画面にアクセスできなくても、FTPを使えばWordPressコアファイルの上書きができます。
wordpress.orgから最新版のWordPressをダウンロードして解凍します。FTPソフトで、以下のファイルとフォルダを上書きアップロードしてください。
- wp-adminフォルダ(全体)
- wp-includesフォルダ(全体)
- ルートディレクトリのすべての.phpファイル(wp-config.phpとwp-content以外)
wp-config.phpは既存の設定が含まれているので上書きしないように注意してください。この方法で、コアファイルに含まれるマルウェアは除去できます。
テーマとプラグインのクリーニング
wp-content/pluginsフォルダ内の各プラグインを確認します。使用していないプラグインはFTPで完全に削除してください。使用中のプラグインで感染が疑われる場合は、以下の手順で対処します。
- FTPでプラグインフォルダごと削除
- wordpress.orgやプラグイン公式サイトから最新版をダウンロード
- FTPで再アップロード
カスタマイズしたプラグインの場合は慎重な対応が必要です。バックアップが感染前のものであることを確認した上で、カスタマイズ部分のみを抽出して適用してください。
テーマも同様に、wp-content/themesフォルダから使用していないものは削除します。使用中のテーマについては、公式配布版と比較して不審なコードが追加されていないか確認しましょう。特に、functions.php、header.php、footer.phpは改ざんされやすいファイルです。
子テーマを使用している場合、親テーマは公式版で上書きし、子テーマは手動でチェックして不審なコードを削除します。
アップロードフォルダの確認
wp-content/uploadsフォルダに、画像ファイル以外の.phpファイルが紛れ込んでいないか確認してください。通常、このフォルダには実行可能なPHPファイルは存在しません。もし見つかった場合は、それはマルウェアの可能性が高いので削除します。
また、不自然なファイル名(ランダムな英数字の羅列など)の画像ファイルがある場合も要注意です。これらは偽装されたマルウェアかもしれません。
データベースのクリーニング
phpMyAdminを開いて、WordPressのデータベースを選択します。以下のテーブルを重点的にチェックしてください。
wp_postsテーブル:投稿や固定ページの本文に不審なコードが挿入されていないか確認します。特に、<script>タグや<iframe>タグ、base64でエンコードされた長い文字列などは要注意です。SQL検索機能を使って、「eval」「base64」「gzinflate」などのキーワードで検索してみましょう。
wp_optionsテーブル:特にoption_nameが「siteurl」「home」「template」「stylesheet」の値が改ざんされていないか確認します。また、身に覚えのないoption_nameの行があれば、それはマルウェアが追加したものかもしれません。
wp_usersとwp_usermetaテーブル:知らないユーザーアカウントが追加されていないか確認し、見つかった場合は削除します。特に、管理者権限を持つ不審なアカウントは即座に削除してください。
データベースの一括置換が必要な場合は、Search Replace DBなどのスクリプトツールを使用すると便利ですが、使用後は必ずサーバーから削除してください。放置すると新たなセキュリティリスクになります。
セキュリティの強化
駆除が完了したら、再感染を防ぐためのセキュリティ対策を実施します。
WordPressコア、テーマ、プラグインをすべて最新版に更新してください。古いバージョンには既知の脆弱性が存在し、それが攻撃の入口となった可能性があります。使用していないテーマやプラグインは完全に削除しましょう。
ファイルのパーミッション設定を見直します。一般的に、ディレクトリは755、ファイルは644に設定するのが適切です。特にwp-config.phpは400または440に設定して、外部からの読み取りを防ぎます。
セキュリティプラグインの導入も効果的です。Wordfence Security、iThemes Security、All In One WP Securityなどのプラグインを導入すれば、ファイアウォール機能やマルウェアスキャン機能を利用できます。
定期的なメンテナンス
一度駆除しても、適切な管理を怠れば再び感染する可能性があります。
定期的なバックアップを習慣化しましょう。できれば毎日、最低でも週1回はサイト全体のバックアップを取得し、複数の場所に保存してください。UpdraftPlus、BackWPupなどのプラグインを使えば、自動バックアップが可能です。
セキュリティプラグインによる定期スキャンを設定し、異常があればすぐに通知されるようにします。また、WordPressの更新通知が来たら、できるだけ早く適用することを心がけてください。
アクセスログやエラーログを定期的に確認する習慣も大切です。不審なアクセスパターンや、404エラーが大量に発生している場合は、攻撃を受けている可能性があります。
まとめ
WordPressサイトのウイルス感染は誰にでも起こりうる問題ですが、適切な対処と予防策を講じることで、被害を最小限に抑え、再発を防ぐことができます。
感染の兆候を早期に発見し、迅速に初動対応を行うこと、感染範囲を正確に特定してから駆除作業を実施すること、そして駆除後はセキュリティを強化して定期的なメンテナンスを行うことが重要です。
万が一自力での復旧が難しい場合は、WordPressのセキュリティを専門とする業者に依頼することも検討してください。
大切なサイトを守るため、日頃からセキュリティ意識を高く持ちましょう。
