マルウェア解析奮闘記 ~破損マルウェアを解析せよ~
5月某日、ある検体を入手しました。この時点ではマルウェアなのかどうかは不明でしたが、様々なツール(VirusTotal、サンドボックス、IDA Proなど)の解析の結果は壊れているファイルとなっており、正しい解析結果が得られませんでした。そのため、手動で解析することになりました。
その解析の流れと結果を書きます。
■バイナリエディタで目grep
まずはファイルタイプの調査から開始しました。
図1、バイナリエディタ
見ての通り、PEファイルです。ただし、後半部分に白い線がたくさん入っていたり(NULLバイトが連なっている)、中盤が赤い(ASCIIコードが多い)割には意味のありそうな文字列は見当たらなかったりと難読化、暗号化が施されているPEファイルではないかと推測しました。
ちなみにVirusTotalにアップロードした結果、検出率は5/52と低めで、ここでもファイルが壊れている旨の検知結果が見られました。
図2、VirusTotalの結果
■PEヘッダの調査
次に行ったのがPEヘッダの調査でした。PEViewというツールで開いた結果です。
図3、PEViewで検体を開いた結果
IMAGE_FILE_HEADERのCharacteristics(赤線)から、EXEファイルではなく、DLLファイルであることが分かりました。しかし、IMAGE_OPTIONAL_HEADER以降のヘッダが存在しませんでした。通常のファイルはIMAGE_OPTIONAL_HEADERやIMAGE_SECTION_HEADERがあります(下図)。
図4、PEViewで正常なDLLファイルを開いた結果
再び、バイナリエディタに戻り、IMAGE_FILE_HEADER以降を確認したところ、IMAGE_OPTIONAL_HEADERのマジックナンバー(目印)である、「0B 01」(赤枠)がありました。
図5、OPTIONAL_HEADERのマジックナンバー
さらに、セクション名と思われる「.text」「.data」(赤線)などが見つかりました。破損している箇所はPEヘッダのみであるという仮説を立てて、PEヘッダの矛盾点を探すことにしました。
■PEヘッダの不審な点の調査
正常なファイルとIMAGE_FILE_HEADERと比較を行いました。
図6、PEヘッダの差異
IMAGE_OPTIONAL_HEADERのサイズが00D0(208バイト)となっていました。MSDNで調べてみるとIMAGE_OPTIONAL_HEADER構造体は固定長の長さ232バイ(00E0)で定義されていました。
■PEヘッダの修正
試しにSize of Optional Headerを0x00D0から0x00E0に変更し、PEViewで開き直しました。
図7、修正後の検体のPEViewで開いた結果
矛盾がなくなり、正常にIMAGE_OPTIONAL_HEADER以降が表示されるようになり、IDA Proで解析できるようになり、サンドボックス、Virus Totalの結果がすべてマルウェアとして判定される解析結果となりました。
以下はPEヘッダ修正後のVirusTotalの結果です。
図8、PEヘッダ修正後
検出率が修正前の 5 から 23 と大幅に上がりました。
■推察
VirusTotalの結果からも分かる通り、様々なセキュリティ対策では、PEヘッダが壊れていると正しく判定できない場合があります。マルウェアの作成者はこうしたセキュリティ対策をすり抜けるために、あえて、1バイトのみPEヘッダを改ざんしたものと思われます。
さらに、修正後のマルウェアを調べたところ、Kazy (md5:8b9d534750e0d37ab9acc7bb70f6617e)というマルウェアを生成する「ドロッパー」であることが分かりました。
このことから、一連の攻撃は以下の通り、行われたと推察できます。
図9、一連の攻撃(一部想像)
■最後に
過去にも同様の手口でMZヘッダの「M」が足りないマルウェアなどが見つかっています。このようにマルウェアは実行できない状態で配送されて、セキュリティ対策の検知を免れた後に、クライアント上で修復されて実行されるケースがあります。
そのため、実行できないマルウェアが見つかっても、安心せずに、1次検体の存在を疑い、調査をされることをお勧めします。
フォローしませんか?