今回はWordPressにて起こった改ざん(乗っ取り)事件の一例とその対策のことを書きたいと思います。

最近ではLINEやFacebook、Twitter、SKYPEなどでこのような事件が身の回りでも頻繁に起こっておりますが、ID/パスワードを利用してログインを行うWordPressにも実は同じようなことが起こっており、職業柄、対策を立ててほしいという依頼が後を絶ちません。

乗っ取り対策を依頼される上で気づいた点として、ほとんどのユーザーがID/パスワードの使いまわしを行っていることや、簡素なパスワードを利用している人が半分以上もいるという統計結果に基づき、ランダムでログインアタックを試みて突破されているということです。

WordPressの改ざんは非常に厄介でして、根元からプログラムを改ざんされたことに気づかなければ、何度も何度も突破されてしまいます。そのため、難易度の高い技術や、長期戦に耐えうるための監視が必要とされるため、どうしても高額な修正料金となってしまいます。

弊社では通常目に見えない部分に対し、下記のような対策を行っております。ユーザーの皆様にご理解していただきたきたく、メモにしてみました。

改ざん対策の経緯

常日頃よりお世話になっております企業様のご紹介により、お客様のWordPressサイトが何者かに乗っ取られてサイトが改ざん被害にあったかもしれないので対応可能か?との知らせがあり、対応させていただきました。

対応内容は以下になります。

  • 2016/12/06 22:57  ウェブサイトの改ざんを確認(第1回改ざん時)
  • 2016/12/06 23:24  WordPressのコアファイルの改ざんを修正。(第1回修正時)
  • 2016/12/07 09:00頃  ウェブサイトの正常動作を確認
  • 2016/12/07 11:30頃  ウェブサイトが再度改ざんされているの確認(第2回改ざん時)
  • 2016/12/07 18:00頃  WordPressのコアファイルの改ざんの修正および、テーマファイルのバックドア除去。(第2回修正時)
  • 2016/12/08 10:30頃 ログインアタックが収まったことを確認、以後監視体制を取る

第1回修正時に判明したこと

WordPressのindex.phpをメインに改ざんが行われていました。
症状は、「サイトにアクセスすると全く知らない別のサイトへリダイレクトされる。」と言ったものでした。

  1. .htaccess(書き換え)
  2. index.php(書き換え)
  3. /wp-admin/user/reworld.php(追加)
  4. /wp-includes/pomo/modules.php(追加)
  5. /wp-includes/pomo/search_advance.php(追加)

以上、2つのファイルの内容が変更され、3つのファイルが新規に設置されていることを検出しました。

そこで、2つのファイルの修正および3ファイルの削除を行いサイトが正常に表示されるようになったことを確認しました。

さらに、サーバはXサーバでしたのでWordPressセキュリティに関する設定を確認すると次のようになっていました。

  1. [国外IPアクセス制限設定] ダッシュボード アクセス制限 => OFF
  2. [国外IPアクセス制限設定] XML-RPC API アクセス制限 => ON
  3. [ログイン試行回数制限設定] => OFF
  4. [コメント・トラックバック制限設定] 大量コメント・トラックバック制限 => ON
  5. [コメント・トラックバック制限設定] 国外IPアドレスからのコメント・トラックバック制限 => OFF

なので、管理画面周りに対する制限を強化。

  1. [国外IPアクセス制限設定] ダッシュボード アクセス制限 => ON
  2. [国外IPアクセス制限設定] XML-RPC API アクセス制限 => ON
  3. [ログイン試行回数制限設定] => ON
  4. [コメント・トラックバック制限設定] 大量コメント・トラックバック制限 => ON
  5. [コメント・トラックバック制限設定] 国外IPアドレスからのコメント・トラックバック制限 => OFF

攻撃者の情報についてはアクセスログを確認したが、ログが2日分までの保存になっていたので詳細はよくわからず。

第2回改ざん時

見事にやられてしまいました。
しかし、今度はアクセスログがしっかり残っていましたので内容を確認してみました。

何やら、WordPressテーマの404.phpにPOSTリクエストを投げまくっている様子。
明らかにおかしいので、404.phpファイルの中身を確認しました。
すると…

やられました。

POSTされた内容がevalされるようになっています。

[補足] PHP evalとは…

どうやら、このバックドアを利用して再度改ざんを実行してきたようです。
完全に見落としていました・・・。

バックドア(backdoor)は「裏口」などを意味する英語である。 バックドアは、クラッカーなどと呼ばれる悪意を持ったユーザーが、他人のコンピュータのシステムへの不正侵入に成功した際、次回から容易にアクセスできるようにしたり、あるいは、不正アクセスに気付かれて防御された際のすり抜け道を作ったりする目的で設置される。

