WordPressで作ったサイトが乗っ取られた!?復旧までの全作業

いくつかのWordPressのサイトの管理を行っているのですが、その中で、放置気味となっているサイトが乗っ取りにあいました。復旧までの全作業を公開していこうと思います。

原因は当然自業自得なわけで、アホだなーと笑いながら見てください。
また同じような被害にあった方への参考になれば幸いです。

 

今回被害にあった環境

OS:VPS上でCentOS release 6.10 (Final)

httpdApache/2.2.15 (Unix)

PHPPHP 5.3.3 (cli) (built: Mar 22 2017 12:27:09)

WordPressバージョン 5.1.1–ja

※PHP5系のサポートは2018年で終わっています。WordPressでもPHP7系が推奨されています。またCentOS6は2020/11/30にメンテナンスアップデートが終了となります。
※環境が古いことは前々から認識しており、今回被害にあったサイト以外は、最新のKUSANAGI環境へ移行済みでした。忙しかったからと言ってメンテナンスをサボっていた罰が当たったのでしょう。

 

乗っ取りに気が付く

気が付いたのは、WordPressから新規ユーザー登録のメールが届いたからです。

え!?何が起きた!?

サーバーがクラックされた?WordPressの管理者アカウントが漏れた?

とりあえずWordPressの管理画面にアクセスするも、海外サイトへ転送されて全くアクセスできません。あらーやられたわー。

あまり使っていないサイトとはいえ乗っ取られたらやっぱり焦ります。

 

原因究明

  1. 全ファイルバックアップ
    VPSへのアクセスは正常でした。サーバー全体が乗っ取られたわけではなさそうだったので少し安心。
    とりあえず現状を保存しよう!ということですべての関連ファイルをローカルへバックアップ

  2. DNSサーバー確認
    サーバーのAレコードに異常なし。

  3. .htaccessの確認
    .htaccessに異常なし。

  4. apacheの設定確認
    confファイル等に異常なし。apacheの再起動しても状況変わらず。

  5. Fiddlerでサイトの詳細を確認
    Fiddlerにてサイトの状況を確認。各種ファイルのリンク(jsやcssなども)先が「setforconfigplease.com」になっているのを確認。これが海外サイトへの転送になっていると推測。

  6. サイト内ファイルとmysqlのデータの確認
    サイト内の全データと、mysqlからエクスポートした全データからsetforconfigplease.comを含むファイルを検索するも見つからず。

  7. 悩む
    setforconfigplease.comをググってもそれらしき情報も出ず。ファイルからもSQLからもそれらしき跡がない。
    少し悩む。そして、落ち着いて順番に少しずつ手探りで確認しようということに。

  8. サイト内のhtmlファイルへアクセス
    WordPressのreadme.htmlなどは普通に読めるので、サーバーやapacheの設定のせいではなくPHP上で何かが起きていると推測。

  9. テーマファイルの無効化・再インストール
    テーマファイルを無効化・再インストールするも変わらず。

  10. プラグインの無効化
    プラグインをすべて無効化してみるも変わらず。

  11. WordPressの再インストール
    新規インストールしたWordPressは正常稼働。しかし障害のあった時のwp-config.phpを戻してMySQLとつなぐと現象再発。
    この時点でほぼDB内に何かトラブルがあると推測。

  12. DB内を確認
    wp_options内のsiteurlとhomeが「https://getmyfreetraffic.com/・・・・」に書き換えられている!!!原因はこいつか!!!
    ということで正しいURLに書き換え。

  13. 復活!
    WordPressへのログイン、サイトの表示が復帰。
    結局ここまで2時間近くかかりました。

 

復旧後行った作業

  1. 今回不正アクセスを行ったであろうWordPressユーザーを削除
  2. 各種パスワード変更
  3. 不正な投稿やファイルなどが残されていないか確認
  4. WordPress設定の再確認

 

今回の被害の原因

結局、書き換えられたのはWordPressアドレスとサイトアドレスだけで、管理者アカウントやコンテンツには全く被害がなく、復旧は思ったより早く済みました。

結局不正なユーザーが作られた原因は、

  • 設定がおかしかった
    「メンバーシップ」が「だれでもユーザー登録ができるようにする」
    「新規ユーザーのデフォルト権限グループ」が「管理者」
    となっていた。
  • アカウント情報が漏れた
  • PHPのバージョンが古い

だと思います。
WordPressの「メンバーシップ」と「デフォルト権限グループ」は、標準でこの設定にはなっていないのですし、自分が設定した覚えもないので、現時点でなぜ不正ユーザー登録がされたのか分かっていません。

 

まとめ

WordPressの設定で 「メンバーシップ」が「だれでもユーザー登録ができるようにする」「新規ユーザーのデフォルト権限グループ」が「管理者」となっていると簡単に管理者ユーザーが作れてしまい、乗っ取られます。注意しましょう。

サイトが無条件で転送されてしまうときはwp_optionsのhomeとsiteurlもすぐ確認しよう。

サーバーの更新はちゃんとやろう。

 

ということでいい教訓となりました。