Twitterに書ききれないこと

イベントや技術的なことを記したい・・・

Practical Malware Analysis Chapter 3

マルウェア解析についての有名な書籍にPractical Malware Analysisがある。

その書籍を勉強のために翻訳・要約した記事。

全訳ではないので、詳細は原書を読んでください。

Practical Malware Analysis: The Hands-On Guide to Dissecting Malicious Software

Practical Malware Analysis: The Hands-On Guide to Dissecting Malicious Software

3章 基本的な動的解析

動的解析では、マルウェアを実行して解析を行う。 マルウェア解析における、2段階目のプロセスである。

典型的な例として、マルウェアがパッキングや難読化されており、静的解析では解析できない場合に動的解析を行う。

静的解析とは異なり、動的解析では、マルウェアの実際の機能を観察することができる。 動的解析は静的解析と比べて効率がよい解析方法である。 また、動的解析では、マルウェアの挙動を追えばよいので、静的解析と比べ必要な洞察力少ない。

動的解析技術は非常に強力だが、ネットワークやシステムを危険にさらすため、基本的な静的解析を行った後でのみ、実施するべきである。 動的解析で解析可能なのは、実行されるパスのみで、全ての実行パスを解析することができない。 例えば引数が必要なマルウェアの場合、オプションを知らなければ解析することが出来ない。

こういった場合は、マルウェアの機能を全て明らかにするため、高度な静的解析、動的解析が必要となる。

サンドボックス

基本的な動的解析で一般的なものは、サンドボックスによる解析である。 サンドボックスは、「本物の」システムに害を与えることなく、安全な環境でマルウェアを実行するためのセキュリティ機構である。

マルウェア解析用サンドボックスの使用

マルウェア解析用のサンドボックスを以下に列挙する。

  • Norman SandBox
  • GFI Sandbox
  • Anubis
  • Joe Sandbox
  • ThreatExpert
  • BitBlaze
  • Comodo Instant Malware Analysis

Norman SandBox、GFI Sandboxが人気がある。

これらのサンドボックスは便利であるが、Webサイトにマルウェアをアップロードしないといけないため、企業情報などが含まれる検体はアップロードしないだろう。

サンドボックスの欠点

マルウェア解析用のサンドボックスは、いくつかの大きな欠点を持っている。

いくつかのサンドボックスは、コマンドラインオプションを指定して実行することができない。 この場合、引数を必要とするマルウェアの解析を行えない。
加えてマルウェアがC&C通信を行う場合、サンドボックス内で解析ができない。
マルウェアが悪意のある挙動をする前にスリープ状態になった場合、全ての挙動を記録できない可能性がある。

他にも次のような欠点がある。

マルウェアの実行

マルウェアがexeファイル、DLLファイルの場合の実行方法について述べる。 exe形式ならダブルクリックをするか、コマンドラインから起動することができる。
DLLの場合、以下のコマンドで起動することができる。

C:\>rundll32.exe DLLname, Export arguments

rundll32.exeは、Windowsのすべてのバージョンに含まれている。 Exportには、エクスポートしている関数名を指定する。

また、序数を指定して関数を呼び出すこともできる。

C:\>rundll32.exe xyzzy.dll, #5

悪意のあるDLLはDLLMain(DLLエントリポイントから呼び出される箇所)でコードの大部分を実行する。 DLLがロードされるたびのDLLMainが実行されるため、rundll32.exeを使用して、強制的DLLをロードすることで、動的解析を行える。

また、PEヘッダと拡張子を変更することで、強制的に実行ファイルにすることができる。 PEヘッダのIMAGE_FILE_HEADERのCharacteristicsフィールドのIMAGE_FILE_DLL(0x2000番地)フラグを変更する。 この方法では、インポート関数を実行せず、DLLMainメソッドを実行する。 しかし、マルウェアがクラッシュしたり、予期せず終了する可能性がある。 クラッシュしても、マルウェア解析に必要な情報が収集できれば問題ない。

ipr32x.dllにエクスポートされているInstallServiceを使い、サービスとしてインストールする方法ある。

C:\>rundll32 ipr32x.dll,InstallService ServiceName
C:\>net start ServiceName

インストールして実行できるようにServiceNameにマルウェアを指定する。
net startコマンドは、Windowsシステム上でサービスを開始するために使用できる。

エクスポート関数を使用せずに、サービスを手動でインストールする方法として、Windowsのscコマンドを使用する方法とレジストリを変更する方法がある。HKLM\SYSTEM\CurrentControlSet\Servicesに格納されている。

Process Monitorによる監視

Process Monitorは、プロセスのレジストリファイルシステム、ネットワーク、プロセス、スレッドなどの動作を監視するツールである。

しかし、 ルートキットが使用するI/Oコントロールデバイスを介したユーザーモードコンポーネントデバイスドライバの活動や、SetWindowsHookExなどの特定のGUIのコールはフックしていない。

Process Monitor

Process Explorerによるプロセスの表示

Process Explorerは、Microsoftから無料で提供されている非常に強力なタスクマネージャである。 アクティブなプロセスの一覧、プロセスによって読み込まれたDLL、 様々なプロセスのプロパティ、システム全体の情報を確認できる。 また、プロセスを強制終了させ、ユーザをログアウト、プロセスの起動を検証することができる。

