マルウェア解析メモ #2 表層解析1
概要
最近勉強しているマルウェア解析についての備忘録。
表層解析概要
表層解析では、解析対象を実行せずに解析を行う。解析のコストが少ない分、明らかになる情報は多くないが、その後の解析の方針を決めるのに役立つ。
得られる情報:
- ファイル形式
- ハッシュ値
- ファイルに含まれる文字列
- パッカー
- PEヘッダ情報 etc.
代表的なツール:
- バイナリエディタ各種
- fileコマンド
- stringsコマンド
- TrID (http://mark0.net/soft-trid-e.html)
- VirusTotal (https://www.virustotal.com/gui/) etc.
ファイル形式の判定
ファイル形式は、ファイルの先頭バイト列のパターン(ファイルシグニチャ)から判定する。
例えば、Windowsの実行ファイル(.exe, .dll など)はファイルの先頭2バイトが"MZ"(4D 5A)となっている。
ファイルシグニチャは以下のWebページで確認できる。
https://filesignatures.net/
バイナリエディタを使用した判定
HxD(https://mh-nexus.de/en/hxd/)などのバイナリエディタでファイルシグニチャを確認する。以下は、calc.exeをバイナリエディタで開いた際のイメージ。
Linuxでは、xxd -g 1 <ファイル名>
でファイルシグニチャの確認が可能。
$ xxd -g 1 calc.exe | head 00000000: 4d 5a 90 00 03 00 00 00 04 00 00 00 ff ff 00 00 MZ.............. 00000010: b8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 ........@....... 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000030: 00 00 00 00 00 00 00 00 00 00 00 00 e8 00 00 00 ................ 00000040: 0e 1f ba 0e 00 b4 09 cd 21 b8 01 4c cd 21 54 68 ........!..L.!Th 00000050: 69 73 20 70 72 6f 67 72 61 6d 20 63 61 6e 6e 6f is program canno 00000060: 74 20 62 65 20 72 75 6e 20 69 6e 20 44 4f 53 20 t be run in DOS 00000070: 6d 6f 64 65 2e 0d 0d 0a 24 00 00 00 00 00 00 00 mode....$....... 00000080: da 20 07 44 9e 41 69 17 9e 41 69 17 9e 41 69 17 . .D.Ai..Ai..Ai. 00000090: 97 39 fa 17 98 41 69 17 8a 2a 6a 16 9f 41 69 17 .9...Ai..*j..Ai.
fileコマンドを使用した判定
Linuxでは、fileコマンドでファイル形式を判定できる。
$ file calc.exe calc.exe: PE32 executable (GUI) Intel 80386, for MS Windows
ハッシュ値の生成
ハッシュ値はファイル同一性の識別子として利用される。
Web検索やVirusTotal等のデータベースを検索することで、同一マルウェアの情報を得ることができる。
Linuxでは、md5sum等のコマンドでハッシュ値を生成する。以下では、calc.exeおよびコピーされたcalc.exe.copyが同一ハッシュ値であることがわかる。
$ md5sum calc.exe 961e093be1f666fd38602ad90a5f480f calc.exe $ sha1sum calc.exe 3574fc3a80d80146a7067a478db209e452757950 calc.exe $ sha256sum calc.exe b183bd6414c5123465075d76d2413c999d569492fb543acbc29690b4b745bdf2 calc.exe $ cp calc.exe calc.exe.copy $ sha1sum calc.exe.copy 3574fc3a80d80146a7067a478db209e452757950 calc.exe.copy
WindowsではHashMyFiles(https://www.nirsoft.net/utils/hash_my_files.html)等のツールを利用してハッシュ値を生成する。
VirusTotalを利用したファイルのスキャン
VirusTotal(https://www.virustotal.com/)では複数のマルウェア対策製品のパターンでスキャンすることができる。
あくまでもマルウェア検索製品によるスキャンのため、必ずしもがファイルが安全か危険か判断できるわけではないが、参考情報として利用する。
ファイルのアップロードを行いスキャンする他、ハッシュ値、URL、ドメイン、IPアドレスでスキャン結果を検索することができる。
以下はEmotetのダウンローダをスキャンした結果。複数のマルウェア対策製品でDownloaderとして判定されていることがわかる。
以下はcalc.exeをスキャンした結果。
表層解析と少し話がずれるが、当該ファイル実行時に発生する通信等の情報も確認することができる。
文字列の抽出
ファイル内に埋め込まれたUnicode、ASCIIで表現可能な文字列を抽出することで、マルウェアの機能や動作(通信先, 参照レジストリキー, etc.)についてのヒントを得られることがある。
stringsコマンドで、ファイル内の文字列を抽出することができる。
$ strings -a calc.exe !This program cannot be run in DOS mode. Rich .text `.data .idata @.rsrc @.reloc CalculatorStarted ETW0 CalculatorWinMain "CalculatorStarted" P/!) MicrosoftCalculator RSDS calc.pdb ...
パッカーの判別
パッカーとは
パッカーはマルウェアの難読化手法として利用されるが、本来はプログラムを圧縮するもの。パック前後の実行ファイルのイメージは以下。
calc.exeをUPXでパッキングする。(calc_packed.exe)
$ upx -o calc_packed.exe calc.exe Ultimate Packer for eXecutables Copyright (C) 1996 - 2020 UPX 3.96 Markus Oberhumer, Laszlo Molnar & John Reiser Jan 23rd 2020 File size Ratio Format Name -------------------- ------ ----------- ----------- 26112 -> 24064 92.16% win32/pe calc_packed.exe Packed 1 file.
stringsコマンドでファイル内の文字列を抽出してみると、本来の文字列が抽出されないことがわかる。
(ただ、UPXでパッキングしたっぽい臭いは醸し出している...)
$ strings -a calc_packed.exe !This program cannot be run in DOS mode. Rich UPX0 UPX1 .rsrc 3.96 UPX! 9CalculatorStart3 ETW0 WinMa P/!) Microsoft/ RSDS c9.pdb ...
Exeinfo PEを使用したパッカーの判別
calc_packed.exeを Exeinfo PE(http://exeinfo.atwebpages.com/)に食わせてみると、UPXでパッキングされていることがわかる。
TrIDを使用したパッカーの判別
TrID(https://mark0.net/soft-trid-e.html)を使用しても、同様にUPXでパッキングされていることがわかる。
$ ./trid calc_packed.exe TrID/32 - File Identifier v2.24 - (C) 2003-16 By M.Pontello Definitions found: 13691 Analyzing... Collecting data from file: calc_packed.exe 39.9% (.EXE) UPX compressed Win32 Executable (27066/9/6) 24.3% (.EXE) Microsoft Visual C++ compiled executable (generic) (16529/12/5) 10.3% (.EXE) Win16 NE executable (generic) (7038/12/2) 9.7% (.DLL) Win32 Dynamic Link Library (generic) (6578/25/2) 6.6% (.EXE) Win32 Executable (generic) (4505/5/1)
参考文献
Monnappa K A (2018). Learning Malware Analysis: Explore the concepts, tools, and techniques to analyze and investigate Windows malware