マルウェア配布サイトになっていた話(恥

油断してました…(苦笑)。せっかくなので俺は記録しておくぜ! ということで、どんな感じで感染したかっつー記録デス。
気付いたきっかけはいつものよーにこの blog のサイト統計情報を開こうとしたときでした。 safari が詐欺サイトだよ、とか警告を出してくるんです。おいおい俺のサイトでそりゃないだろうよ、と思ったのですがどうもその警告は Google が出しているものらしい。環境設定 – セキュリティ – 詐欺 Web サイトを訪問したときに警告、のチェックを外せば見れるようになるのですが Google の検索結果でもマルウェアサイトみたいな注釈を入れられちゃうので嫌な感じ。
ということで Google Webmaster Tools で確認してみたらなんだかよくわかんないけど感染してるっぽいよ、と非常にテキトーな感じの警告が出ていたのでした。テーマが使ってる外部サイトが感染でもしてんのかな、と深く考えずに WordPress デフォルトのテーマに戻して再審査をリクエストしてしばらく待ったところ安全だ認定を受けたのです。詐欺サイトの警告も出なくなったので、これで一安心と思ったら翌日再び詐欺サイトの警告が…
再度確認したところ、やっぱり前回と同じような警告だったので、どうしたものかと悩んだあげくに今度は真剣に調べてみました(←最初にやれ)
しかし Google 様は相変わらず感染の詳細は不明なので、その手の診断ツールはないかしら、と適当にググってそれっぽい Sucuri ってんで調べてみたところここに乗っているコードがウチのサイトにも書かれていたようです。

じゃあってんで、 add_sscounter を wp-content/themes/ 以下で grep かけてみたところ全てのテーマの functions.php で発見されました。つまり全てのテーマが汚染されていたという…。なので一生懸命直しました。具体的には各テーマの functions.php を編集して

<?php
add_action('get_footer', 'add_sscounter');

以下を削除したって話なんですけどね。流石に感染経路が気になるので Apache のアクセスログから追ってみたところ

192.162.19.174 - - [08/Apr/2012:18:55:07 +0900] "GET /~goro/diary/wp-admin/theme-editor.php?file=%2Fthemes%2Ftwentyeleven%2Ffunctions.php&theme=Twenty+Eleven&dir=theme HTTP/1.1" 200 79019 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.6) Gecko/20100107 Fedora/3.5.6-1.fc12 Firefox/3.5.6"
192.162.19.174 - - [08/Apr/2012:18:55:11 +0900] "POST /~goro/diary/wp-admin/theme-editor.php HTTP/1.1" 302 - "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.6) Gecko/20100107 Fedora/3.5.6-1.fc12 Firefox/3.5.6"
という具合に WordPress のテーマエディタを使って一個一個地道(?)に編集していたようです。え!? ってことはアカウントも漏れてる!? ということで慌ててパスワードも変更してこれで一安心。先ほどの Sucuri で確認したら、今度は問題ないっぽい表示なのでこれで解決。
と思って油断してたらその二日後、再度詐欺サイト認定を食らいました(とほほ)。前回同様 functions.php が汚染されたんだろうと思って確認すると、こないだ消したはずのコードが復活していたのです。パスワード変更したのになんだよこれー、と思いながら functions.php を編集し、そしてもう一度真剣にアクセスログを確認することに…(←最初に(ry
するとヤツの足跡がこんな感じに残っていました。
192.162.19.174 - - [19/Apr/2012:09:01:52 +0900] "GET /~goro/diary/?cperpage=1 HTTP/1.1" 200 66128 "http://www.yahoo.com" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.6) Gecko/20100107 Fedora/3.5.6-1.fc12 Firefox/3.5.6"
192.162.19.174 - - [19/Apr/2012:09:01:55 +0900] "GET /~goro/diary/wp-admin/ HTTP/1.1" 200 73045 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.6) Gecko/20100107 Fedora/3.5.6-1.fc12 Firefox/3.5.6"
192.162.19.174 - - [19/Apr/2012:09:01:59 +0900] "GET /~goro/diary/wp-admin/theme-editor.php HTTP/1.1" 200 91982 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.6) Gecko/20100107 Fedora/3.5.6-1.fc12 Firefox/3.5.6"
なにか違和感を覚えて自分の足跡を確認してみると
127.0.0.1 - - [16/Apr/2012:09:23:19 +0900] "GET /~goro/diary/wp-admin/admin.php?page=stats HTTP/1.1" 302 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.5 Safari/534.55.3"
127.0.0.1 - - [16/Apr/2012:09:23:21 +0900] "GET /~goro/diary/wp-login.php?redirect_to=http%3A%2F%2Fborg4.vdomains.jp%2F%7Egoro%2Fdiary%2Fwp-admin%2Fadmin.php%3Fpage%3Dstats&reauth=1 HTTP/1.1" 200 3526 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.5 Safari/534.55.3"
127.0.0.1 - - [16/Apr/2012:09:23:22 +0900] "GET /~goro/diary/wp-admin/admin.php?page=stats HTTP/1.1" 302 - "http://borg4.vdomains.jp/~goro/diary/wp-admin/admin.php?page=stats" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.5 Safari/534.55.3"
思わず赤くしちゃいましたが、本来であれば wp-login.php に飛ばされて、認証を経てから本来のページが表示されるところ、ヤツはいきなり管理画面に飛んでるらしいのです。というかその代わりに /~goro/diary/?cperpage=1 にアクセスしてるのがキモなのかしらん? とログアウトして  /~goro/diary/?cperpage=1 → 管理画面とアクセスしてみたところ、実にあっさりと管理画面が表示されたのでした…。
cperpage で grep かけてみるとやっぱり全テーマの functions.php にその記述がある様子。念のため最新版の WordPress を落として、そこの theme/twentyeleven/functions.php と、この blog の同ファイルを diff ったところ違いがでるわでるわ…。 なのでデフォルトテーマの twentyten と twentyeleven はまるっと上書きした上で、”cperpage wordpress” でググってみるとまさにこの問題について記載されたページを発見したのでした。なるほど、バックドアでしたか(一瞬 WordPress 側のバグを疑ったんだけど、冷静に考えればこんなコードが残ってるわけないよな…)
先の cperpage=1 は 1 番目のユーザーで auth_cookie を残す、ということらしいので、念のため WordPress 側の 1 番目のユーザー(=admin) を削除して様子見していたところ
192.162.19.174 - - [26/Apr/2012:07:10:25 +0900] "GET /~goro/diary/?cperpage=1 HTTP/1.1" 200 36183 "http://www.yahoo.com" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.6) Gecko/20100107 Fedora/3.5.6-1.fc12 Firefox/3.5.6"
192.162.19.174 - - [26/Apr/2012:07:10:29 +0900] "GET /~goro/diary/wp-admin/ HTTP/1.1" 302 - "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.6) Gecko/20100107 Fedora/3.5.6-1.fc12 Firefox/3.5.6"
と 302 Found が返るようになっていたので今度こそ大丈夫、のようです。
さて、テーマを有効化した時点で感染、ということらしいので最近試してみたテーマを確認していたところ、どっかで紹介されていた Biforate (注:このリンク先から落とせるテーマは今でも汚染されたままの様子なので、インストールはしないよーに)というテーマが汚染というか仕込まれていた様子。
ちなみにどんな感じに仕込まれているかとゆーと、 functions.php に
<?php $_F=__FILE__;$_X='Pz48P3BocCAkeyJceHU3XHh1Y09CXHh1NkxTIn1bIlx4ZWZceDcwXHhlMTNceGVlXHhlNlx4NzdceDcwIl09ImdceGU2XHg3MCI7JHsiXHh1N1x4dWNceHVmQlx4dTZceHVjXHhp..(略)..9GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw=='));?>

つーのがあり、さらには

<?php
function _verify_activate_widget(){
$widget=substr(file_get_contents(__FILE__),strripos(file_get_contents(__FILE__),"<"."?"));$output="";$allowed="";

という具合に書かれていました。いや、ちゃんと解析したわけじゃないけど、多分ここが問題のコードなんでしょう(苦笑)。これをインストール前に確認することは面倒(というかテーマのソースなんてイチイチ読んでられないよ)なので、自衛策といえば以下のテーマしか使わない、ということなんでしょーか…

  • WordPress 標準のテーマ
  • 自作テーマ
  • WordPress.org で配布しているテーマ

ま、怪しいサイトからはテーマであっても落とすのは危険だよね、という教訓だったのかもしれません。

コメントを残す