メモリフォレンジックによるマルウェア感染痕跡の調査

タイムラインの生成

メモリフォレンジックは、揮発性のデータを解析する技術です。インシデントレスポンスにおいては、「どこと通信していたか」「どんなプログラムやスレッドが動いていたか」「どのようなデータがメモリ上にマッピングされていたか」などの情報がしばしば重要になってきます。メモリフォレンジックをうまく活用することで、これらの情報を抽出することが可能になります。今回は、メモリフォレンジックのテクニックを用いてマルウェアの感染痕跡を調べる方法を紹介します。

数年前まで、揮発性のデータを取得する方法は、対象のマシン上でプロセス情報や通信情報などを出力するコマンド(たとえば、netstat)を実行するやり方が主流でした。しかしこのやり方では、以下の二種類の情報を取得することができません。

  • API のフックやリンクリストの改ざんなどにより、意図的に隠蔽されている情報
  • 終了したプロセスなど、既に開放されたメモリ領域に存在する情報

メモリフォレンジックはまず対象のシステムのメモリ領域を全て一度ダンプして、それに対して独自の実装で解析を行います。メモリフォレンジックは汚染されている可能性のある対象システムの API に頼らず、また、開放された領域もチェックするので、上記の情報も含めて取得できます[1]メモリフォレンジックのためのダンプを妨害する手法も PoC レベルでは存在する。たとえば、ShadowWalker は TLB … Continue reading。今回はマルウェア感染時の対応例として、情報搾取型のマルウェアである SpyEye の感染痕跡を調べてみます。

タイムラインの生成

ファイルシステムのタイムスタンプからタイムラインを生成して、そのシステムでどのような活動が行われたか推測するテクニックは従来から行われてきましたが、昨今のマルウェアはタイムスタンプの改ざんを行う機能を持っているものが多いため、ファイルシステム以外から抽出できる時間情報の活用が重要になってきています。その1つとして、メモリフォレンジックを活用して作成できる揮発性情報のタイムラインがあります。たとえば、Volatility Framework のプラグインである timeliner[2]Volatility Framework … Continue reading を使うと、プロセスやスレッド、ソケット通信やイベントログの生成情報を時系列でチェックできます。

タイムラインの生成
タイムラインの生成

作成されたタイムラインから、ボットのプロセス開始の直後に explorer.exe が TCP で通信を開始したことがわかります。これは以前のエントリ「SpyEye ボットによるリソースデータの使用」で紹介したとおり、SpyEye のコードインジェクションによるものだと考えられます。ところで、その後はいくつかのプロセスにおいて、大量のスレッドが開始していることがタイムラインから見てとれます。これはコードインジェクションによって生じているものなのでしょうか?あるプロセスがコードインジェクションをされたかどうかを調べるには、次で紹介するテクニックが役立ちます。

malicious なコードの検出

Volatility Framework の malfind プラグイン、EnCase EnScript の VadDump モジュール[3]メモリフォレンジックの EnScript は Volatility Framework をベースにして、64ビット対応やキーワードサーチ機能など EnCase … Continue reading、Mandiant Redline[4]Redline は Mandiant 社によって開発・提供されているフリーツールで、同社で開発されている Memoryze という解析ツールの GUI … Continue reading などを使うことによって、特定のプロセスにおいてインジェクトされたコード領域を検出することが可能になります。たとえば、VadDump を使うと、コードインジェクションが疑われるプロセスアドレス空間のみをダンプしてくれます。その後ダンプされたファイルをスキャンすることで、クイックにコードインジェクションの有無や(うまくいけば)マルウェアの種類まで判定することが可能です。

malicious なコードの検出(1)
malicious なコードの検出(1)

下の図は Redline を使った場合の例になります。explorer.exe のメモリ空間において、インジェクトされたバイナリが存在することと、そのバイナリがエクスポートしている関数名を表示してくれます。表示されている関数名から、そのバイナリが SpyEye のプラグイン DLL であると推測できます。

malicious なコードの検出(2)
malicious なコードの検出(2)

メモリフォレンジックのツールの中には、より高度な検出機能を備えたものがあります。HBGary Responder の Digital DNA[5]HBGary Responder は HBGary 社によって開発・販売されている商用のメモリフォレンジックツール。そのオプション機能として提供されている Digital DNA … Continue reading と呼ばれる機能は SpyEye や一部の RAT が行う難読化のための API 解決のテクニックを検出します[6]以下の HBGary 社のブログでは、Digital DNA を使って RAT の API 解決テクニックを検出する手法が紹介されている。Detecting APT Attackers in Memory with Digital DNA … Continue reading

