1
0
mirror of https://github.com/nganhkhoa/malware.git synced 2024-06-10 21:32:07 +07:00
mether049-malware/malware-analysis_ref_and_memo.md
2020-07-29 19:44:27 +09:00

46 KiB
Raw Blame History

Tools

OS/VM

  • FLARE VM
    FireEye社が提供するマルウェア解析, DFIR, ペネトレーションテストに特化したWindowsベースのディストリビューション
    Practical Malware Analysis Labsが同梱
  • REMnux
    SANSが提供するリバースエンジニアリングマルウェア解析に特化したUbuntuベースのディストリビューション
  • Tsurugi Linux
    DFIR,マルウェア解析OSINTに特化したUbuntuベースのディストリビューション
  • Ninjutsu OS
    ペンテストred team用のWindowsベースディストリビューション800以上のtoolsが含まれている

Static Analysis and Debug tools

※空欄は調査中(更新予定)

name disassembler decompiler debugger reference
IDA pro (Not free)
Snowman(plugin)
Binary Ninja
Cutter r2dec,r2ghidra native
gdb
windbg
etc.
INTRO TO CUTTER FOR MALWARE ANALYSIS(2019-03)
megabeets.net
Cutter: Presenting r2ghidra Decompiler,r2con 2019
Ghidra Reversing WannaCry Part 2 - Diving into the malware with #Ghidra,youtube
cheetsheet
Scripting in Ghidra, Patching MacOS Image2Icon
Intro to Reverse Engineering
Intro to Reverse Engineering, Part 2
x64/x32dbg Snowman
WinDbg Memory Analysis Skillbuilder Series: Skeleton Key Deep Dive with WinDbg
WinDbg — the Fun Way: Part 2
WinDbg Basics for Malware Analysis
GDB
objdump
Snowman
DbgShell
name plugin price platform remarks
IDA pro Lighthouse
UEFI_RETool
VT-IDA Plugin
uEMU
Not free multi
Binary Ninja Lighthouse
BinDbg
Not free multi
Cutter CutterDRcov
Jupyter Plugin for Cutter
x64dbgcutter
tiny_tracer_tag_to_cutter
etc.
free multi
Ghidra pwndra
ghidra_scripts
OOAnalyzer
ghidra_scripts by ghidraninja
ghidra_scripts by AllsafeCyberSecurity
free multi
x64/x32dbg DbgChild
checksec
idenLib
xdbg
ScyllaHide
x64dbgpylib
ClawSearch
x64dbg-dark
YaraGen
xAnalyzer
Unpacking Script
free windows
WinDbg free windows Kernel mode debugging possible
GDB gdbpeda
pwngdb
free linux onlinegdb
objdump free linux
Snowman free windows
DbgShell free windows

Tracer

  • drltrace
    • DynamoRIO based
    • ライブラリトレーサ(Windows版ltrace)
  • drstrace
    • DynamoRIO based
    • システムコールトレーサ(Windows版strace)
  • memtrace
    • DynamoRIO based
    • メモリトレーサ
  • bbbuf
    • DynamoRIO based
    • べーシックブロックトレーサ
  • API Monitor
    • GUI(Windows)
    • APIコールを監視ツール
  • Captain
    • APIフックを行いAPIの呼び出しを監視
    • yaml形式で記載されたシグネチャをもとにDLLインジェクションマクロ実行lsassメモリダンプwmicおよびmshtaマルウェアの検出を行うことが可能
    • 現在はアルファ版(2020/02/23時点)

Instrumentation

  • drcov
    • DynamoRIO based
    • カバレッジ計測
    • drrun経由で実行
> drrun.exe -t drcov -- [program name] [arguments]
  • Intel PIN

Traffic Analysis tools

