IIJ-SECT

IIJ

 

Security Diary

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

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

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

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

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


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

タイムラインの生成

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

タイムラインの生成

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

maliciousなコードの検出

Volatility Frameworkのmalfindプラグイン、EnCase EnScriptのVadDumpモジュール[3]、Mandiant Redline[4]などを使うことによって、特定のプロセスにおいてインジェクトされたコード領域を検出することが可能になります。たとえば、VadDumpを使うと、コードインジェクションが疑われるプロセスアドレス空間のみをダンプしてくれます。その後ダンプされたファイルをスキャンすることで、クイックにコードインジェクションの有無や(うまくいけば)マルウェアの種類まで判定することが可能です。

VadDump

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

Redline

メモリフォレンジックのツールの中には、より高度な検出機能を備えたものがあります。HBGary ResponderのDigital DNA[5]と呼ばれる機能はSpyEyeや一部のRATが行う難読化のためのAPI解決のテクニックを検出します[6]

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

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

VadSearch1

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

VadSearch2

もし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 ↩

-
 
カテゴリー :
技術解説  
タグ :
Malware   Forensics  
この記事のURL :
https://sect.iij.ad.jp/d/2011/12/194028.html