マルウェア解析奮闘記 ~難読化JScriptを解析せよ~
先日、あるマルウェアを入手しました。フィッシングメールの添付ファイルとして配送されていたもので、拡張子「.js」のJScriptファイルでした。中身は難読化処理が施されておりました。その解読手法および解析した結果を記します。
■JScriptとは
JScriptはスクリプト言語であり、ファイルをダブルクリックした場合はWindows Script Hostがその実行エンジンとなります。そのため、Windows環境は標準でJScriptファイルを実行する事ができます。厳密にはJavaScriptと異なるのですが、JavaScriptが読める方であれば、何をしているかはきっと理解できます。
アイコンは以下の通りです。
図1、JScriptのアイコン
■検体の調査
検体をテキストエディタで開くと以下の通りとなっておりました。
図2、検体のソースコードの一部
一見すると解析を諦めたくなるような綺麗な模様ですが、まずは整形をします。改行、インデントを追加します。
図3、整形後のソースコード
関数(function)はたくさんありますがやっていることは単純です。「evl」変数に文字列を追加し、異なる関数を呼び出す処理がおよそ200回弱繰り返されていました。
図4、処理のイメージ
調べていくと、ある関数のみ異なることがわかります。
図5、特殊な関数
関数 hf (赤枠)はeval関数を実行しています。
eval関数は組み込み関数(事前に定義されて用意されている関数)で、受け取った文字列を命令として実行するというものです。上記の例では、evl変数に含まれる文字列が命令として実行されます。
全体像としては下図の通りとなります。
図6、全体像
■悪質なスクリプトの抽出
全体像が掴めたので、組み立てられる「悪質なスクリプト」を調査しました。
eval関数を、標準出力(WScript.Echo)に置き換えます。
図7、関数hfの改造
その結果得られたevl変数に含まれていたスクリプトが以下になります。
JScriptでファイルをダウンロードして、実行するというものです。
26行目~30行目にあるのがダウンロード用のURLおよびダウンロード後のファイル名になります。見ての通り、実行ファイルをダウンロードしようとしています。
つまり、このJScriptはダウンローダであることが分かりました。
■最後の検体の調査
さらにそれぞれのURLから実行ファイルをダウンロードすると、3つとも異なる検体でしたが、すべてトロイの木馬でした。
わざわざ3つダウンロードさせている理由として、仮に1つのみがウィルス対策製品で検出されても、その他のマルウェアが残り続けることを犯人が狙ったと考えられます。その場合、ユーザおよび管理者はウィルスが駆除できていると思い込んでしまい、他のマルウェアがそのまま放置されてしまうでしょう。
■まとめ
難読化という手法は、ブラウザの脆弱性を突くようなJavaScript/VBScript、PHPなどで作られたWebShellなど様々なところで利用されており、パターンファイルによる検知はますます困難になっています。
サンドボックスやエンドポイント上で動作する振る舞いで検知するタイプのソリューションが必要になります。
フォローしませんか?