ダウンローダーとデコイ

最近、正常なファイルを実行しているように見せかける「デコイ(おとり)」を使うサンプルが送られてきます。今回のブログ記事では、そうしたサンプルの1つを解析します。フォーティネットでは、これをW32/Kryptik.CWXI!trとして検出しています。

実行

このサンプルはマイクロソフトのワード文書に似たアイコンを使用します。


図1. マルウェアが使用するファイルアイコン

Windowsのフォルダオプションが「Hide extensions for known file types(登録されている拡張子は表示しない)」に設定されていると、このファイルの拡張子が「scr」になっていることには気づかないでしょう。この拡張子はWindowsのスクリーンセーバーに関連したものですが、つまりこのファイルが実行ファイルの形式になっているということを示しています。おそらく、無防備なユーザーにこのファイルはただの文書だと思い込ませるためのトリックでしょう。

これをダブルクリックするとどうなるか、見ていきましょう。


図2. 開いたRTF文書

リッチテキストフォーマットの文書(RTF)が開きます。ユーザーがこのファイルはただの文書だと思っているならば、何もおかしいとは思わないでしょうし、このファイルを害のないものとして片づけてしまうかもしれません。

ネットワークトラフィックがあるか、調べてみましょう。


図3. ネットワークトラフィックを確認中

何もありません。

ですが、もう少し待って様子を見てみましょう。

5分後...。


図4. ネットワークトラフィックをキャプチャ

ネットワークトラフィックです!

さらに待ってみると、どうなるでしょうか...。


図5. CTB-Lockerからの身代金要求メッセージ

まずいですね。

このマルウェアはRTFファイルをデコイとして使っていただけであり、実際にはユーザーのシステムにCTB-Lockerというトロイの木馬をダウンロードして実行していたということがわかりました。解析を行った時点で、このダウンロードされたトロイの木馬はW32/Kryptik.CWXI!trとしても検出されています。

ここまで見てきたように、このマルウェアは典型的なダウンローダー型のトロイの木馬(別のマルウェアをダウンロードして実行するマルウェア)の機能を持っています。次に、デコイ文書がどう使用されているか、ネットワークトラフィックがどうなっているかを見ていきましょう。

デコイ文書

先ほども言ったように、元のマルウェアファイルは正確に言うとPEという実行可能ファイルのフォーマットになっています。このファイルの.rsrc セクションでは、暗号化されていないCABファイルを見ることができます。


図6. マルウェアのリソースセクション内にある暗号化されていないCABファイル

上の図では、Microsoft Cabinet File(MSCF)というヘッダーとデコイ文書(uginv.rtf)の元のファイル名を確認することができます。

このキャビネットファイルをユーザーの一時フォルダへコピーした後、マルウェアはその中身を抽出し、ShellExecute APIを呼び出して抽出したファイルを開きます。


図7. デコイ文書を抽出して開くための疑似コード

このデコイ文書について1つ言っておくべきことは、データの変更が行われた日時がキャビネットファイル内に保存されているということです。つまり、ダウンローダーが組み込まれた時間を推測できるということです。


図8. 2015年2月3日に受け取ったサンプルのデータ変更日時はほんの12時間前となっている

このサンプルの場合、デコイ文書のデータ変更日時が、私たちが解析用のサンプルを受け取った時間の12~24時間前となっており、ほんの少し前にダウンローダーが組み込まれたことがわかります。

スリープ

では、不正なアクティビティが始まる前に間があるのはなぜでしょうか。

コードを見ると、KERNEL32のSleep APIへの呼び出しが何度も行われています。これは、カレントスレッドを特定の時間一時停止するためのものです。マルウェアのコードにスリープを使用することで、マルウェアがデバッガーで実行されているかどうかを検知したり、自動サンドボックス解析ツールにおける検出を回避したり、あるいはユーザーの疑惑をかいくぐるなど、多くの目的を果たすことができます。今回のケースでは、ダウンローダーはデコイ文書を開いた後、300000ミリ秒(5分)スリープ状態に入ります。疑いを持っていないユーザーからしてみたら、このサンプルはRTF文書を開くこと以外は何もしないように思えるでしょうが、さらに詳細な解析を行うと(あるいは十分な時間を置くと)、それだけではないことがわかります!