Forensic

  • Windows Log
  • Sysinternals
    • Sysmon
      • ホスト上で発生したプロセスファイルレジストリネットワークWMI関連のインベントをEventLog(.evtx)に記録する
    • SysmonSearch
      • Sysmonで生成されたイベントログの分析ツール,Kibana使用
    • v11.0よりファイル削除(EventID:23)と削除されたファイルのコピーをアーカイブボリューム内(ボリュームごと)に保存する機能が追加された
  • VmdkReader
    • vmdkイメージからファイルを抽出するツール
  • Autopsy
    • ディスク等のフォレンジックツール
    • Central Storageなどを介して複数のユーザでコラボしながらフォレンジックを行うことが可能
    • 3rd Party modules
  • NetMiner
  • Volatility
    • DFIRやマルウェア解析に焦点を当てたメモリダンプ調査フレームワーク
    • プラグインが充実している
    • プロファイルの指定が必要である(メモリダンプがどのシステム(OSデータ構造シンボル)で使用したものなのかを識別するため)
      • Volatility 3からは不要とのこと
    • 対応しているメモリダンプのフォーマット
      • Raw linear sample (dd)
      • Hibernation file (from Windows 7 and earlier)
      • Crash dump file
      • VirtualBox ELF64 core dump
      • VMware saved state and snapshot files
      • EWF format (E01)
      • LiME format
      • Mach-O file format
      • QEMU virtual machine dumps
      • Firewire
      • HPAK (FDPro)
    • ref:
    • Virtual Box上のゲストOSからメモリダンプ(VirtualBox ELF64 core dump)を取得する方法
      • VBoxManageを利用してホストOSからゲストOSを起動する(VBoXManageで起動しないと原因は分からないがメモリダンプの取得でうまくいかなかった)
      > .\VBoxManage.exe list vms # Virtual Boxで作成済みのゲストの名前とuuidの一覧を取得
      > .\VBoxManage.exe startvm "guest name or uuid" #起動
      
      • VboxManageでメモリダンプ(VirtualBox ELF64 core dump)を取得する
      > .\VBoxManage.exe debugvm "guest name or uuid"  dumpvmcore --filename output.dmp
      
    • Plugins
name default how to use description reference
malfind python vol.py -f zeus.vmem malfind -p 1724
hollowfind - python vol.py -f infected.vmem --profile=Win7SP0x86 hollowfind
yarascan python vol.py -f zeus.vmem yarascan --yara-file=/path/to/rules.yar
malconfscan - python vol.py malconfscan -f images.mem --profile=Win7SP1x64 マルウェアのコンフィグ情報の抽出cuckooと組み合わせることが可能 wiki
malstrscan - python vol.py malstrscan -a -f images.mem --profile=Win7SP1x64
  • Hexinator
    • バイナリエディタ
    • 各種ファイルタイプの構造が定義されたgrammarと呼ばれるxmlファイルを用いて開いたファイルの構造を認識しファイルヘッダやデータ内の各パラメータをバイナリエディタ上でカラーリングして表示
    • パラメータの値の閲覧,編集も可能
    • freeで多くのgrammerが用意されているがツール自体は試用期間のみ無料
    • ファイルの破損部分を確認する際に有用
    • バイナリの差分の確認も可能

Threat hunting

  • EQL
    • cheet sheet
      # maldoc -> command,script
      process where
      parent_process_name in ("winword.exe", "excel.exe", "powerpnt.exe")
      and process_name in ("powershell.exe", "cscript.exe","wscript.exe", "cmd.exe")
      
      # Unusual Child Process
      process where 
      subtype.create and
      (
      	(process_name == 'smss.exe' and not parent_process_name in ('System', 'smss.exe')) or
      	(process_name == 'csrss.exe' and not parent_process_name in ('smss.exe', 'svchost.exe')) or
      	(process_name == 'wininit.exe' and parent_process_name != 'smss.exe') or
      	(process_name == 'winlogon.exe' and parent_process_name != 'smss.exe') or
      	(process_name == 'lsass.exe' and parent_process_name != 'wininit.exe') or
      	(process_name == 'LogonUI.exe' and not parent_process_name in ('winlogon.exe', 'wininit.exe')) or
      	(process_name == 'services.exe' and parent_process_name != 'wininit.exe') or
      	(process_name == 'svchost.exe' and parent_process_name != 'services.exe' and
      		not (parent_process_path == '*\\system32\\svchost.exe' and process_path ==  '*\\syswow64\\svchost.exe')) or
      	(process_name == 'spoolsv.exe' and parent_process_name != 'services.exe') or
      	(process_name == 'taskhost.exe' and not parent_process_name in ('services.exe', 'svchost.exe')) or
      	(process_name == 'taskhostw.exe' and not parent_process_name in ('services.exe', 'svchost.exe')) or
      	(process_name == 'userinit.exe' and not parent_process_name in ('dwm.exe', 'winlogon.exe'))
      )
      
  • ref:

