マルウェア解析の現場から-04 スクリプトボット

前回のブログを書いてから随分と間隔が空いてしまいましたが、マルウェア解析の現場は止まっているわけではありません。むしろ進化し続けるマルウェアを利用した攻撃の実体を明らかにするためのマルウェア解析の需要は増す一方であり、「虫の目」による解析力と「鳥の目」による分析力を兼ね備えた解析エンジニアの育成は喫緊の課題です。そんな状況の中、解析結果としてのマルウェアの動作だけでなく、解析の雰囲気を知っていただくことで一人でも多くの方がマルウェア解析に興味を持つことを目的の一つとして、このブログをお送りします。さて、今回のマルウェアは・・・。


 

■スクリプト

 「このマルウェアは『bootstrap』というJScriptで書かれたファイルをダウンロードしているようだが、JScriptを利用して何をしているのか調べて欲しい。」

そんなお客様からの依頼を受け、このマルウェア「BKDR_GOOTKIT.A」の解析を開始しました。

「スクリプトと言えば、PDFに埋め込まれているものや Gumblar攻撃でダウンロードされてくる JavaScript をよく見るけど、実行ファイルがスクリプトをダウンロードするなんて見たことないなぁ」

そんなことを考えながら、受け取った検体ファイルをテスト環境で早速実行させようとしてみると、
「ん? これDLLだ」
DLLファイルは実行ファイルですが、EXEファイルと違い単体で直接起動することはできません。EXEファイルなど別の実行ファイルから読み込まれて利用してもらう必要があります。ファイルの構造を Hiew(PEファイルエディタ)で確認すると、確かに PEヘッダの「Characteristics」に DLLファイルであることを示すビットが立っています(図1参照)。

図1
図1

 また、一般的な DLLファイルと同じように Export されている API もありますが、それらの API の処理を見てみると、実際には何も行っていません(図2参照)。

図2
図2

 続いてエントリポイントからのコードを見ると、お客様から話のあったファイル名「bootstrap」のダウンロード元と思われるURLがバッチリ見えています(図3参照)。

図3
図3

 「DLLエントリポイントからすぐに不正なコードが書かれているんだな。こりゃDLLインジェクションにでも使われるのかな」

今回お客様から受け取ったのはこのファイルだけでどのような状況で入手したものなのかといった情報はありません。そのため、このファイルがどのように作られ、どのように利用されたかなどは定かではありません。しかしエントリポイントからのコードを実行させればダウンロードの処理を行いそうなので、ひとまずこのコードを実行させてみることにします。時間が経つとダウンロードできなくなってしまう恐れがあるので、早くしておかないと。実は Ollydbg(デバッガツール)で DLLファイルを開こうとすれば、自動的に “LOADDLL.EXE” という EXEファイルが実行されてそこから解析対象の DLLファイルをロードしてくれます。これなら DLLファイルのエントリポイントからのコードを簡単に実行できるので、早速実行。すると、先ほど見えた URL からスクリプトデータがダウンロードされてきました(図4参照)。

図4
図4

 マルウェア側の動きを見ると、ダウンロードしたスクリプトデータの先頭のコメントから、スクリプトの種類が JScript か VBScript なのかを判別し、スクリプト種類に応じたスクリプトエンジン(”jscript.dll” または “vbscript.dll”)を初期化し、ダウンロードしたスクリプトを実行できるようにしていることがわかります(図5参照)。

図5
図5

 つまりこのマルウェアは、スクリプトをダウンロードして実行するだけのプログラムだったのです。

■スクリプトホストに追加されたメソッド

 このスクリプトの実行で興味深いのは、IActiveScriptオブジェクトの AddNamedItemメソッドを使ってスクリプトエンジンの名前空間に「SCRIPTITEM_GLOBALMEMBERS」としてオブジェクトを追加していることです。これによって、マルウェア作成者が定義した独自のメソッドを組み込み関数と同じようにスクリプト内で使うことが可能になります。実際、先ほどダウンロードしたスクリプトでも、よく見ると「PrintValue」「tapi_StartScriptedThread」「tapi_TerminateScriptedThread」「wapi_Sleep」という、スクリプト内で定義しているわけではない関数が使用されていることが分かりますが、その他にも合計で 88 もの独自のメソッドが定義されています。つまりこのマルウェアは、JScript または VBScript を基にマルウェア作成者が機能拡張した独自のスクリプト言語で書かれたスクリプトを実行させることができるのです。

「一体どんな機能を追加しているんだろう?」

追加されているメソッドには全て分かりやすい名前が付けられているので、その名前を見るだけでも大体の機能が想像できます。もちろん、IDA Pro などを使って実際のコードを見てみれば、そこで使われている API など実際の動きをより詳しく調べることができます。調べた結果、ファイルやレジストリ操作関連、プロセスやスレッド関連、ソケットを使った通信関連などの基本的な Windows API をスクリプトから呼び出せるようにしていることがわかりました。また、Internet Explorer(IE)の操作やメール送信、FTP関連のものもありました(図6参照)。