図9. 不正なアクティビティを開始する前の5分間のスリープ

ネットワークアクティビティ

最初の5分間のスリープの後、不正なアクティビティが始まります。ダウンローダーがハードコードされたURLにクエリを行い、ペイロードをダウンロードします。


図10. ダウンローダー内のハードコードされたURL

下の表は作成されたWinHttp API呼び出しシーケンスの一例です。

このマルウェアはインターネットクエリにHTTPSを使用しています。これにより、不正侵入防止システムが暗号化されたトラフィックの不正なアクティビティを監視、解析することが困難になります。証明書エラーを無視するオプション(WINHTTP_OPTION_SECURITY_FLAGS = 0x3300)を使えば、ホストのCA証明書を照合、あるいは信頼できなくてもHTTPSリクエストは成功します。

照合と復号

侵害を受けたウェブサイトや不正なウェブサイトが、ダウンローダーがリクエストするペイロードを必ずしも提供しているわけではありません。ほとんどの場合、HTTP 403(Forbidden)というレスポンスが帰ってきます。


図11. 不正なホスト、あるいは侵害を受けたホストから帰ってくるForbiddenのレスポンス

ペイロードが正しいものであることを確認するため、ダウンローダーは受け取ったデータの照合を行います。まず、レスポンスのサイズは最低1024バイトでなければなりません。次に、受け取った2つ目のDWORDはレスポンスで受け取ったバイト数と同じでなければなりません。この2つの条件が満たされると、ダウンローダーはデータの復号を開始します。これが満たされなければ、ダウンローダーはスリープ状態に入り、その後、次のハードコードされたURLで同じ手順を繰り返します。ホストがいつ不正なペイロードを提供するかをどのように決定しているのかはわかっていません。すぐに正しい不正ペイロードを提供する時もあれば、ダウンローダーが求めるものをダウンロードできるまで何時間もForbiddenのレスポンスが帰ってくる時もあります。

有効なデータを受け取ると、そのデータはダウンローダー内でハードコードされている128ビット鍵でストリーム暗号を使って復号されます。復号の際には、メモリにMZヘッダーを持つファイルを見ることができます。これは復号されたデータが実行可能ファイルであることを示しています。最後の照合は、復号されたデータが正しいものかどうかを確かめるためのCRC32チェックです。


図12. 受け取ったデータの復号

すべての照合プロセスで条件が満たされていると、ペイロードがユーザーの一時フォルダに実行可能ファイルとして書き込まれ、実行されます。10秒間のスリープの後、ファイルがダウンロードされ、実行された痕跡を消すため、ダウンローダーはダウンロードしたファイルの削除を試みます。

現在、このダウンローダーではランサムウェアのCTB-Lockerが使われていますが、これはいつでも変わる可能性があります。マルウェアキャンペーンにダウンローダーを用いることの利点の1つは、未検出の亜種やまったく未知のマルウェアなどの別のファイルにペイロードを切り替えることができるという点です。

歴史

このダウンローダーに遭遇したのは今回が初めてではありません。似たような動作をする亜種は2014年5月から検出されています。その歴史のなかで、以下のような相違点が観測されています。

  • さまざまなカスタム式のパッカーが用いられ、コードが難読化されている
  • HTTPリクエストのUser-Agentに、MozillaやOpera、さまざまなバージョンのWindowsといった異なる値が用いられている
  • デコイファイルとしてさまざまな文書や画像が使用されている
  • ダウンロードされたペイロードに実行可能ファイル(EXE)あるいはダイナミックリンクライブラリ(DLL)が用いられている
  • ハードコードされたURLは暗号化されている場合もあれば、プレーンテキストになっている場合もある

結論

今回の記事では、ユーザーをだまし、不正な意図を隠すためにデコイ文書を使用するマルウェアを解析しましたが、さらに詳細な解析を行っていくことでマルウェアの本質を見極めることができます。私たちは今後もこのダウンローダーの変化を監視し、お客様を保護していくために必要な調査を行っていきます。