投稿者:Matthew Molyett。
エグゼクティブ サマリー
Talos では 3 月に、Crypt0l0cker の(複数の)サンプル バイナリを徹底的に分析し、分析結果を詳細に報告しました。元のブログ記事でも説明していますが、Crypt0l0cker ペイロードは、同じコードベースを共有する多数の実行可能ファイルを利用しています。上記で「複数のサンプル バイナリ」と述べた理由はここにあります。各実行可能ファイルの機能はほぼ同一ですが、それらをすべてを繰り返し確認するのは面倒で、分析手法を改善するという本来の目的から逸脱しています。ここは、2016 年 12 月 に Talos が公開した「Function Identification and Recovery Signature Tool(FIRST)」の出番です。
アンパックされた DLL からペイロード ファイルに至るまで、FIRST により分析作業を即座に移植できました。具体的には、両方のファイル(DLL とペイロード ファイル)の分析が完了した時点で、以前のバージョンの疑わしいサンプル バイナリを
FIRST で分析します。これによりバージョン間で類似コードを特定し、分析内容を部分的に古いファイルにも移植できます。次のバージョンの Crypt0l0cker が登場しても、今回の分析作業を FIRST で移植して同様のコードを特定することで分析時間を大幅に節約できます。今回の分析内容を読者が入手したサンプルに移植することもできます。ここでは、(Talos のブログで最初に触れてから 1 か月以上経つ)2017 年 4 月に VirusTotal に掲載された Crypt0l0cker サンプルを使って移植機能を解説します(背景情報:今回の記事で取りあげた Crypt0l0cker サンプルを対象とした分析は実施されていません)。
サンプルを特定する
既知のマルウェア ファミリからサンプルを分析せずに入手することは、一般的には非常に難しい課題ですが、幸いにも Talos では疑わしいマルウェア サンプルについて Threat Grid サンドボックス レポートを活用できます。サンドボックス レポートからマルウェア ファミリの IOC(攻撃の痕跡)を探したところ、以前に Talos が実施した Crypt0l0cker の分析により、該当バージョンの感染状況が「ewiwobiz」という名前のファイルに保存されていました。「ewiwobiz」ファイルを作成したファイルを Cisco Threat Grid のテレメトリ内で検索すると、Crypt0l0cker の実行可能ファイルだと思われるファイルを発見しました。
ここから先は、実際のサンプルを入手する必要がありました。サンドボックス レポートによると、疑わしい Crypt0l0cker ファイルのサイズは約 400kbであり、一般的なパッケージャである Nullsoft Installer ファイルである可能性があります。静的なファイル情報を解析してファイル ハッシュを特定することで、VirusTotal を使用して分析を続けられます。
今回のサンプルは明らかに悪意のあるものですが、VirusTotal の検査結果を見る限り、サンプルが既知のファミリーに属することは示唆されていません。検出結果では、Crypt0l0cker、TorrentLocker、元の Talos ブログに記載されたエイリアスだけでなく、Teerac さえも参照されていません。
ファイル サンプルを入手はしましたが、Crypt0l0cker を発見したという静的な兆候がないため、FIRST を使用して既知のファイルとの類似性を比較することにしました。
サンプルの分析
FIRST のクライアント コードは IDA Pro のプラグインです。最初のステップは、ローカル上に保存された IDA からファイルを開き自動分析を許可することです。自動分析を許可すると開始関数がグラフ画面に表示されます。今回は、グラフ画面でコンテキストメニューを開いて、発見された関数すべてに対して FIRST ルックアップを要求しています。
結果は 1 分ほどで表示され、13 の関数が以前に識別され、アップロードされていることが分かります。
一致した関数を展開すると、関数に関連付けられたメタデータが表示されます。この中には提案された名前と関数プロトタイプも含まれます。今回の例では、これらの関数が NullSoft 製のインストーラに存在することが判明しているため、注意喚起するための名前が付けられています。以前に別の NullSoft 製インストーラを分析した際に、今後の手間を省くためにも、多数の関数を FIRST からアップロードしています。多くのマルウェア分析者は、マルウェア ファイルを分析する際に多くの時間を浪費しています。パッカーの使用タイミングを確認し、本当に重要なペイロードの分析に時間を費やすべきです。
[Select Highest Ranked(ランキングが最も高い関数を選択する)] のチェックボックスをオンにして、[Apply(適用)] をクリックします。関数名がデータベース全体に適用され、サンドボックス分析が正しかったことを明確に確認できます。つまり該当ファイルはパッカーであり、元のファイルを抽出する必要があります。
サンプルのアンパック
今回は、サンプルのアンパックで近道を通っています。NullSoft により保護された Crypt0l0cker ファイルを以前に抽出した際に、インストール スクリプトは複数の暗号化された BLOB を消費し、ペイロードを内部で復号し、Process Hollowing 経由で実行することが判明していました。そのため、ここではデバッグを実行して WriteProcessMemory で停止させ、ペイロード バッファを表示させます。
ただし、インストール スクリプトが System.dll のロードとアンロードを繰り返したことで、予期しない複雑な事態となりました。ModLoad 通知によりデバッガのプロセス サイクルの大部分が消費されたことで、事実上デバッガの Denial of Service(DoS)状態が引き起こされました。この状態を維持したまま、システムは 1 時間以上デバッグを続けました。
デバッガ上で `sxi ld`を介して ModLoad 通知を無効にすることにより、大量の追加処理を引き起こすことなく、System.dll ファイルをロードさせることに成功しました。しかしここで、Crypt0l0cker によりデバッガの CPU 使用率が 80 % を超え、最大で 99 % まで急上昇しました。
そこで PE イメージ ファイルを出力し、FIRST で分析を続ける準備をしました。
実際のファイルの検出
繰り返しになりますが、FIRST を使用する最初の手順は、IDA Pro で抽出されたファイルを開くことです。このファイルは、Visual Studio C ランタイム上に Windows GUI ファイルとしてビルドされています。このためランタイムが自動分析中に識別され、_WinMain@16 関数がグラフ画面に表示されました。コンテキストメニューから FIRST コマンドを使用して、関数のメタデータの存在を確認します。すると、「Crytp0l0cker_WinMain@16」を発見しました。これは本当に Crytp0l0cker であるようです。
分析結果に「_WinMain@16」が含まれていたことで FIRST の価値を再確認できました。次に、ファイル全体を検索しました。436 個の関数が存在するため、しばらく時間がかかります。休憩時間などを利用すると良いかもしれません。このファイルは既知のランタイムを使用するため、ランタイム ファイルも FIRST にアップロードされています。[Show only “sub_” functions(sub_ 関数だけを表示する)]チェックボックスをオンにすることで、これらの関数に絞り込むこともできます。
FIRST による処理が完了すると、既知の関数 295 個のうち、78 個の関数にマークアップが新たに適用されます。こうして特定された 78 個の Crytp0l0cker_* 関数については、プロ向けマルウェア分析ツールで詳細に分析できます。
まとめ
FIRST により、対象ファイルのバージョンの前後を問わず、類似ファイル間で分析内容を共有できます。モジュール型実行ファイルに追加されたステップに対しても効力を発揮します。FIRST で新しいファイルを開くことで、類似ファイルが以前に発見されているか、あるいはそのままアンパックすべきかのヒントを得られます。最終的に新しい埋め込みバイナリを抽出した際でも、FIRST は現在のファイルから新しいファイルの共有コードに分析作業を移植できます。FIRST を使用して分析結果を保存し、発見内容を共有することで、次回の分析をスピードアップできます。
IOC
ファイル ハッシュ
d845e4f2292ba78a993dbbf6f1317894ce1a795c096d7959f3d718e583f1cea3
本稿は 2017年8月3日に Talos Group のブログに投稿された「Taking the FIRST look at Crypt0l0cker」の抄訳です。