.NET analysis

Utilities

$procs=Start-Process "programname.exe" -PassThru
echo $procs.Id
$queryNameVersion="SELECT * FROM Win32_Process WHERE ParentProcessId=" + $procs.Id
$child_process=Get-WmiObject -Query $queryNameVersion
echo $child_process

Control Windows features

  • blackbird
  • Windows Firewall Control
  • reclaimWindows10.ps1
    • windowsにデフォルトインストールさている機能(onedrive,windows defender,skype,windows update,etc.)のon/offを切り替える
    • マルウェアの通信を解析する際にノイズ通信が加わることを防止する

Online Sandbox

name site remarks
AMAaaS https://amaaas.com/ apk only
ANYRUN https://app.any.run/#register
Intezer Analyze https://analyze.intezer.com/#/
IRIS-H https://iris-h.services/pages/dashboard maldoc only
CAPE Sandbox https://cape.contextis.com/
Joe Sandbox Cloud https://www.joesandbox.com/
cuckoo https://cuckoo.cert.ee/
cuckoo https://sandbox.pikker.ee/
Hybrid Analysis https://www.hybrid-analysis.com/?lang=ja
ViCheck https://www.vicheck.ca/submitfile.php
Triage https://tria.ge/
Yomi Sandbox https://yomi.yoroi.company/upload
UnpacMe https://www.unpac.me/#/ online unpacker,beta,
extracting embedded AutoIT Script,
extracting URL from VB6 downloader(GuLoader)
MalwareConifg https://malwareconfig.com/ 特定マルウェアからconfig情報を抽出
anlyz.io https://sandbox.anlyz.io/dashboard

Unpacker/Decryptor/Decoder/Extractor/Memory Scannerh/Deofuscator

  • Process Creattion
  • Registry Operations
  • Threads Operations
  • Virtual Alloc Operations
  • Image Load Operations
  • Kernel Audit APIs usage
  • etc.

PDF Analysis

