前回までで、入られたことが分かり、仕掛けられたものも見つかったとしましょう。
ここからが、いちばん判断の要るところです。
戻すのか、取り除くのか。
そして、どこまでやれば終わりなのか。

作業の前に、2つ
1. 公開を止めるかどうか
止めるべき場合があります。
・訪問者が別のサイトに飛ばされている
・迷惑メールの送信元になっている
・ブラウザや検索エンジンが警告を出している
・顧客の情報を入力するページがある 他人に被害が及んでいる場合は、止めてください。
サーバーの管理画面から、一時的に非公開にする設定があります。あるいは、工事中のページに差し替える方法もあります。
売上や問い合わせが止まるのは痛いですが、被害を広げるほうが痛いです。
2. いまの状態を、まるごと控える
作業を始める前に、必ずやってください。
ファイル全部と、データベース全部。 感染した状態のまま、コピーを取ります。
理由は3つあります。
作業を失敗したときに、戻せます。
あとで経路を調べる手がかりになります。
そして、消してから「あれを見ておけばよかった」となることが、よくあります。
この控えは、絶対に公開領域に置かないでください。 手元のパソコンに落として、分かるように名前を付けて保管します。
2つの道
復旧のやり方は、大きく2つです。
A. バックアップから戻す
きれいな時点まで、まるごと巻き戻す
B. いまの状態から取り除く
仕掛けられたものだけを消していく どちらが正しいという話ではありません。 状況によります。
バックアップから戻せる条件
3つそろって、初めて選べます。
いつ入られたかが、だいたい分かる。
それより前のバックアップがある。
そこから今までの更新が、手作業で戻せる量。
1つでも欠けると、この道は選べません。
取り除くほうを選ぶ場合
いつから入られていたか分からない。
バックアップがない、または古すぎる。
戻すと、失う投稿や注文が多すぎる。
この場合は、いまの状態から取り除いていくことになります。
バックアップから戻す
いちばん大きな落とし穴
そのバックアップが、すでに感染しているかもしれません。
仕掛けられたのが1か月前で、バックアップが2週間前のものなら、戻しても感染したままです。
そして、戻したことで安心してしまいます。 ここがいちばん危ない。
いつから入られていたか
手がかりになるのは、こういうところです。
・不審なファイルの作成日時
・知らないユーザーの登録日時
・サーバーのアクセスログ
・検索結果に知らないページが出始めた時期
・訪問者から指摘があった時期 いちばん古い痕跡より、さらに前まで戻ってください。
日時は書き換えられることがあるので、余裕を持たせます。
戻したあと、必ずやること
戻すと、WordPress本体もプラグインも、その時点の古いバージョンになります。
つまり、入られた原因が古い版の弱点だった場合、その弱点も一緒に戻ってきます。
戻したら、すぐに全部更新してください。 本体、プラグイン、テーマ。
更新する前に公開しないでください。 戻した瞬間が、いちばん無防備です。
戻したあとも、確認する
前回書いた確認を、もう一度やってください。
本体ファイルの照合、ユーザー一覧、アップロード用フォルダの中身。
「戻したから大丈夫」とは考えないでください。
いまの状態から取り除く
手順があります。順番どおりにやってください。

