WordPressで構築されたサイトがある日突然「403 Forbidden」に!
どうやら流行りの巡回クラッキングロボで改竄されてしまったようです。
無事に復旧できましたのでその時のメモです。ご参考に!
クラックされた時の状況
- ブラウザで開いた時の画面は403 Forbiddenの状態。トップページも管理画面も。
- サーバにFTPでログインして調べてみると以下のことがわかりました。
public_htmlディレクトリ以下のファイルのタイムスタンプをみる
- トップページのindex.phpのタイムスタンプが(更新していないのに)最近になっている。
- トップページのindex.phpのファイルアクセス権限が600になっている。
- トップページの.htaccessが(更新していないのに)最近になっている。
- 全てのディレクトリの更新時刻が(更新していないのに)最近になっている。
- 全てのディレクトリの下に(そんなもの置いていないのに).htaccessファイルが新規追加されている。
なお上記の状況と異なる場合は、今回とは別のタイプのクラッキングをされていると思われますので以下に記した手順では復旧できません。上記と同じ状況になってしまっている方は、下記の手順で復旧できると思いますので、ダメもとでお試しください。
タイムスタンプが更新されているファイルの一覧を書き出してみる
sshでサーバにログインし、以下のコマンドで一覧を出力しましょう。
$ cd domain/public_html
$ find . -mtime -1 -type f > ~/cracked_files.txt
ホームディレクトリにcracked_files.txtというファイルが作成され、直近1日以内に更新されたファイルの一覧が出力されます。(クラックされた日が直近1日よりも前の場合は、例えば1週間以内に変更があったファイルを一覧したい場合は上記のオプションのところで、-mtime -7とすれば過去7日以内に変更されたファイルの一覧が出ます。
クラックされた内容
以上の操作により、どうやら下記のようなクラッキングを受けたことがわかりました。
- public_html/index.php が改竄されている。
- public_html以下のすべてのディレクトリの直下に.htaccessファイル(全アクセスDenyの設定)が追加されている。
その他にもあるかもしれませんが上記の2つが403 Forbiddenの原因と思われます。
復旧手順
- なお断っておきますがきちんと最新のバックアップをとっている清く正しい皆さんは素直に最新のバックアップからpublic_html以下のすべてのファイルを差し替えましょう。
- あいにくバックアップが古いのしかなかった(←典型的なダメ情シス)場合は、次の手順で復旧できましたのでやってみましょう。
復旧手順1 - public_html/index.php を戻す
public_html_index.phpの内容は基本的にはWordPressをインストールしたときの状態からずっと変わりません。したがってWordPressの本家サイトから(できるだけ)同じバージョンのインストールファイル一式をダウンロードしてきて、その中のpublic_html/index.phpをコピーして改竄されたindex.phpを上書き更新すればOKです。
ちなみにindex.phpは以下のような内容です。(WordPressのバージョンにより異なるのでお使いのバージョンのものを使ってください)
どうしようもないときは下記をコピペして新たにindex.phpという名称でpublic_htmlフォルダの直下に保存すれば大丈夫です。
<?php
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define( 'WP_USE_THEMES', true );
/** Loads the WordPress Environment and Template */
require __DIR__ . '/wp-blog-header.php';
保存したら権限を修正。
$ chmod 644 public_html/index.php
復旧手順2 - 不要な.htaccessファイルを削除する
サイトの全てのディレクトリに余計な.htaccessファイルが新規追加されていますのでそれらを一括削除します。
以下のコマンドをくれぐれも慎重に実行してください。一文字でも間違えると致命的レベルでサーバをぶっ壊すので自信のない方は絶対に自分の判断ではやらないでください。
$ cd public_html
$ mv .htaccess .htaccess_save (トップページの.htaccessだけは必要なので残しておきます)
$ find . -name .htaccess -type f -mtime -1 -exec rm -f {}¥; (←この呪文の意味は、「ファイル名が「.htaccess」で、かつ過去1日以内に編集されたファイルをすべて探して強制的に削除」です)
$ mv .htaccess_save .htaccess (保存しておいたものを戻す)
以上で復旧できたと思います。
なおパスワードがクラックされていると思われるのでパスワードを変更し、FTPではなくSFTPやSCPのみを用いるとか、IPアドレス制限をするとか、何らかの追加セキュリティ対策が必要ですので、すぐにやってください。
以上、お疲れ様でした。