Process Explorer

Regshotによるレジストリスナップショットの比較

Regshotは、2つのレジストリのスナップショットを比較することができる、オープンソースレジストリ比較ツールである。 マルウェア実行前のスナップショットと実行後のスナップショットを比較し、マルウェアによるレジストリの変更を解析する。

ネットワークの偽造

マルウェアは多くの場合、C&Cサーバと通信する。 DNS名、IPアドレス、パケットを偽装し、偽のネットワークを作成することで、実際にインターネットに接続せずに、通信を偽装することができる。

ApateDNSの使用

Research: Mandiant ApateDNS | FireEye

ApateDNSは、Mandiantが提供する無料のツールです。これは、マルウェアによって行われたDNSリクエストを確認する最も簡単な方法である。 ApateDNSは、ローカルマシン上のUDPポート53でリッスンすることにより、ユーザが指定したIPアドレスへのリクエストに対して、DNSレスポンスを偽装する。 ApateDNSは、受信したすべての要求を16進数とASCII結果を表示することができる。

Netcatを使用したモニタリング

Netcat for Windows

Netcatは、TCP/IPの万能ツールである。ポートスキャン、トンネル、プロキシ、ポート転送、インバウンド・アウトバウンド接続などに使用できる。 リッスンモードではサーバとして動作し、コネクトモードでは、クライアントとして動作する。

netcatは、ネットワークへ送信するために、標準入力からデータを取得する。 受信データは全て標準出力経由で出力される。

Wiresharkによるパケットスニッフィング

Wireshark · Download

Wiresharkは、オープンソースのパケットキャプチャツールである。 Wiresharkは、パケットの視覚化、パケットストリームの解析、個々のパケットの詳細な解析を提供する。 マルウェアがネットワーク通信を盗聴することで、マルウェアの通信方法を理解することができる。

INetSimの使用

INetSim: Internet Services Simulation Suite - Downloads

INetSimは、一般的なインターネットサービスをシミュレートするためのツールである。 Windowsで簡単に利用するには、Linux仮想マシンにINetSimをインストールして、マルウェアの解析用の仮想マシンと同じ仮想ネットワーク上で設定する。 INetSimを使用すると、HTTP、HTTPSFTPIRCDNSSMTP、などのサービスをエミュレートすることにより、未知のマルウェアのサンプルのネットワークの挙動を解析することができる。

INetSimがエミュレートするサービスを以下に列挙する。

  • dns 53/udp/tcp - started (PID 9992)
  • http 80/tcp - started (PID 9993)
  • https 443/tcp - started (PID 9994)
  • smtp 25/tcp - started (PID 9995)
  • irc 6667/tcp - started (PID 10002)
  • smtps 465/tcp - started (PID 9996)
  • ntp 123/udp - started (PID 10003)
  • pop3 110/tcp - started (PID 9997)
  • finger 79/tcp - started (PID 10004)
  • syslog 514/udp - started (PID 10006)
  • tftp 69/udp - started (PID 10001)
  • pop3s 995/tcp - started (PID 9998)
  • time 37/tcp - started (PID 10007)
  • ftp 21/tcp - started (PID 9999)
  • ident 113/tcp - started (PID 10005)
  • time 37/udp - started (PID 10008)
  • ftps 990/tcp - started (PID 10000)
  • daytime 13/tcp - started (PID 10009)
  • daytime 13/udp - started (PID 10010)
  • echo 7/tcp - started (PID 10011)
  • echo 7/udp - started (PID 10012)
  • discard 9/udp - started (PID 10014)
  • discard 9/tcp - started (PID 10013)
  • quotd 17/tcp - started (PID 10015)
  • quotd 17/udp - started (PID 10016)
  • chargen 19/tcp - started (PID 10017)
  • dummy 1/udp - started (PID 10020)
  • chargen 19/udp - started (PID 10018)
  • dummy 1/tcp - started (PID 10019)

INetSimは、実サーバに見えるように最善を尽くす。
スキャンされた場合、デフォルトでMicrosoft IIS Webサーバのバナーを返す。
INetSimは、HTTPやHTTPSで要求されファイルをほとんど提供することができる。マルウェアが動作を継続するために、ウェブサイトからのJPEGを要求した場合、INetSimは適切にJPEGフォーマットのレスポンスを返す。 これによってマルウェアは動作をいじすることができる。

INetSimのサービスがリッスンしているポートは、変更が可能である。 また、マルウェア解析のために作られたので、受信したすべてのデータをログに記録するなど、様々な機能がある。 マルウェアの接続やデータの送信に使用されるすべてのポートを記録することができる。

基本的な動的解析ツールの実践

  1. procmonのを実行し、マルウェアの実行ファイル名をフィルタに設定する。実行する前にすべてのイベントをクリアする。
  2. プロセスエクスプローラを起動する。
  3. Regshotを使用し、レジストリのスナップショットを収集します。
  4. INetSimとApateDNSを使用し、仮想ネットワークをセットアップする。
  5. Wiresharkのを使用してネットワークトラフィックのログを設定する。