McAfee Avert Labs Blog
The commercial HTML packer dilemmaより
May 14,2008 Posted by Patrick Comiotto

 多数のWebサイトを悪意のあるJavaScriptで改ざんし,様々なぜい弱性を悪用してコンピュータに感染するインジェクション攻撃が世間を騒がせていることを受け,これまでの経過に目を向けてみることにした。その結果は,非常に興味深いものであった。

 筆者は2008年5月上旬,数多くのWebサイトが不正な動作をすることに気づいた。多くのWebページで,(今回のケースでは)「addr.js」という名称のJavaScriptを読み込んだInternet Explorer(IE)7がActiveXの警告を出したのだ。こうしたWebページの大半が中国を拠点としていることは,驚くに値しない。読者の大半はおそらく既に把握しているだろうが,以下にそのJavaScriptコードの一部を示す。

 このJavaScript関数に何ら目新しいところはない。Dean Edwards氏がHTMLコードを難読化するために開発したもので,Web開発者の間ではWebページ上の大事なソースコードを「隠ぺい」する手段として人気がある。ただし,残念ながら悪意のあるコードの隠ぺいにも多用されている。上記コードはまさにその一例だ。解読したこのコードの重要な部分を以下に示そう。

try{if(navigator.userAgent.toLowerCase().indexOf("ms"+"ie 7")==-1)

 これはIEのバージョンが「7」であることを確認した後,グリニッジ標準時(GMT),ActiveX,RealPlayerのバージョンなどに応じて以下のiFrameタグを読み込む。

<iframe style=display:none src="http:// :///ms.gif">
<iframe style=display:none src=":///xl.gif">
<iframe style=display:none src="http:// :///bd.gif">
<iframe style=d'+'isp'+'lay:none src="http:// :///r'+'eal.g'+'if">
<iframe style=d'+'isp'+'lay:none src="http:///r'+'eal_new.g'+'if">
<iframe style=display:none src="http:// :///lz.gif">

 コードに隠されていた6個のiframeタグは,(わずかな違いはあるものの)数週間前に大量発生したインジェクション攻撃とほぼ同じエクスプロイトを使用して,様々なWebページをロードする。

 「この攻撃のどこが新しいのか?」と疑問に思うだろう。気になるのは,これらiframeタグでロードされるWebページが,さらに多くのJavaScriptコードを隠した偽のgif画像ファイルを取得しようと試みる点だ。ただし,こちらのコード難読化には,別の商用ツール「HTMLSHIP」が使われている。

 以下に示すのは,難読化がほどこされたWebページの一例で,RealPlayerをターゲットとするエクスプロイトが隠されている。

 見ての通り,このコードは非常に判読しづらいが,筆者のお気に入りツールの一つ「Caffeine-Monkey」でコードの一部を解読してみた。以下にその結果を示す。なお,Caffeine-Monkeyは米セキュアワークのBen Feinstein氏およびDaniel Peck氏が作成したツールで,Webブラウザ・エンジン「Mozilla」に実装されている。

 上記コードは,RealPlayer ActiveXコントロールのクラス識別子(CLSID)を含んでいる。そして,以下のコードには,セキュリティ検証Webサイト「metasploit」に掲載されたぜい弱性を悪用するコードの一部がある。

 これまでに筆者は,これらエクスプロイトを配信しているドメインと,JavaScriptファイル名にいくつか種類があることを確認済みで,今後拡散するかどうか動向を監視する予定だ。

 現在までに検出できたサンプルは,どのアンチウイルス(AV)でも検出されない。いや,例外が一つだけある。読者ならそれが何か分かるだろう。

 もう一つの注意点は,Webページ上の攻撃用JavaScriptを難読化するのに用いられる手法が高度化しており,通常のアンチウイルス・エンジンで判別がますます困難になっていることだ。現在のところ,上記ツールと同様のものが多数出回っており,マルウエアの作者はたやすく難読化が行える。

 バイナリ・ファイルと各ファイルの難読化に使用されたパッカー(圧縮/保護/暗号化などを行うツール)を簡単に対応させたところ,今回のケースは新しい手法でないものの,パッカー「UPX」に対して同「Armadillo」「ASProtect」などを用いるといった具合に,既に述べた通り一段と手間がかかっている。

隠すべきか,隠さざるべきか

 理想的には,難読化のような複雑な方法によるコード隠ぺいを商用保護ソフトウエアに求めず,コードの著作権/商標を守るほかの手法をWeb開発者に知ってもらえるとよい。例えば,サーバー・サイド・スクリプティングやAjax/Javaサーブレットを使うと,コードを保護できる。

 仮に,筆者が人気の高いWebページのコードを改ざんしようとしていて,その際JavaScriptやIEのJScriptといったスクリプト言語に精通しているとしたら,数回クリックするだけ,あるいは「Mozilla Java-Script C Engine」のような最新のブラウザ・エンジンを使うだけで簡単に復元できる程度のコード隠ぺいでは,悪事をやめようと思わないだろう。

 パッキングで生じるマルウエアの亜種に対処する方法については,たくさんのアイデアが示されている。おそらく,合法的にソフトウエアやWebページのHTMLコードを作成/記述する人たちは,「Security through Obscurity(隠ぺいによるセキュリティの確保)」があまりにも実践できていないという現実と,製品をシンプルにすればするほど不正なソフトウエア/コードが特定しやすくなり,犯罪者たちを突き止める手間がほんの少し軽減するという事実を把握すべきだ。


Copyrights (C) 2008 McAfee, Inc. All rights reserved.
本記事の内容は執筆時点のものであり,含まれている情報やリンクの正確性,完全性,妥当性について保証するものではありません。
◆この記事は,マカフィーの許可を得て,米国のセキュリティ・ラボであるMcAfee Avert Labsの研究員が執筆するブログMcAfee Avert Labs Blogの記事を抜粋して日本語化したものです。
オリジナルの記事は,The commercial HTML packer dilemmaでお読みいただけます。