マルウェア解析奮闘記 ~破損マルウェアを解析せよ~

5月某日、ある検体を入手しました。この時点ではマルウェアなのかどうかは不明でしたが、様々なツール(VirusTotal、サンドボックス、IDA Proなど)の解析の結果は壊れているファイルとなっており、正しい解析結果が得られませんでした。そのため、手動で解析することになりました。

その解析の流れと結果を書きます。

■バイナリエディタで目grep

まずはファイルタイプの調査から開始しました。

Image01

図1、バイナリエディタ

見ての通り、PEファイルです。ただし、後半部分に白い線がたくさん入っていたり(NULLバイトが連なっている)、中盤が赤い(ASCIIコードが多い)割には意味のありそうな文字列は見当たらなかったりと難読化、暗号化が施されているPEファイルではないかと推測しました。

ちなみにVirusTotalにアップロードした結果、検出率は5/52と低めで、ここでもファイルが壊れている旨の検知結果が見られました。

Image02_2

図2、VirusTotalの結果

■PEヘッダの調査

次に行ったのがPEヘッダの調査でした。PEViewというツールで開いた結果です。

Image03

図3、PEViewで検体を開いた結果

IMAGE_FILE_HEADERのCharacteristics(赤線)から、EXEファイルではなく、DLLファイルであることが分かりました。しかし、IMAGE_OPTIONAL_HEADER以降のヘッダが存在しませんでした。通常のファイルはIMAGE_OPTIONAL_HEADERやIMAGE_SECTION_HEADERがあります(下図)。

Image04

図4、PEViewで正常なDLLファイルを開いた結果

再び、バイナリエディタに戻り、IMAGE_FILE_HEADER以降を確認したところ、IMAGE_OPTIONAL_HEADERのマジックナンバー(目印)である、「0B 01」(赤枠)がありました。

Image05

図5、OPTIONAL_HEADERのマジックナンバー

さらに、セクション名と思われる「.text」「.data」(赤線)などが見つかりました。破損している箇所はPEヘッダのみであるという仮説を立てて、PEヘッダの矛盾点を探すことにしました。

■PEヘッダの不審な点の調査

正常なファイルとIMAGE_FILE_HEADERと比較を行いました。

Image06_4

図6、PEヘッダの差異

IMAGE_OPTIONAL_HEADERのサイズが00D0(208バイト)となっていました。MSDNで調べてみるとIMAGE_OPTIONAL_HEADER構造体は固定長の長さ232バイ(00E0)で定義されていました。

■PEヘッダの修正

試しにSize of Optional Headerを0x00D0から0x00E0に変更し、PEViewで開き直しました。

Image07

図7、修正後の検体のPEViewで開いた結果

矛盾がなくなり、正常にIMAGE_OPTIONAL_HEADER以降が表示されるようになり、IDA Proで解析できるようになり、サンドボックス、Virus Totalの結果がすべてマルウェアとして判定される解析結果となりました。

以下はPEヘッダ修正後のVirusTotalの結果です。

Image08_3

図8、PEヘッダ修正後

検出率が修正前の 5 から 23 と大幅に上がりました。

■推察

VirusTotalの結果からも分かる通り、様々なセキュリティ対策では、PEヘッダが壊れていると正しく判定できない場合があります。マルウェアの作成者はこうしたセキュリティ対策をすり抜けるために、あえて、1バイトのみPEヘッダを改ざんしたものと思われます。

さらに、修正後のマルウェアを調べたところ、Kazy (md5:8b9d534750e0d37ab9acc7bb70f6617e)というマルウェアを生成する「ドロッパー」であることが分かりました。

このことから、一連の攻撃は以下の通り、行われたと推察できます。

Image09

図9、一連の攻撃(一部想像)

■最後に

過去にも同様の手口でMZヘッダの「M」が足りないマルウェアなどが見つかっています。このようにマルウェアは実行できない状態で配送されて、セキュリティ対策の検知を免れた後に、クライアント上で修復されて実行されるケースがあります。

そのため、実行できないマルウェアが見つかっても、安心せずに、1次検体の存在を疑い、調査をされることをお勧めします。

前へ

APT1より危険な攻撃者グループ

次へ

中国人民解放軍61486部隊(PUTTER PANDA)に関する情報