SpyEye の設定情報、搾取した情報の抽出

EnCase EnScript の VadSearch モジュールを使うことで、SpyEye の実行パスやインストールパス、config.bin の実際のファイル名など重要な情報をメモリから確認できます。以前のエントリ「SpyEye ボットによるリソースデータの使用」でお話したとおり、SpyEye ボットはこれらの情報を C1 という名前のリソースデータ内に格納します。SpyEye は C1 データを参照する際、その先頭にあるシグネチャ「!EYE」を検索します。VadSearch モジュールを使ってこのシグネチャをキーワードとして検索すると、下の図のように特定のプロセスアドレス空間においてマッチしたキーワードの周辺を参照できます。

SpyEye の設定情報、搾取した情報の抽出(1)
SpyEye の設定情報、搾取した情報の抽出(1)

また、SpyEye が盗んで外部に送信した情報も検索することができます。SpyEye ボットは盗んだ web フォームの情報を Collector と呼ばれるデーモンプログラムに送信します。その送信データには、盗んだ情報だけでなく、プロセス名やフックした関数名の情報も含まれます。たとえば、下の図のようにフックした関数名に関する情報であることを示す「hooked_func」というキーワードを検索すると、送信データ一式を取得できる可能性があります。

SpyEye の設定情報、搾取した情報の抽出(2)
SpyEye の設定情報、搾取した情報の抽出(2)

もし VadSearch を使わずダンプしたメモリのファイル全体をリニアにサーチした場合、仮想アドレス空間と物理アドレス空間のマッピングができないので、データが物理的に断片化しているとキーワードがヒットしない可能性があります。メモリフォレンジックのツールである VadSearch を使うと、そのような懸念がなくなるほか、どのプロセスに所属するデータがヒットしたかという情報も入手することができます。

まとめ

メモリフォレンジックには過去に接続していた TCP コネクションの情報など開放済みのオブジェクトの情報を抽出できるというメリットがあります。今回はこれを使って SpyEye の活動痕跡を調べるいくつかのテクニックを紹介しました。今回紹介したもの以外にもメモリ上に存在するレジストリデータの解析やカーネルが使用するアドレステーブルのフックの検出など様々なテクニックがあります。また機会があればご紹介したいと思います。

脚注

脚注
1 メモリフォレンジックのためのダンプを妨害する手法も PoC レベルでは存在する。たとえば、ShadowWalker は TLB キャッシュがデータアクセス用と命令実行用に分かれていることを利用して、マルウェアが存在するメモリ領域の隠蔽を行うことができる。ただし、このやり方は IDT と呼ばれる割り込みテーブルのフックが必要になる。メモリフォレンジックの主要な解析ツールはそのフックを検出する機能を実装している。
“SHADOW WALKER” Raising The Bar For Rootkit http://www.blackhat.com/presentations/bh-jp-05/bh-jp-05-sparks-butler.pdf
2 Volatility Framework はオープンソースのメモリフォレンジックツール。プロセス情報の列挙など基本的な機能のほか、有志によって様々なプラグインが提供されている。timeliner はその有志の一人によって開発されている。
volatility An advanced memory forensics framework http://code.google.com/p/volatility/
Volatility 2.0: Timeliner, RegistryAPI, evtlogs and more http://gleeda.blogspot.com/2011/09/volatility-20-timeliner-registryapi.html
3 メモリフォレンジックの EnScript は Volatility Framework をベースにして、64ビット対応やキーワードサーチ機能など EnCase の特長を生かした改良が行われている。
Update: Memory Forensic EnScript http://cci.cocolog-nifty.com/blog/2011/03/memory-forensic.html
4 Redline は Mandiant 社によって開発・提供されているフリーツールで、同社で開発されている Memoryze という解析ツールの GUI フロントエンドとして使われている。
Redline http://www.mandiant.com/products/free_software/redline/
5 HBGary Responder は HBGary 社によって開発・販売されている商用のメモリフォレンジックツール。そのオプション機能として提供されている Digital DNA は、プロセスアドレス空間に含まれるコードを分析して、悪性のコードかどうかをスコアリングする。
Solutions :: Digital DNA http://hbgary.com/digital-dna
6 以下の HBGary 社のブログでは、Digital DNA を使って RAT の API 解決テクニックを検出する手法が紹介されている。
Detecting APT Attackers in Memory with Digital DNA http://www.hbgary.com/detecting-apt-attackers-in-memory-with-digital-dna

シェアする