Docment file Analysis

  • Filetype
    • .doc, .xls, .ppt
      • Office 2003までのファイルの形式
    • .docx, .xlsx, .pptx
      • Office 2007以降のマクロを含まないファイルの形式
    • .docm, .xlsm, .pptm
      • Office 2007以降のマクロを含むファイルの形式
  • p-code
    • マクロコードをコンパイルした中間コード
      • ドキュメント内のvbaコードのバージョンとシステム上のvbaのバージョンが同じ場合コンテンツが有効化された際に表示されるソースコードはp-codeが逆コンパイルされたもの
      • ドキュメント内のvbaコードのバージョンとシステム上のvbaのバージョンが異なる場合コンテンツが有効化された際に表示されるソースコードは圧縮されたvbaソースコードを解凍したもの
  • VB Editor
    • debuggerでstep実行が可能
    • 難読化解除の手順
      1. olevba等でvbaマクロコードを抽出
      2. 悪意のあるファイルを開いてdocx形式で保存し閉じる
        • [コンテンツを有効化]は押さない
        • [編集を有効にする]は押す
      3. olevba等で.docxファイルにマクロが含まれないことを確認する
      4. .docxファイルを開く
        • ActivXオブジェクトがある場合[コンテンツを有効にする]を押す
      5. Alt+F11でVB Editorを開く
      6. 1.で抽出したVBAマクロコードのコピー
      7. 悪意のあるコード実行部分を出力系の関数等(MsgBox,etc.)で無害化
      8. VB Editorのdebuggerで難読化解除
    • vbaData.xmlの削除
      • 以下の状況下で有用
        • p-codeが利用されている
          • マクロのコンテンツを有効化しないと逆コンパイルされたvbaソースコードが表示されない
          • p-codeのままではdebuggerを利用できない
        • 悪意のあるコードを実行したあとにすぐ終了されるように設計されている
      • 方法
        • 7-zip等でwordファイルを展開
        • wordフォルダ配下のvbaData.xmlを削除
        • 再zip
      • ref:
  • pcodedmp
    • p-codeの逆アセンブラ
  • pcode2code.py
    • p-codeの逆コンパイラ
  • VBA Seismograph
    • VBA Stompingの検出ツール
    • p-codeで利用される関数名変数名文字列コメント等を出力
    • pcodedmpとolevbaを利用している
  • CMD Watcher
    • マクロによって実行されるpowershell,cmd,wscript,rundllのコマンドがCMD Watcherに出力される
    • コマンドをキャプチャした際に自動的にプロセスを終了させる
  • ole tools
    • olevba
      • VBAマクロソースコードの検出/抽出
      • 自動実行可能なマクロの検出
      • 疑わしい文字列の抽出
      • Anti-Sandbox,Anti-VMの検出
      • hex,base64,strreverse,dridexで難読化された文字列の検出/デコード
      • IoC(IP,URL,mail addr,file name)の抽出
      • etc.
    • oleobj
      • oleファイルから埋め込みオブジェクトを抽出するスクリプト
    • rtfobj
      • RTFファイルからOLEパッケージオブジェクトを検出し、埋め込みファイルを抽出
    • ref:
  • ViperMonkey
    • VBAマクロの分析や難読化解除を行うためのVBAエミュレーションエンジン
  • Vba2Graph
    • vbaのコールグラフを生成
  • msoffcrypto-tool
  • msoffice
    • 暗号化されたOfficeファイルを暗号化/復号するためのツール
  • LinuxでPS,VBの動的解析
  • exiftool
    • HyperLinkBabse等のプロパティにコマンド等が格納されているケースもある
  • ref:
  • VbsEdit
    • vbsのデバッガ付きエディタ
  • WSH Shell
    • vbsの対話型シェルとして利用可能
  • vba memo
    • Using WScript.Shell
    Dim wsh As New WshShell
    or
    Dim wsh As Object
    Set wsh = CreateObject("Wscript.Shell")
    
    • StateMent
      • Call
        • dllを呼び出せる
        • プロシージャを呼び出す
        • Call name [argumentlist]
    • Function

powershell Analysis

  • Powershell ISE
    • Powershell Scriptのエディタ・デバッガ

JavaScript Analysis

AutoIt Script Analysis

Other various file Analysis

lnk file

C2 Analysis

Emotet

  • Emutet
    • Emotetのc2通信部分のエミュレータ

Ursnif

Binary Analysis

Unpacking

  • アンパックの流れ
    • OEPの特定し,OEPまで実行
      • pushad命令popad命令に着目。popad命令後のjmpでOEPに遷移する可能性がある(pushadした際のスタックのアドレスにハードウェアブレークポイントを設定することで監視)
      • 動的に生成された領域に着目(領域にアクセスし,実行されるかをメモリブレークポイントを設定することで監視)
      • WinMainCRTStartupWinMainとの類似性からヒューリスティックに判断
      • ツールを利用
    • プロセスメモリのダンプ
      • 基本的にツールを用いる
    • IATの再構築(展開ルーチンのIAT再構築とは別)
      • IATは展開ルーチンでローダによってそのときの実際のAPIのアドレスに書き換えられているためロード前に戻す必要がある
      • PEヘッダはパックされたコードのIATを示しているので新たににインポートセクションを追加しそのセクションを認識するようにPEヘッダを修正する
      • 基本的にツールを用いる