図6
図6

■ボットの進化

 追加されたメソッドの中で特に興味深いのが「eapi_GetBotBuildVersion」「eapi_GetBotBuildDate」といった、このプログラム自体のバージョン番号や作成日付を返すようなメソッドの存在です(図7参照)。

図7
図7

「Bot? こいつはボットなのか・・・」

どうやら「Bot」とマルウェア作者自体が呼んでいるように、マルウェア作者はこのプログラムをいわゆる「ボット」として利用しようとしているようです。しかしこのプログラムは単にスクリプトの実行環境を提供しているだけなので、このプログラム自体の動作だけからするとこのプログラムを「マルウェア」と断定することはできません。でも、不正な目的のためだけに作られたプログラムであるとしたらやはり「マルウェア」であるということになります。では、このプログラムに「指令」を与えているスクリプトの内容を詳しく見ていきましょう。

ダウンロードしたスクリプト「bootstrap」を見ると、スクリプト内で指定されたURL(”tasks.xml”)から xml データを5分おきにダウンロードし、そこに書かれている内容から「TASK」を取り出して実行しています(図8参照)。

図8
図8

 つまり、この「bootstrap」は「タスク」の管理だけを行っているのです。実際にダウンロードした “tasks.xml” を見てみると(図9参照)、タスクとしてURL(”thread1.script”)が書かれています。

図9
図9

 そこでさらにそのURLからダウンロードされるデータを見てみると、別のスクリプトが書かれており(図10参照)、そこではまた別のURLから “protod.exe” というファイルをダウンロードして実行しています。

図10
図10

 つまり、結果としてはダウンローダとして機能しているのです。そう考えるとずいぶん手の込んだ回りくどいことをしているようですが、もちろん攻撃者はこのボットに追加したメソッドを駆使した様々な「タスク」を与えることを意図しているのでしょう。何せこのボットへの指令はスクリプトを組んで与えればよいので、スクリプト次第で柔軟に何でもさせられます。このような「コマンドの内容をスクリプトによって柔軟かつ容易に定義可能なボット」のことを、ここでは便宜上「スクリプトボット」と呼ぶことにしましょう。このスクリプトボットを従来のボットと比較してみると、なぜこのような仕組みを持つに至ったかが見えてきます。予めプログラム内に用意されたコマンドしか実行できない IRCボットや、独自プロトコルでダウンロードした機械語コードを直接実行する仕組みのため機械語レベルの緻密なプログラミングが必要であったり通信量が多くなるなどで検知されやすい「BKDR_POISON」などと比べると、多くのメリットを持つことがわかるでしょう(表1参照)。

  IRCBot BKDR_POISON Gootkit
Functionality
コマンドの豊富さ
Usability
利用のしやすさ
×
Scalability
機能の拡張性
×
Connectivity
通信のしやすさ
×
表1

このように柔軟性、接続性、使いやすさを兼ね備えたこのスクリプトボットは、従来のボットの進化の一形態であると言えそうです。

■利用目的

 ところで最終的にダウンロードされてきた実行ファイル “protod.exe(BKDR_PASMU.A)”はどのような動作をするのでしょうか。解析の結果では、FFFTP、FTP Explorer を含む多数の FTPクライアントソフトや、IE、Firefox、Opera などの Webブラウザから FTPサーバへログインするためのユーザ名とパスワードの情報を収集して送信する動作が存在することを確認しています。「BKDR_GOOTKIT.A」のスクリプトで利用可能なメソッドには FTPサーバ上のファイル操作に関連するものが含まれていることから、収集した FTPアカウント情報を利用して FTPサーバ上のファイルを改ざんする、つまり Gumblar攻撃のような Web改ざんの背景にこのようなボットが利用されている可能性が考えられそうです。

 

 さて、「BKDR_GOOTKIT.A」を解析してわかったことを見てきましたが、このような詳細な解析によって判明した知見は何の役に立つのでしょうか? 様々な答えが考えられるでしょうが、まずは何が起きているかを明らかにし白日の下にさらすこと、そして対策を生み出し、最終的にはマルウェアの被害を無くすことでしょう。何が起きているかを明らかにするには単体のファイルの動作を詳細に解析するだけでは十分ではありません。一連の攻撃で用いられる他のコンポーネントとのつながりを明らかにし、随時変化する接続先ホストからの受信内容を監視し、そしてその背後に控える攻撃者の動向を捉える必要があります。明らかにした「個」の動作と「個々のつながり」から見えた「全体」に対して「時間」という要素を加え「変化」として捉えていきます。マルウェア解析は続いていくのです。それでは、また見えたことをお伝えできるときまで。See you soon!