« ロシアの攻撃者(Energetic Bear)による日本への攻撃 | メイン | Network Indicators of C2 / C2の兆候を発見するためのCheat Sheet »

2014年3月 3日 (月)

PEヘッダでパッカーの有無を見分ける方法

マルウェアの多くはパッカーというツールで圧縮され、検知や解析を免れます。今回はそのパッカーで処理されているかどうかを簡単に見分ける方法をご紹介します。

 ■パッカーとは

 パッカーは圧縮ツールの一種でもともとハードディスクのサイズを抑えたり、ダウンロード時の通信量を減らしたりする目的で利用されてきました。しかし、近年ではマルウェアに悪用されるケースが非常に目立ってきております。マルウェア開発者は主にウィルス対策製品の検知を免れたり、解析をしづらくさせたりする目的でパッカーを利用します。そのため、パックされていることはマルウェアである可能性が高いということになります。

パッカーは圧縮ツールですが、zipや自己解凍形式などの圧縮とは少し異なります。パックされる対象は実行ファイル(.exe)のみです。そしてパックされて出来上がったファイルも実行ファイルとなります。その中に圧縮された元の実行ファイルが収められています。

Pack01_2

図1)パックされたファイルのイメージ

パックされたファイルを実行すると最初に解凍プログラムと元のファイルがメモリ上に展開されます。次に、解凍プログラムがメモリ上に元のファイルを解凍し、最後に元のファイルが実行されます。

Pack02_2

図2)パックされたファイルを実行する様子

パックされた元のファイルはメモリ上の実行セクション(命令が格納される領域)に解凍された後、実行されます。

■見分け方の概念

 通常のファイルとパックされたファイルは実行セクションに対する権限が異なります。

Pack03

図3)セクションに対する権限の比較

 上記の通り、実行セクションにおいて書き込み権限がある実行ファイルはパックされていると判断することができます。

Windowsではセクション用にメモリを確保する際、上記のような権限をセクションごとに設定します。書き込み権限がないセクションにデータを書き込もうとした場合は、アクセス保護違反が発生し、プログラムは強制終了します。そのため、パックされたファイルの実行セクションには必ず書き込み権限があります。

■見分け方の詳細

各セクションにどの権限を割り当てるかは実行ファイルのPEヘッダという領域に記されています。まずは、パックされていない一般的なファイルとして、Windowsのメモ帳(notepad.exe)を見てみましょう。以下はPEヘッダを確認する「PEView」というツールで開いた結果です。

Pack04_2

図4)メモ帳の命令セクション(.text)

左側ツリーの「IMAGE_SECTION_HEADER」から始まる項目がセクションを定義している箇所になります。メモ帳の場合は、セクションが4つあります。最初のセクションは「.text」という名前がついています。通常、「.text」や「.code」という名前を持つセクションは命令セクションとなりますが、単なる名前でしかないため、擬装が簡単にできます。格納されているもの(命令またはデータ)および許可されるオペレーションは「Characteristics」(赤枠)にて定義されています。

赤枠の「Characteristics」に以下のフラグが立っていることがわかります。

IMAGE_SCN_MEM_READ            読み取り可能

IMAGE_SCN_MEM_EXECUTE    実行可能

IMAGE_SCN_CNT_CODE             実行可能なコードが含まれる

 

読み取り権限と実行権限があることがわかります。次に、メモ帳のデータセクションを見てみます。

Pack05_2

図5)メモ帳のデータセクション(.data)

Characteristicsの値は以下の通りです。

IMAGE_SCN_MEM_WRITE                        書き込み可能

IMAGE_SCN_MEM_READ                          読み取り可能

IMAGE_SCN_CNT_INITIALIZED_DATA   初期化済みのデータが含まれる

 

実行権限がないため、データセクションであることが分かります。

 

ここでは割愛しますが、同様に見ていくと他のセクション(.rsrcおよび.reloc)は以下のフラグが立っています。

IMAGE_SCN_MEM_READ(読み取り可能)

IMAGE_SCN_MEM_DISCARABLE(破棄可能)

ポイントは、「実行」および「書き込み」のフラグが両方立つことがないということです。

では、いよいよパックされたファイルを見てみましょう。メモ帳を「Morphine」というパッカーで処理した結果です。

Pack06_2

図6)パックされたメモ帳の実行セクション(.text)

Characteristicsの値は以下の通りです。

IMAGE_SCN_MEM_WRITE(書き込み可能)

IMAGE_SCN_MEM_READ(読み取り可能)

IMAGE_SCN_MEM_EXECUTE(実行可能)

IMAGE_SCN_CNT_CODE(実行可能なコードが含まれる)

 「実行」および「書き込み可能」いずれのフラグもついています。

 パッカーの性質上、命令セクションに元の命令を解凍するため、書き込み権限が求められ、さらに解凍後に実行するため、実行の権限も必要となります。そのため、パックされているファイルの命令セクションは「書き込み」および「実行」が可能になっています。

■具体的な手順

1.調べたい検体をPEViewで開きます。

2.左側のツリーから「IMAGE_SECTION_HEADER .xxxx」を選択します。

3.右ペインの「Characteristics」欄を確認し、以下のフラグがいずれもあるかどうかを調べます。

  ・IMAGE_SCN_EXECUTE

  ・IMAGE_SCN_MEM_WRITE

  あれば、パックされている可能性が高いです。なければパックされていないということになります。

4.残りのセクション「IMAGE_SECTION_HEADER .yyyy」に対しても、手順3同様に調べます。

« ロシアの攻撃者(Energetic Bear)による日本への攻撃 | メイン | Network Indicators of C2 / C2の兆候を発見するためのCheat Sheet »

Macnica Networks Corp.
セキュリティ研究センター

サイバーセキュリティに特化した研究を行うことを目的に2013年4月に開設。

■ミッション

・Threat Research

・Solution Research

・Education
 

小林 靖幸
マルウェアの動的解析と培養を担当。温和な見た目とは裏腹に、休日は鋭い眼光でサイバー空間の監視を行う一人SOCで活動中。好きなデバッガーはx64dbg。

竹内 寛
リバースエンジニアリング(マルウェア解析)を担当。彼の手に渡ったマルウェアはまさに“まな板の上の鯉”と同じ。あとは解析されるがまま。最近の楽しみは、ハイボールを片手に海外ドラマを鑑賞するか、マントノン侯爵夫人に会うこと。好きなマシン語は、EB FE。

柳下 元
リバースエンジニアリング(マルウェア解析)を担当。動的解析では動いてくれないマルウェアの皮を一枚一枚剥がしていく職人技が持ち味。

凌 翔太
CTF、IoTハッキング、マルウェアペンテストツールの開発を担当。Black Hat/DEF CONにてツールを発表。セキュリティキャンプ講師、SECCON実行委員。

政本 憲蔵
インフラ分析とOSINT分析を担当。
Back Orifice/NetBusの時代からRATに興味を持ち現在に至る。好きなことはMaltego Transformの開発とレゴブロック。

BlackHat