Microsoft Windows Library

  • NTDLL.DLL
    • Windows Native APIを提供
    • Native APIはKERNEL32.DLLによってエクスポートされるKernel APIやbase APIの多くで使用されている
    • Windows applicationから直接的に呼ばれることはほとんどない
    • 公式ではドキュメント化されていないが,こちらからある程度確認可能
  • KERNEL32.DLL
    • メモリ操作入出力プロセスやスレッド管理同期処理を行うWin32 base APIを提供する
  • USER32.DLL
    • GUIなどユーザインターフェース関連のAPIを提供
  • MSVCRT.DLL
  • ref:

Win32API

API
dll/header file
arg return overview
GetModuleHandle
kernel32/libloaderapi.h (include Windows.h)
PCSTR lpModuleName(モジュール名) Success:a handle to the specified module
Fail:NULL
指定したモジュールへのハンドルを取得
ReadProcessMemory
kernel32/memoryapi.h (include Windows.h)
1.HANDLE hProcess
2.LPCVOID lpBaseAddress
3.LPVOID lpBuffer>
4.SIZE_T nSize
5.SIZE_T *lpNumberOfBytesRead
Success:non zero
Fail:zero(0)
特定のプロセスの指定したアドレスからメモリの内容を読み取る
CreateProcess
kernel32.dll/processthreadsapi.h (include Windows.h)
1. LPCSTR lpApplicationName
2. LPSTR lpCommandLine
3. LPSECURITY_ATTRIBUTES lpProcessAttributes
4. LPSECURITY_ATTRIBUTES lpThreadAttributes
5. BOOL bInheritHandles
6. DWORD dwCreationFlags
7. LPVOID lpEnvironment
8. LPCSTR lpCurrentDirectory
9. LPSTARTUPINFOA lpStartupInfo
10. LPPROCESS_INFORMATION lpProcessInformation
Success:non zero
Fail zero
新しいプロセスの作成
CreateRemoteThread
kernel32/processthreadsapi.h (include Windows.h)
1.HANDLE hProcess
2.LPSECURITY_ATTRIBUTES lpThreadAttributes
3.SIZE_T dwStackSize
4.LPTHREAD_START_ROUTINE lpStartAddress
5.LPVOID lpParameter
DWORD dwCreationFlags
6.LPDWORD lpThreadId
Success:a handle to the new thread
Fail:Null
別プロセス上に対してスレッドを作成
InitializeCriticalSection
kernel32/synchapi.h (include Windows.h)
LPCRITICAL_SECTION lpCriticalSection - クリティカルセクションを初期化,クリティカルセクションオブジェクトにより1つのプロセスの複数スレッド間で相互排他の同期が行える
InitializeListHead
wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Wudfwdm.h)
PLIST_ENTRY ListHead - LIST_ENTRY構造体の初期化
CreateMutex
kernel32/synchapi.h (include Windows.h)
1.LPSECURITY_ATTRIBUTES lpMutexAttributes
2.BOOL bInitialOwner
3.LPCSTR lpName
Success:a handle to the newly created mutex object
Fail:Null
Mutexを作成
GetModuleFileName
kernel32/libloaderapi.h (include Windows.h)
1. HMODULE hModule
2. LPSTR lpFilenam
3. DWORD nSize
Success:the length of the string that is copied to the buffer, in characters, not including the terminating null character
Fail:zero
現在のプロセスにロードされている特定のモジュールの完全修飾パスを取得,hModuleがNullの場合現在のプロセスの実行ファイルのパスを取得
GetUserName
Advapi32.dll/winbase.h (include Windows.h)
1. LPSTR lpBuffer
2. LPDWORD pcbBuffer
Success:a nonzero value
Fail:zero
現在のスレッドのユーザ名を取得

Deobfuscation

Symbolic Execurtion

to do...

Taint Analysis

to do...

Decompiler

  • exe2aut
    • AutoIT Scriptのデコンパイラ

Perspective

  • topdown
    • コードの先頭から解析
  • bottom-up
    • 表層解析で得たキー情報(Win32API,怪しい文字列etc.)の周辺から解析

ref:

Windows OS

Windows Command

Training Material