クイックノート

ちょっとした発見・アイデアから知識の発掘を

WordPress のサイトが別のサイトに飛ばされるハッキングを受けた時に自力復旧でやったこと

年明が明けて間も無く、
WordPressで運営している自分のサイトにアクセスすると、
「ロボットでない場合は許可をクリックします」
と、通知許可を要求してくる
謎のサイトにリダイレクトされるようになりました。

アクセスのほとんどないサイトなので、
狙われることもないだろうと油断していましたが、
まんまとやられました。

とりあえず、ハッキングされたサイトへのアクセスを遮断して、
他に迷惑のかからないようにしたところで、
自力復旧に取り掛かりました。

ハッキングされないに越したことはないですが、
また同じようなことがあった時に役立つように、
対処した方法をまとめておきます。

アクセスの遮断

アクセスがほとんどないサイトではありますが、
アクセス頂いたユーザーが不正なページに飛ばされるのを避けるため、
真っ先に行ったのがサイトへのアクセスの遮断です。

.htaccess」ファイルを編集して、
サイトへのアクセスを、
復旧中の仮ページにリダイレクトしました。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{http_host} ^[ハックされたドメイン名]
RewriteRule ^(.*) [仮ページのURL] [R=301,L]
</IfModule>

復旧が終わったら内容を元に戻すことになるので、
バックアップを忘れないようにしておきます。

ただし、ドメイン名でリダイレクトを設定しているので、
IPアドレス直打ちでアクセスすることはできる状態です。
完全な遮断ではないことに注意が必要ではありますが、
逆に、IPアドレスでアクセスすれば復旧状況をリアルタイムで確認できる
苦肉の策でもあります。

リダイレクト先を調べる

どこにリダイレクトされているか分かれば、
復旧すべき箇所を探す手がかりになります。

とはいえ、あっという間に複数のサイトを経由して、
リダイレクトされてしまうので、
自分のサイトから飛んだのはどこのサイトかが追いづらくなります。

そこで便利なのが、ブラウザの開発者ツールです。
ここでは、Chromeを使ってリダイレクトを辿ることにします。

Chrome上で、Ctrl+Shift+c(MacはCommand+Shift+c)を入力すると、
開発者ツールが開きます。

続いて「Network」タブを開き、
「Preserve log」にチェックを入れます。
また、左端の丸印が赤丸になっていることを確認します。 これで、どのようなコンテンツを
どこのサイトから取ってくるかが記録されます。

f:id:u874072e:20200108151951p:plain
開発者ツール

このままハッキングされたサイトにアクセスすれば、
開発者ツール上に、読み込まれたコンテンツ一覧が表示され、
それぞれのコンテンツをクリックすれば、
そのコンテンツがどこから読み込まれたかがわかります。

例えば、google analyticsスクリプトファイルは下のように表示されます。

f:id:u874072e:20200108152631p:plain:h300
ヘッダ情報

Request URLが読み込んだサイトを表していて、
基本的には、自分のサイトそのものですが、
上の例のように自分で読み込むようにしたサイトも含まれます。

ここのURLに見覚えがないものがないかを探します。
自分の場合は、statistic.admarketlocation.comというサイトに、
リダイレクトされていることが分かりました。

リダイレクトの原因を探す

リダイレクト先がわかったので、
これを手がかりとして、
どこにリダイレクトが埋め込まれているかを探していきます。

ファイル内を全探索

ファイルの中身が書き換えられている可能性を考えて、
ワードプレスフォルダ内の全ファイルの中から、
リダイレクト先の文字列が含まれていないかを検索します。

この際に便利なのは、grepコマンドでしょう。

grep [検索文字列] -r [フォルダ名]

フォルダの階層を再帰的に探索してくれます。

私の場合は、ファイルにリダイレクトは埋め込まれていなかったため、
この操作では何も見つかりませんでした。

データベースを検索

WordPressは記事や設定値をデータベースで管理しているので、
データベースの中も探索する必要があります。

私の環境では、mySQLを用いているので、

mysql -u [ユーザー名] -p

でデータベースにログイン後、

use [WordPressのデータベース名];

でデータベースの操作を開始します。

wp_optionsの検索

まずは、様々な設定値が管理されているwp_optionsを検索してみます。

select * from wp_options where option_value
  like "%リダイレクト先%";

like検索で部分一致検索を行い、
リダイレクト先のURLが含まれていないかを確認します。

すると、

f:id:u874072e:20200108155804p:plain
wp_optioinsの検索結果

見つかりました。
siteurlhomeが別のサイトのURLに書き換えられています。

早速直しておきましょう。

update wp_optoins set option_value="[正しいURL]" 
  where option_name="siteurl" or option_name="home";

wp_postsの検索

次に、記事の中に埋め込まれている可能性を考えます。
wp_optiionsの場合と同様に、

select * from wp_posts where post_content
  like "%リダイレクト先%";

で、記事の中身に検索をかけると、

f:id:u874072e:20200108160404p:plain
wp_postsの検索結果

wp-simple-plugin.phpというタイトルで、
リンク先のアドレスが記入された記事が見つかりました。

これらの記事は勝手に作られたものなので、
全部削除することにします。

delete from wp_posts where post_title="wp-simple-plugin.php";

とりあえず、これでリダイレクト自体は解消されました。
管理画面も復活です。

ウイルスチェックする

ハックされたということは、
バックドアが仕掛けられている可能性を考える必要があります。

復活した管理画面から、
セキュリティ用のプラグインを導入して
スキャンをかけるのが手っ取り早そうです。
ついでに、再発の防止にもなるかもしれません。

今回は、「Wordfence」というプラグインをインストールしました。
プラグインを有効にすると、
管理画面のメニューに「Wordfence」が表示されるので、
「Wordfence」→「Scan」と移動して、
「START NEW SCAN」をクリックします。

f:id:u874072e:20200108163519p:plain
スキャン開始

スキャンが終了するまで暫く待つと、
「wp-simple-plugin.php」というどこかで見たファイルが、
悪意のあるファイルとして見つかりました。

f:id:u874072e:20200108162709p:plain
スキャン結果

日付も2020/01ですし、間違いなさそうですね。
ということで、ファイルを削除しておきます。

パスワードを変更する

最後に、WordPressのアカウントのパスワードを変更しておきます。

管理画面のメニューから
「Users」→「Your Profile」を選び、
「Account Management」の「Generate Password」をクリックして、
新しいパスワードを設定した後、
「Update Profile」をクリックします。

f:id:u874072e:20200108164407p:plain
パスワードの変更

まとめ

新年早々からハッキングに遭うとは付いてないですね。

色々試行錯誤しているうちに、
WordPressにより詳しくなれた気がするのはよかったですが、
できれば再発しないようにセキュリティ対策を
普段から実践していかないとですね。

プライバシーポリシー