mirror of
https://github.com/nganhkhoa/malware.git
synced 2024-06-10 21:32:07 +07:00
8.8 KiB
8.8 KiB
Anti-analysis
- Anti-analysisに利用されるAPI,ファイル名,プロセス名,dll,レジストリ等の一覧まとめ
Collection of Anti-Malware Analysis Tricks.(2016-10)
Injection/Hollowing
- 正規プロセス等のアドレス空間にコードを注入することで検知や分析を妨害するTechnique
- 利用される正規プロセス:svchost.exe,explorer.exe,regsvr32.exe等
- Heaven's Gateと組み合わせて利用される場合あり
- ref:
- 各種Injection/Hollowingで利用されるAPIの一覧
HUNTING PROCESS INJECTION BY WINDOWSAPI CALLS (2019-11) - 図で分かりやすく説明
Ten Process Injection Techniques: A Technical Survey Of Common And Trending Process Injection Techniques - プログラムベースの説明
Code & Process Injection,Red Teaming Experiments
- 各種Injection/Hollowingで利用されるAPIの一覧
Dll Injection
- 正規プロセス探索->プロセスのハンドル取得->メモリ領域確保->悪性DLL注入->実行
- e.g. CreateToolhelp32Snapshot,Process32First,Process32Next->OpenProcess->VirtualAllocEx->WriteProcessMemory->CreateRemoteThread
07b8f25e7b536f5b6f686c12d04edc37e11347c8acd5c53f98a174723078c365
Thread Execution Hijacking
- 正規プロセス,スレッド探索->スレッドのハンドル取得->スレッド停止->メモリ領域確保->悪性コード注入->EIP書き換え->実行
- e.g. CreateToolhelp32Snapshot,Thread32First,Thread32Next->OpenThread->SuspendThread->VirtualAllocEx->WriteProcessMemory->SetThreadContext->ResumeThread 787cbc8a6d1bc58ea169e51e1ad029a637f22560660cc129ab8a099a745bd50e
Dll Injection Using SetWindowsHookEx(Hook Injection)
- Hooking:
Hooking is a technique used to intercept function calls.
- SetWindowsHookEx
- The first argument is the type of event. The events reflect the range of hook types, and vary from pressing keys on the keyboard (WH_KEYBOARD) to inputs to the mouse (WH_MOUSE), CBT, etc.
- The second argument is a pointer to the function the malware wants to invoke upon the event execution.
- The third argument is a module that contains the function.
- The last argument to this function is the thread with which the hook procedure is to be associated.
- dll読み込み->アドレス解決->正規プロセス,スレッドの探索->フック
- e.g. LoadLibrary->GetProcAddress->CreateToolhelp32Snapshot,Thred32First,Thread32Next->SetWindowsHookEx 5d6ddb8458ee5ab99f3e7d9a21490ff4e5bc9808e18b9e20b6dc2c5b27927ba1
Process Hollowing
- 正規プロセス作成(サスペンド状態)->空洞化->メモリ領域確保->悪性コード注入->エントリポイント設定->実行
- e.g. CreateProcess->ZwUnmapViewOfSection(NtUnmapViewOfSection)->VirtualAllocEx->WriteProcessMemory->SetThreadContext->ResumeThread
eae72d803bf67df22526f50fc7ab84d838efb2865c27aef1a61592b1c520d144
APC Injection
- プロセス,スレッド探索->アラート状態->ハンドル取得->キューに追加
- e.g. Createtoolhelp32Snapshot,Thread32First,Thread32Next->WaitForMultipleObjectEx->OpenThread->VirtualAllocEx->WriteProcessMemory->QueueUserAPC
- QueueUserAPC
- First args: a handle to the target thread
- Second args: a pointer to the function that the malware wants to run
- Third args: the parameter that is passed to the function pointer.
f74399cc0be275376dad23151e3d0c2e2a1c966e6db6a695a05ec1a30551c0ad
ATOM BOMBING
to do...
Shell Tray Window Injection
to do...
Shim Injection
to do...
IAT and Inline Hooking
to do...
ALPC Injection
to do...
REFLECTIVE PE Injection
to do...
LOCKPOS
to do...
KERNEL CALLBACK TABLE
to do...
CLIPBRDWNDCLASS
to do...
PROGATE
to do...
EARLY BIRD
to do...
CONSOLE WINDOW CLASS
to do...
TOOLTIP Process Injection
to do...
永続化
- Applnit_Dlls
to do... - AppCertDlls
to do... - IFEO
to do...
Heaven's Gate
- 0x33セグメントセレクターを使用して32ビット(WOW64)プロセスで64ビットコードを実行するTechnique
- x86用ユーザモードデバッガでの追跡が難しい
- WinDBG等のカーネルモードデバッガでは追跡することができる
- 名前の由来はVX Heavenに投稿されたから
- 少なくともtrickbot,locky,emotet等では利用されていた
- ref:
Knockin’ on Heaven’s Gate – Dynamic Processor Mode Switching(2012-09)
The 0x33 Segment Selector (Heavens Gate)
API obfuscation
A Museum of API Obfuscation on Win32
PowerShell Script obfuscation
- 難読化ツール
Invoke-Obfuscation - Powershell Script内で用いられる難読化技術について
Case-insensitive
- コマンドレッ名や変数名に大文字,小文字を混ぜる
- PowerShellでは区別されない
INvOke-eXpReSsiOn
Alias
- コマンドのエイリアスを用いる
- エイリアスの確認方法
get-alias # すべてのエイリアスの確認<br>
get-alias iex #iexのエイリアス(Invoke-Expression)の確認
- よく利用されるエイリアス
iex -> Invoke-Expression
sal -> Set-Alias
- エイリアスの設定
set-alias <Name> <Value>
sal ping iex
Dot expression and amp expression(Invoke-Expression)
- 文字列で表現されたコマンドレットを実行
.("get-alias")
&('gal')
iex("GeT-AliAs")
Combining characters
- 文字や文字列の結合
'i'+'ex'
Backticks
- コマンドレットや変数にバッククォートを挿入
`i`e`x("`gal `gal")
Split method
- 文字列の分割
'bob@alice'-split('@') -> bob alice
'bob@alice' -split '@' -split "i" -> bob al ce
Join method
- リストの結合
"bob","alice" -join "@" -> bob@alice
Concatenation operations
- 文字列の並べ替えおよび連結
"{1} {0}" -f "Alice","Bob" -> Bob Alice
"{1} {0}" -f "Alice",("{1}{2}{0}" -f "b","B","o") -> Bob Alice
No Space
- 空白の省略
"bob","alice"-join"@"
Pipe operator
- パイプによる引数の引き渡し
'Write-host 1' | iex
$ENV variable
- 環境変数の値を文字列の作成等に利用
.($seLLId[1]+$shEllId[13]+'x') -> .(iex)
&($EnV:cOmSpEc[4,15,25]-JOIN'') -> &(iex)
Encode
- xor
- 文字,16進数,10進数等で指定可能
10-bxor"10" -> 0
"0xa"-bxor10 -> 0
- base64
[System.Convert]::FromBase64String("Ym9iYWxpY2UK") -> bobalice
- zlib
New-Object System.IO.Compression.DeflateStream([iO.mEmoRySTream] [sysTEM.ConVert]::frOMBASE64STrING("Ym9iYWxpY2UK"))
- unicode
[System.Text.Encoding]::Unicode.GetString($unicodeBytes)
Ascii code
- 文字などをasciiコードの10進数,16進数表記で示す
[string][char[]](0x69,0x65,0x58) -> i e X
Replace method
- 文字や文字列を置換する
'i e x'-replace ' ','' -> ieX
%(foreach-object)
- foreach-objectの省略系で%を利用
((0x69, 0x65, 0x58) | %{([char] [int] $_)})-jOIN'' -> ieX
Comment out
- コメントアウト
<#bobalice#>
ref:
Powershell Static Analysis & Emotet results
Anti-detection
DGA
- ドメイン生成アルゴリズム
- 数学的なアルゴリズムを利用して一定間隔ごとに異なる通信先ドメインを生成することにより,ドメイン名での検知を困難にする
- 43ファミリのDGAに対してseedタイプ,DGAタイプ,エントロピー,TLD等様々な観点から比較
A Comprehensive Measurement Study of Domain Generating Malware,USENIX2016