バックドアとは – 情報セキュリティ用語 Weblio辞書

第2回修正時

改ざんされたファイルの差し替えおよび修正

基本的には第1回修正時の作業にテーマファイルの修正とIPアドレスによるアクセス拒否設定を加えた感じとなります。

  1. .htaccess(書き換え)
  2. index.php(書き換え)
  3. /wp-includes/pomo/db_lookups.php(追加)
  4. /wp-includes/pomo/hdweb.php(追加)
  5. /wp-includes/pomo/search_advance.php(追加)

小賢しいことに、前回と追加されたファイルが一部異なっています。
こういった変化があると、ブログなどで対処すべきファイルを記載していても無駄になってしまいますね・・・。

wordpress-core-verify-checksums
修正前
修正後
修正後

画像では、wp-admin/install.php で「File doesn’t exist」が出ていますが、これは「本来あるべきファイルが無い」というメッセージなので今回は無視しています。
wp-config-sample.phpは「チェックサムがおかしい」というメッセージが出ていますが、内容を確認したところ特に怪しいコードはありませんでした。ですが、今回の対策では念のために削除しています。

.htaccessの修正

ちなみに、.htaccessは次のような内容に変更されます。
この記述をそのまま削除しても、最低限動作しますがWordPressのパーマリンクを変更している方は、パーマリンクを再設定する必要があります。

tampering-htaccess

evalの検索

WordPress内にevalが無いかも確認します。

eval-search

テーマファイル以外に怪しいものはなさそうです。
(ちなみに、grepの条件を’eval’にするとWordPressコアファイル内でも引っかかります。ですが、WordPressコアファイルについてはチェックサムの確認を行っているので不問とします。)
テーマファイルの404.phpについては直接修正します。
evalの記述を削除すればOKです。

IPアドレスを元に攻撃元のアクセスシャットアウト

アクセスログを元に攻撃者(踏み台かもしれませんが)のネットワークIPを割り出して一括で拒否します。

拒否設定は、.htaccessで行います。
(Xサーバの海外IPアドレス拒否設定とは別枠です。以下の設定は、ウェブサイトそのものへのアクセスを全て拒否しています。)

アクセスログから怪しいものを抜き出して、ネットワーク単位でまとめました。

101.224.0.0/13
171.80.0.0/13
180.152.0.0/13
211.255.128.0/19

IPアドレス検索で割り当てられている地域を出すと、中国・韓国となりました。特に中国は多いです。(上記リストのうち上3つは中国)

以後、ログインアタックはなくなり、監視をしている状態です。

2016/12/12 14:20 追記

改ざんはされなくなりました。
が、現在でもWordPressにログインしようとするアクセスが確認できます。
海外IPアドレスからのアクセスなので、Xサーバの“国外IPアクセス制限設定”ではじくことが出来ています。
ですが、国内IPアドレスからのアクセスは許可されているので、ログインパスワードの変更や2段階認証・画像認証の設定は必要です。(今回の事例では画像認証を追加しています。)

アクセスログは以下のような感じです。

また、攻撃元の国も前回と違いかなり広範囲に散らばっています。
攻撃元IPアドレスを毎回チェックしてアクセス拒否していてはとてもカバーできません。
なので、Xサーバの“国外IPアクセス制限設定”は非常に便利です。

自分で自分の身を守るためには

1、パスワードの使いまわしをしない

パスワードは半角英数字(最低8文字以上)を心がけてください。なるべく使いまわしを行わないように心がけることがポイントです。

もし、覚えきれない場合は、パスワード管理ツールを導入するのも手です。

2、WordPressのセキュリティ対策を行う

WordPress本体・テーマ・プラグインの更新を欠かさないようにしましょう。
(簡単そうに聞こえますが、バージョンアップしたらサイトが崩れてしまった。なんていう事態も起こりえます。作業前には必ずファイル・DBのバックアップをしましょう。)

SiteGuard WP Pluginなどのセキュリティプラグインを導入し、不正ログイン対策から身を守る。
(英語に躊躇がなければ、All In One WP Security & Firewallなどもおすすめです。)

3、サーバーセキュリティ対策を行う

WebサイトのSSL化や、WAF(Webアプリケーションファイアウォール)の設定が行えるweb業者に依頼することでかなりの確率で阻止することができます。
また、プラグインにはデータベースごとバックアップを行ってくれるプラグインも存在するので、万が一乗っ取られたとしても、乗っ取られた日付がわかれば瞬時にもとに戻すことも可能です。

不正改ざん、更新作業によるサイト崩れ
WordPressが改ざんされた!更新したらサイトが崩れた!そんな時はWP-Rescue99にお任せください!