ある日、サーバーのサポートチームから「不正アクセスの検知および制限の実施について」というメールが届きました。
よく内容を読んでみると、脆弱性を突かれた攻撃(クラッキング)が実施されたようで、一部のファイルはパーミッションを変更したとのこと。
いい感じに対処してくれたのかな。まあ大丈夫っしょ。
とりあえずWP管理画面ログインしてみよー
と、のんきに構えていたら、、
管理画面に入れない…
本格的に壊されてる…
ということで、ぶっ壊されたブログサイトを復活させたお話をしていきます!
実施した対処(結論)
まずは何をどのようにして復活させたのか、結論から紹介していきます。
- 事象の切り分けと問題のファイルの確認
- ドメイン初期化
- バックアップファイルから復元
- パーマリンク再生成
- 各種パスワード変更
幸い、DB(データベース)は壊れておらず、そこへの不正アクセス検知も無かったので、ファイル群を復元することでサイトを元どおり復活させることができました!
では具体的に、どんな手順で調査・対処していったのかをご紹介していきます。
復活までの奮闘記
Xサーバーよりメール通知
ある日、いきなり上のようなメールが届きました。
ざっくり言うと、「ハッキングされたっぽいからサーバーのセキュリティ設定レベル上げといたのと、汚染されたファイルは誰も実行できないようにしといたわ」ってことでした。
とりあえずブログサイトを見に行くと、web上では正常に表示されていたので、急いで対処する必要はなさそうです。
WordPress画面が死んでた
メールが届いて数日後、いつものようにブログを書こうとするとWPの管理画面が以下のように見れなくなってました。。
おいおい。。。
ということで、Xサーバーの管理画面にログインしてブログのファイルを確認します。
対処しないと、一生ブログを書けなくなってしまいますからね。
見慣れないファイルが確かにある
さきほどの画面ではindex.phpがおかしいとのことでしたが、実際にルートディレクトリに入ってみると、about.phpやsmall.phpなど、本来あるはずのないファイルがありました。
index.phpの中身を確認すると、中身は完全に汚染され、内容が書き換えられていました。
これらのファイルは通知されたメールにも記載されていたものなので、削除すれば問題が解決するのでは?とも考えましたが、ハッキングをナメてはいけません。
バックドア設置の可能性もあるので、問題のあるファイルを完全に除去するか、ゼロから再構築するのが確実です。
ドメイン初期化すれば解決しそうだが…
ドメイン初期化を行えば、そのドメイン配下のファイル群は消去され、完全にクリーンな状態になります。
今回、DBは汚染されていないので、ファイルだけ戻せれば解決です。
しかし、ファイル群をハッキングされる前の状態に戻すのはすごく手間です。
なぜなら一度バックアップを取り、初期化&WPインストールした上で、バックアップから必要なファイルだけをサーバーに戻さなくてはいけないからです。
これにはWPのディレクトリ構成やその機能を完全に把握していないと、どのファイルが必要/不必要という判断がつきません。
とはいえ、調べながらやっていけば必要なファイルを特定して復活できるのではと考えました。
ブログ文章はDBに入っていることは知っていたので、残りは画像ファイルがファイル群にあるだけだと思ったからです。
試しに別ドメインを初期化してやってみる
幸運なことにドメインをもう一つ持っていたので、こちらで初期化&WPインストールし、ブログ文章だけ元のDBに繋いで見ようと思います。
イメージ的にはこんな感じです。
XサーバーのWordPress簡単インストール機能を使うと、DBは新規作成しないといけないので、サーバーにsshして直にWPをインストールします。
wp-config.phpファイルを作成し、元のDBの接続情報を書いていきます。
これでinstall.phpをブラウザで叩けば!
と思ったら「無効なアクセス」と出てしまい、前に進みません。。
簡単インストールしてDBダンプで書き換えてみよう
サーバーに直でWPを入れたのが上手くいかなかったのかと思い、今度はWP簡単インストール機能を使ってWPを入れた上で、新規作成されたDBの内容を元のDBで上書いてしまおうと考えました。
こんなイメージですね。
まず、簡単インストールまでは問題なく完了しました。
次にサーバーにsshで入り、mysqldumpコマンドを実行して、元のDBの中身を取得します。
…mysqldumpコマンドが…実行できない…。
調べてみると、どうやらXserverでは権限の関係からmysqldumpコマンドが使えないみたいです。
そもそもファイルの自動バックアップがあった
万策尽きた感じで色々と調べていたら、XサーバーはデイリーでファイルとDBのバックアップを取っているから、そこから復元できるとのこと。
マジか!と思い、サーバー管理画面から見てみると、確かに日々のバックアップがありました!
最初に届いたメールに攻撃された日のログが載っていたので、それより前のクリーンな地点からバックアップを取得しました。
初期化&ファイル再配置
バックアップファイルはドメインルートディレクトリの userbackup フォルダに格納されるため、ドメイン初期化を行ってもバックアップファイルが消えることはありません。
準備が整ったので、ドメインを初期化します。
ファイルが完全に消えるので、サーバーにsshして userbackupフォルダの中身をコマンドで移動(コピー)させます。
cp -rf userbackupフォルダ/* ドメイン/public_html
このコマンドでフォルダ内の全ファイルが再帰的にコピーされ、コピー先に同じファイルがある場合は強制的に上書きします。
もどった!
コマンド実行が完了したら、WP管理画面を見てみます。
完全に復活して、今までの投稿内容もしっかり残っています!
web側のブログ画面を見てみましょう。
「このWEBスペースにはまだHPがアップロードされていません」
いやいや、ファイルしっかりありますけど!と思い、よく見るとブラウザのアドレスバーが index.htmlとなっています。
WPのページが表示される場合は “.html” の拡張子が出てこないのが正解です。
ということで、FTPでフォルダを確認すると、index.html と index.php がありました。
本来WPではindex.phpが動きますが、webサーバーとしてはindex.htmlの実行を優先するため、「またHPがアップロードされていません」とかふざけたメッセージが出ていたんですね。
index.html を削除すると、正常なブログの画面が出てきました!
まだあと1押し
webページも戻ったので、記事一覧からどれかページを開いてみようとすると、
Oh。。。
でもあと一息です。
がんばります。
調べてみたところ、パーマリンクの問題のようです。
確かに、バックアップのファイル群とdiffコマンドで比較すると、htaccessなどのファイルでまだ差分がありました。
WPではパーマリンクの設定を保存し直すと、自動で再生成してくれるようなので、WP管理画面から操作します。
これで個別の投稿ページにも正常アクセスできるようになりました!!
各種パスワード変更
WPやDBなど、パスワードが既に漏洩している可能性もあるので、各所のパスワードは変更しておきます。
これで終わりです!
疲れた。。。
コメント