keroqueue logs

アウトプット癖をつけるために始めました。何を書くかはよくわかりません。


マルウェア解析メモ #2 表層解析1

概要


最近勉強しているマルウェア解析についての備忘録。

表層解析概要


表層解析では、解析対象を実行せずに解析を行う。解析のコストが少ない分、明らかになる情報は多くないが、その後の解析の方針を決めるのに役立つ。

得られる情報:

  • ファイル形式
  • ハッシュ値
  • ファイルに含まれる文字列
  • パッカー
  • PEヘッダ情報 etc.

代表的なツール:

ファイル形式の判定


ファイル形式は、ファイルの先頭バイト列のパターン(ファイルシグニチャ)から判定する。
例えば、Windowsの実行ファイル(.exe, .dll など)はファイルの先頭2バイトが"MZ"(4D 5A)となっている。
ファイルシグニチャは以下のWebページで確認できる。
https://filesignatures.net/

バイナリエディタを使用した判定

HxD(https://mh-nexus.de/en/hxd/)などのバイナリエディタでファイルシグニチャを確認する。以下は、calc.exeをバイナリエディタで開いた際のイメージ。 f:id:keroqueue:20210117121730p:plain

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)等のツールを利用してハッシュ値を生成する。 f:id:keroqueue:20210117124707p:plain

VirusTotalを利用したファイルのスキャン


VirusTotal(https://www.virustotal.com/)では複数のマルウェア対策製品のパターンでスキャンすることができる。
あくまでもマルウェア検索製品によるスキャンのため、必ずしもがファイルが安全か危険か判断できるわけではないが、参考情報として利用する。 ファイルのアップロードを行いスキャンする他、ハッシュ値、URL、ドメインIPアドレスでスキャン結果を検索することができる。

以下はEmotetのダウンローダをスキャンした結果。複数のマルウェア対策製品でDownloaderとして判定されていることがわかる。
f:id:keroqueue:20210117164107p:plain

以下はcalc.exeをスキャンした結果。 f:id:keroqueue:20210117164144p:plain

表層解析と少し話がずれるが、当該ファイル実行時に発生する通信等の情報も確認することができる。 f:id:keroqueue:20210117164448p:plain

文字列の抽出


ファイル内に埋め込まれた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
...

パッカーの判別


パッカーとは

パッカーはマルウェアの難読化手法として利用されるが、本来はプログラムを圧縮するもの。パック前後の実行ファイルのイメージは以下。 f:id:keroqueue:20210204233228p:plain

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でパッキングされていることがわかる。 f:id:keroqueue:20210205011530p:plain

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