ハッキングされたWordPressを復旧する方法【2】本体(サイトデータ)を回復させる

WordPress_Eyecatch

WordPressで運営中のサイトが乗っ取り被害を受けてしまいました。

その際、私が復旧/復元のために行った内容を備忘録として記事にまとめました(長くなったので 記事を分けています)。

この記事は「2. 本体(サイトデータ)を回復させる」方法を紹介しています。

WordPressは「本体(サイトデータ)」と「データベース」という2種類のデータで構成されています。

はじめに「本体データ」を復元し(この記事で紹介)、その後で「データベース」の復元(こちらの記事で紹介)を行っていきます。

一言メモ
記事内で「復元用バックアップデータ」と呼んでいるものは、被害を受けた状態の本体データおよびデータベースのバックアップファイル(いわば最新状態のバックアップ)のことを指します。※こちらの記事の「復元用バックアップをダウンロードする」の項目を参照してください

「本体データ」を復元する

WordPressの「本体データ」は、基本的に新しいものを使用しますので、まずは以下のページから当該バージョンを入手します。

・WordPress:過去バージョン
https://ja.wordpress.org/download/releases/

「最新版」のWordPressをいれてしまうと、不具合でサイトが開けなくなる可能性がありますので、必ず「これまで利用していたバージョン(被害を受けたのと同じバージョン)」を選んでください。

例えば ver5.7.8で運用していたサイトがハッキング被害にあったとしたら、同じ「ver5.7.8」をダウンロードします。

一言メモ
日本国内で運営している場合、基本的に日本語版のもので大丈夫だと思います。英語版の過去バージョンダウンロードはこちら
運用していたバージョンの確認方法

「復元用バックアップ」の本体データの中から、wp-includes内にある「version.php」を開きます。

ファイル頭の方の「$wp_version = ‘〇.〇.〇’;」というのが、WordPressのバージョンです。

例えば「$wp_version = ‘5.7.8’;」とあったら「ver 5.7.8」ということになります。

「WordPress 本体データ」をアップロードする

入手したWordPressインストール用ファイル(.zip)を展開し、 FTPアプリを使ってサーバにアップロードします。

一言メモ
サーバ上に 旧データ(被害を受けたもの)が残っている場合は、「復元用バックアップ」がとれていることを確認したうえで すべて削除してください。

WordPressをアップロードする場所(インストール先)は、従来の構成と同じにしてください。

MEMO

WordPressのアップロード先は「1. ROOT直下にインストール」の場合と「2. サブディレクトリ以下にインストール」の場合があります。この記事では 私の環境に合わせて「1. ROOT直下にインストール」の事例を前提に説明を続けますので、環境が異なる場合は 適宜読み替えてください。

「wp-config.php」を復元する

「wp-config.php」とは、WordPressが データベースにアクセスするためのIDやパスワードを記録したファイルです。

サーバ移転時など、通常の復元作業であれば、旧「wp-config.php」を、新規WordPress内に複製してあげればよいのですが、今回はハッキング被害ということもあり「復元用バックアップ」のものをそのまま使用するのは抵抗がありました。※実際に 不正なスクリプトが仕込まれていました・・・

そこで「復元用バックアップ」のwp-config.phpから必要な情報だけを抜き出し、新規に作成した「wp-config.php」に転記することにしました。

「復元用バックアップ」の情報を入手する

「復元用バックアップ」のWordPress本体データより「wp-config.php」を開きます。

「wp-config.php」を開いたら以下の部分を控えます。

  • define(‘DB_NAME’, ‘★★★★★★’); ※データベース名
  • define(‘DB_USER’, ‘★★★★★★’); ※データベースのユーザー名
  • define(‘DB_PASSWORD’, ‘★★★★★★’); ※データベースのパスワード
  • define(‘DB_HOST’, ‘★★★★★★’); ※MySQLのホスト名
  • $table_prefix = ‘★★’; ※テーブルの接頭辞
一言メモ
「復元用バックアップ」のファイルを開かなくても、次の情報を把握していれば そちらを控えておきます。 データベース名、データベースのユーザー名、データベースのパスワード、MySQLのホスト名、テーブルの接頭辞

「wp-config.php」を新規に作成する

あらたに入手したWordPress本体データの「WordPress」フォルダを開きます。

その中からwp-config-sample.phpを複製して、名前を「wp-config.php」に変更します。

一言メモ
wp-config.phpそのものは、新たにダウンロードしたWordPressのファイルには含まれていません。

続けてこの「wp-config.php」をテキストエディタで開き、当該部分(下図 青字部分)を先ほど確認した情報に書き換えます。

書き換えが終わったら「UTF-8(BOMなし)」形式で保存します。

一言メモ
wp-config.phpの内容を修正する際は、メモ帳などではなくテラパッドなどのテキストエディタを使用して「UTF-8(BOMなし)」形式で保存します