1. WordPress本体を上書きする
本体のファイルは、公式のものに入れ替えます。
コマンドが使えるなら、これだけです。
wp core download --force いまと同じバージョンを、上書きでダウンロードします。
コマンドが使えない場合は、公式サイトから同じバージョンを落として、`wp-admin` と `wp-includes` を丸ごと入れ替えます。
この2つのフォルダは、いったん削除してから置き直してください。 上書きだけだと、余計なファイルが残ります。
`wp-content` と `wp-config.php` は消さないでください。 ここには自分のデータが入っています。
2. プラグインとテーマは、削除して入れ直す
更新ではなく、削除です。
更新すると、フォルダの中に置かれた余計なファイルが残ることがあります。
1. いま何が入っているかを控える
2. 全部いったん削除する
3. 公式から入れ直す そして、ここが大事です。
使っていないものは、戻さないでください。 これを機に整理します。
配布が終わっているものも、戻さないでください。 更新されないものは、弱点が直りません。
3. アップロード用のフォルダを調べる
ここは削除できません。 画像やPDFが入っているので。
代わりに、プログラムのファイルがないかを確認して、あれば消します。
find wp-content/uploads -name "*.php" ここに出てきたものは、消して問題ありません。 正当な理由でここにPHPが置かれることは、まずありません。
4. wp-config.php を目で確認する
このファイルは、自動で直せません。 中身を自分で読んでください。
ファイルの最初と最後。 そして、末尾に大量の空行がないか。
心当たりのない記述があれば、消します。
5. .htaccess を作り直す
いったん別名にして、退避させます。
そのうえで、管理画面の「設定」→「パーマリンク」を開いて、何も変えずに「変更を保存」を押してください。
WordPressが、標準の内容で作り直します。
退避したファイルの中身は、あとで確認してください。 自分で足していた設定があれば、書き戻します。
6. データベースを確認する
前回の内容と重なりますが、もう一度。
サイトのアドレス。 「設定」→「一般」の2つのURL。
ユーザーの一覧。 知らない管理者。
投稿と固定ページ。 下書きとゴミ箱も含めて。
3つ目の道:作り直す
正直に書きます。
取り除く作業は、確実ではありません。
1つ残っていれば、また戻ってこられます。そして、全部消せたと確信する方法がありません。
だから、作り直すほうが早いことがあります
新しく WordPress を入れて、必要なものだけを移す。
移す :投稿・固定ページ・画像(中身を確認したもの)
移さない:プラグイン・テーマのファイル
(同じものを公式から入れ直す)
移さない:正体の分からないファイル 投稿の書き出しと読み込みは、WordPressの標準機能でできます。
時間はかかりますが、いちばん確実です。
こういう場合は、作り直しを勧めます
取り除いても、また出てくる。
どこに何があるか、把握できていない。
長いあいだ放置していたサイトで、中身が分からない。
取り除いたあと、必ずやること
ここを飛ばすと、また入られます。
1. 関係するパスワードを、全部変える
・WordPress の全ユーザー
・サーバーの管理画面
・FTP / SFTP
・データベース
・メールアカウント
・ドメイン管理の画面 データベースのパスワードを変えたら、`wp-config.php` の記述も直してください。 忘れるとサイトが動かなくなります。
2. ログイン状態を、全部切る
第2回で書いた、認証用ユニークキーの書き換えです。
`wp-config.php` の8行を、新しい値に入れ替えます。
取り除く作業のあとに、もう一度やってください。 作業中に相手が入っていた可能性があります。
3. ユーザーを棚卸しする
管理者は、本当に必要な人だけにしてください。
使っていないアカウント、退職した人のアカウント、テスト用に作ったもの。この機会に消します。
4. 検索エンジンに再審査を依頼する
警告が出ていた場合は、これが要ります。
Google Search Console の「セキュリティの問題」から、修正を報告して、審査をリクエストします。
直す前に申請しないでください。 通らないうえに、次の審査までさらに時間がかかります。
結果が出るまで、数日かかることがあります。
5. しばらく監視する
終わったつもりでも、また出てくることがあります。
数週間は、定期的に確認してください。
・ユーザーが増えていないか
・本体ファイルの照合が通るか
・検索結果に知らないページが出ていないか
・ログイン履歴に不審なものがないか 変更を通知してくれるプラグインを入れておくと、気づきやすくなります。
また出てきたら
取り除いたのに、再発した。
この場合、考えられることが3つあります。
取り残しがある
いちばん多いのは、これです。 見ていない場所に、まだ残っている。
入られた経路が、まだ空いている
弱点が直っていないので、また入られています。
古いプラグイン、弱いパスワード、変えていない認証情報。取り除いても、入口が開いていれば同じです。
別の場所から来ている
同じサーバーに複数のサイトを置いている場合、そちらから移ってくることがあります。
1つだけ直しても、隣が感染していれば戻ってきます。
同じサーバーの全サイトを確認してください。
自分でやらない判断
この回は、とくに書いておきます。
2回やっても再発する。 経路が分かっていない状態です。
顧客の情報を預かっている。 個人情報が漏れた可能性がある場合、報告の義務が生じることがあります。
決済を扱っている。
作業の途中で、サイトが動かなくなった。
専門の業者に頼むと費用はかかりますが、被害が広がるほうが高くつきます。
まとめ
- 作業の前に、公開を止めるか判断する。他人に被害が及んでいるなら止める
- 感染したままの状態を、まるごと控える。 手元に落として保管
- 道は2つ。バックアップから戻すか、いまの状態から取り除くか
- 戻せる条件は3つ。時期が分かる/それ以前のバックアップがある/更新を戻せる量
- そのバックアップが感染している可能性を、必ず疑う
- 戻すと古い版に戻る=弱点も戻る。 公開前に全部更新する
- 取り除く場合、本体は `wp core download –force` で上書き
- プラグインとテーマは、更新ではなく削除して入れ直す
- 使っていないもの、配布が終わったものは戻さない
- `.htaccess` は退避して、パーマリンクの保存で作り直す
- 3つ目の道は「作り直す」。 時間はかかるが、いちばん確実
- あとで必ず、パスワード全変更/ログイン状態を切る/ユーザー棚卸し/再審査依頼
- 数週間は監視する
- 再発したら、取り残し/経路が空いている/別のサイトからの3つを疑う
取り除く作業には、「終わった」と確信できる瞬間がありません。
だから、監視を続けることまでが復旧です。
次回はシリーズ最終回です。これからの守り方を書きます。ただし、事業者側が破られたら、利用者側の対策では防げません。 そこを踏まえたうえで、何を優先するかという話になります。

