突然ブログがマルウェアに感染したと警告された時の対処は? (簡単なjavascript難読化コード解析)

  0 件のコメント

先日sucuriのマルウェアスキャナーでブログ(blogger.comです)をチェックしたところ、突然「悪質なコードが検出されました!」のメッセージ! しかもCritical! 何も変えていないのになぜ? こりゃ〜マズイかもと思いつつ、単にツールの間違いかもという考えも捨てきれず、調べてみました。(※結果的には問題ありませんでしたが、結論にいたるまではかなり面倒でした。)

sucuriの警告画面

これです。初めて見ました。感染していると断言してます。強烈!


指摘が難読化コードの部分なだけにメッセージを信じるしかないのですが、もしかしたら単に難読化されているから? 本当にマルウェアなのかと急に疑念が湧いてきました。最近そこら辺は何もいじっていませんしね。こうなったら自分で確認するしかありません。malware-entry-mwjs2368というマルウェアだそうですが、まず、何がどうなっているのか詳しく見てみます。

該当するコードをブログから探す

該当するコードをブログの中(テンプレートしかありえません)で探すと、簡単に見つかりました。警告画面の内容そのままです。


確かに何をやっているか不明。でも、このコードは先日までsucuriのスキャナーもvirustotalもパスしていたもの。急に警告とは意味がわかりません。

難読化コードをデコードする

さて、難読化コードが何をやっているか解析するには、通常のコードに戻す必要があります。簡単なのはFirebugにお任せする方法。ブログをブラウザでソース表示して、head部分+bodyを空にしたものをhtmlとして保存し、FirebugをインストールしたFirefoxで開きます。矢印部分が問題の難読化コードです。


ここで、メニューバーの赤丸で囲んだ部分をクリックし、末尾に「> eval」の文字がある行を選びます。するとあら不思議、難読化されていたコードがデコードされて、何となく読めるレベルになります。


※FirefoxのFirebugではなく、Chromeの「デベロッパーツール」を使っても同じことができます。その場合は次に記載したコード整形もその中でできてしまい、さらに簡単でした。

コードを整形して読みやすくする

このままでは見にくいので、この行を全選択してjavascriptの整形ツールにかけます。(http://jsbeautifier.org/ または http://javascriptbeautifier.com/)
結果をエディタに貼り付けると、やっとプログラムらしく見えるようになりました。

どの部分がマルウェアと判定されているのか?

で、コードをよく見ると、下の方(赤枠で囲んだ部分)に開発元のHPにブラウザ画面を切り替える部分があります。

 if(!$('#mycontent:visible').length)window.location.href='http://www.soratemplates.com/'
なるほど。sucuriはこれをマルウェアと判断しているに違いありません。(※特定条件でSora Templatesのホームページに飛ぶだけですが、実際には実行されないコードでした。仮に飛んだとしても、飛び先のホームページはsucuriでチェックしても問題なしです。)


この部分の直前で、ブログ画面(一番下のバナー部分)にクレジットを表示しているのですが、例えばテンプレートのコードが勝手に改造・流用されて「クレジットが表示されなくなった場合のみ」、開発元のサイトに飛ぶようにしているようです。小規模な開発元としては、まあ入れておきたくなる気持ちはわかりますが、そのコードがマルウェアと判定されるのは本望ではないでしょう。

問題を修正する

修正は簡単で、テンプレートの難読化部分を整形バージョンに置き換えて、該当の部分をコメント化するだけ(下の図のグレーの部分)。この時、難読化部分を丸ごとコメント化するとクレジットが表示されなくなるのでNGです。せっかくフリーで公開してくれている開発元が泣いてしまいますし、この美しいテンプレートの開発元に感謝の気持ちを表さないとね。なお、ライセンスがCC-BY-3.0なので、改変は自由ですが適切なクレジット表示が必要です。(※ちなみに難読化部分を丸ごとコメント化すると、ブログが正常に表示されなくなります。そこまで考えて難読化の範囲を決めているんでしょう。)


再チェック→やった!問題なし!

この状態で再度sucuriスキャナーにかけると...。よしっ! クリーンの判定となりました。


思ったこと

マルウェアと判定されたコードは、ユーザーの意思に関係なく別のサイトに転送されるという点から、sucuriの判定は正しいです。今回たまたま転送先が開発元の正常なサイトでしたが、そのサイトがハッキングでもされればいつでも変わる可能性があります。したがって転送しているというだけで「潜在的な脅威を含むコード」と分類されてもやむをえないでしょう。

ただし、今回問題となった部分は、テンプレートのクレジット表示を消すなどの不正な改変を行わなければ決して実行されません。したがって警告に関しては「...の可能性がある」のレベルに一段下げてもいいのではないかと思います(メッセージが強烈なだけに)。そこまでコードを解析するのは大変でしょうけどね。

とりあえず今回の警告については、以下の2点から、悪影響はなく今後は検出されない、と言えます。

 ①形式的には脅威のあるコードだが、決して実行されないため無害。
 ②念のため該当コードを(クレジット表示はそのままで)無効化した。

ふぅー、ほっとしました!

参考文献

/packer/で難読化されたJavaScriptコードをきれいに元に戻す術
http://code.xenophy.com/?p=868


0 件のコメント :

コメントを投稿

Related Posts Plugin for WordPress, Blogger...