FTPでアップする

新規に作成した wp-config.phpを、サーバにアップロードしたWordPress本体データのインストールフォルダにアップします。

アップロードが終わったら、wp-config.phpの属性を「400(読み取り専用)」に変更しておきましょう。

「画像」データを復元する

画像のデータは復元用バックアップのものを「洗浄処理」して利用します。

一言メモ
「洗浄処理」とは、被害を受けたファイルから不正なスクリプト/コードを削除して 正常化することを指します
画像ファイルのある場所

「復元用バックアップ」のWordPress本体データより「wp-content > uploads」フォルダを開きます。

「2015」「2016」など西暦の名前が付いているフォルダが、画像ファイルの保存されているフォルダです(「西暦年フォルダ > 各月フォルダ」で構成されています)。

通常の復元作業であれば、これらのフォルダを新しいWordPressの「uploads」内にコピペしてあげればよいのですが、今回はそうはいきません(変なファイルが含まれている可能性があるため)。

初めに、不審なファイル/フォルダなどを削除(洗浄処理)してから、そのあとで、新WordPress側にデータを移動(複製)します。

一言メモ
「uploads」の中には、他にもプラグイン関係のデータを保存しているファイルなどもあるかと思いますが、そちらは使用しないので無視します

「洗浄処理」を行う

「洗浄処理」・・・といっても特別な裏技があるわけではありません。

画像が保存されているフォルダを1つ1つ開いて 中身を確認し怪しいもの(アップした覚えのないもの)を手動で削除していきます。以下は 私が被害を受けた際に確認できた怪しいファイルの事例です。

ファイルに拡張子が付いていない

拡張子のないファイルが作成されていました。(画像フォルダ内で)拡張子が付いていないファイルは基本的に使えないので、不正ファイルであるか否かに関わらず 削除してしまいましょう。

HTML/php ファイル

基本的に「画像」以外のファイルは疑ってかかりましょう。

一言メモ
確認する際は、エクスプローラで「拡張子」や「隠しファイル」を表示させた状態で確認するようにしましょう。

「画像」ファイルをFTPでアップする

「洗浄処理」が終わったら、画像データ一式をフォルダごとコピペします。

サーバ上にアップロードしたWordPress本体データの「wp-content」フォルダ内に「uploads」というフォルダを作成し、そこに保存します。

従来の「プラグイン」を把握しておく

プラグインは、基本的にすべて新しく入れ直しますので、復元用バックアップの「plugins」フォルダのデータは使用しません。

ただ、これまで使用していたプラグインを把握しておくために、復元用バックアップの「wp-content > plugins」フォルダ内を確認しプラグイン名をメモしておきましょう。

一言メモ
プラグインの個人的な設定値は、多くの場合(本体データ側ではなく)データベース側に保存されています。このため、再度 WordPressを入れて、新たにプラグインをインストールし有効化してあげれば、設定値ごと復活します。

テーマは「子テーマ」のみ流用する

テーマも基本的には新しく入れ直します。

ただし、子テーマを利用していた場合、そちらの設定値(カスタマイズした内容)は引き継がれません。

そこで、親テーマは新規にインストールし直し、子テーマは復元用バックアップの「wp-content > themes」のデータを洗浄処理して再利用します。

「子テーマ」を洗浄処理する

ファイルを開き、怪しいファイルがないか確認します。

「洗浄処理」が終わったらアップロード

「洗浄処理」が終わったら、サーバ上にアップロードしたWordPress本体データの「wp-content > themes」フォルダ内に、子テーマをフォルダごとコピペします。

アップロード後に行うこと

以上で、WordPress本体ファイルの 復元作業は終了です(データベースの方はこの後で作業します)

ひとまずサイトが開けるようになっているはずですので、WordPressのダッシュボードにログインし、以下の設定を行いましょう。

親テーマを入れる

まずは、テーマを新しくインストールします。

プラグインを入れる

ひとまず、サイトの表示に必要な最低限のプラグインをいれます。

「custom-permalinks」などのURL改変系のプラグインを使っている場合、いれないとサイトが正常に表示されないことがあります。

非表示(404NOT FOUND)になる場合は・・・

TOPページ以外が非表示(404NOT FOUND)になってしまう場合は、「.htaccess」が作成されていない可能性があります。

ダッシュボード「設定>パーマリンク設定」で、何も変更せずに「変更を保存」ボタンをクリックします。※これで「.htaccess」が新規に作成されるはず

一言メモ
あらたに「.htaccess」が作成されない場合は、旧データの「.htaccess」を確認&洗浄処理して使用します

まとめ

以上で「2. 本体(サイトデータ)を回復させる」方法の紹介は終了です。

次の記事で「3. データベースを回復させる」方法を紹介していますので、そちらもあわせてお読みください。