とあるお知り合いからGoogle検索からホームページにアクセスすると、真っ白で何も表示されないというご相談を頂来ました。
調査の結果、ハッキングされたようで謎のコードが埋まっていました、発見するまでの流れを紹介します。
# 環境
- Wordpress バージョン WordPress 4.1.17
- 一般的なレンタルサーバ
- ftp接続(ssh/sftpはたぶん使っていない)
- wpのパスワードはランダムでした(fail2banも搭載済み)
詳細な事象
- googleの検索結果からサイトにアクセスすると真っ白なページ
- 私の環境だと再現しないことがある
- 再現した場合は、レスポンスが空、ステータスは200
- URL直打ちでアクセスすると表示される
- どうやら、検索結果から流入したときのみらしい
原因の特定
相談頂いた時間がちょうど深夜で、アクセス数も少なかったためそのまま対応させてもらえることになりました。
(※ちょうどそのときは私の環境でも再現していた)
アクセス元によって挙動が変わるようなので、Wordpressのエントリーポイント
wp/index.php
の先頭に、リファラーを確認できるよう
<!--<?php echo 'Referer is '.$_SERVER['HTTP_REFERER'] ?>-->
と、記載してみた。
正常に動作するようであれば、少なくとも Referer is XXXXX と表示されるはず・・・
しかし依然として真っ白なページで、ページソース確認でも、確認できませんでした。
wordpressの仕組み上、少なくともwp/index.phpは実行されるはずで、URL直アクセスする場合は
想定通り、Referer is XXXXXと表示されることを確認しました。
上記の結果からおそらく、index.phpを経由していないと仮定し、これより上の処理を確認しました。
この判断がビンゴで、.htaccess内に悪意のあるコードが埋まっていました。
.htaccessの中身
通常のwordpressに存在しない、下記の内容が追加されていました。
RewriteRule ^google(.*)\.html$ /wordpress/wp-admin/network/tpl/wp-og3.php?gg=$1 [L]
RewriteCond %{HTTP_USER_AGENT} (bot|google|yahoo|aol|bing|crawl|aspseek|icio|robot|spider|nutch|slurp|msnbot) [NC]
RewriteCond %{REQUEST_FILENAME} !(wp-og3.php|xsl|css|jpg|gif|js)$ [NC]
RewriteRule ^(.*)$ /wordpress/wp-admin/network/tpl/wp-og3.php [L]
RewriteCond %{HTTP_REFERER} (google|aol|yahoo|msn|search|bing|seznam|Seznam) [NC]
RewriteCond %{HTTP:Accept-Language} ^ja.*$ [NC]
RewriteCond %{REQUEST_FILENAME} !(wp-og3.php|xsl|css|jpg|gif|js)$ [NC]
RewriteRule ^(.*)$ /wordpress/wp-admin/network/tpl/wp-og3.php [L]
通常のwordpress用のhtaccessには記載されない内容です。
処理内容は簡単に下記の通りです。
- googleなんとかhtmlだった場合の wp-og3.php にリダイレクトする
- おそらく、googleの GSuiteなどのドメイン認証を詐取するための設定です
- GSuiteの乗っ取りが行われる・・・?
- GSuiteの組織を勝手に作られる・・・?
- 検索サーチBOTからのアクセスの場合、wp-og3.phpにリダイレクトする
- 検索サイトからのアクセスで、言語が日本語の人は、wp-og3.phpにリダイレクトする
- 再現しなかった時は、英語設定クライアントだった
また、この内容から、攻撃のエントリーポイントは
/wordpress/wp-admin/network/tpl/wp-og3.php
に存在することが分かりました。ファイルを開いてみると、そこには難読化されたコードが存在していました。
一端、ここまでで攻撃を受けたこと、とりあえず.htaccessを修正すれば、報告された事象は解消することが分かったため
報告を上げ、対応を終了しました。
当日、解読することが出来たので、後日、難読化の仕組みになっているのか別記事を掲載します
あとがき
報告があった、事象については修正し、正常に稼働するようにしたが、おそらく他にもウィルスが埋まっているはずなので
サイトの閉鎖、ウィルスの除去、再構築などを行うべきです。
先方にも、閉鎖推奨と伝えましたが、理解を得られず、現状維持となりました
追記
はてブやTwitterで、古いWP、脆弱性が残っているWPだとのご指摘を頂いています。
バージョンについて(やや理解と解説に不安)
問題がありましたWPのバージョン4.1.17については、リリース日が2017年4月20日となっており、同日リリースされている
最新版(4.7.4)のバックポートを当てた状態(だと思う)で、ノーメンテ状態ではなくある程度メンテはされていた状態と推察しています。
(※バックポートは非公式な提供なので突然なくなることもあるので、最新のバージョンを維持できる体制を整えるのが一番です)
参考 WordPress の EOSL についての簡単なまとめ
いつの時点でハッキングされたかは確認していないのですが(ファイルのタイムスタンプを覚えておけば良かった)
4月20以前の場合は、WPの脆弱性を利用されていて
4月20日以降の場合は、テーマかプラグイン、またはFTPアカウント乗っ取りの可能性が高いのではないかと考えています。
脆弱性が残ってる件について
ご指摘の通り、脆弱性またはサーバへのアクセス権が、攻撃者の手中にある状態です。
いつ再発してもおかしくない状態ではあります。今すぐにでも対策を打つべきですが
残念ながら、大人の都合で対応が終了しました。
私がもっと交渉がうまければ良かったのですが・・・。