1
0
mirror of https://github.com/nganhkhoa/malware.git synced 2024-06-10 21:32:07 +07:00
This commit is contained in:
HackMD 2020-01-03 14:26:13 +00:00
parent f2b6c3d5bd
commit 5dbe3289ef

View File

@ -4,6 +4,7 @@
- File copy - File copy
- VirtualAlloc and Data transition - VirtualAlloc and Data transition
- Createting Process and Heaven's Gate (Process Hollowing) - Createting Process and Heaven's Gate (Process Hollowing)
- to do...
## Sample/Environment ## Sample/Environment
- Sample - Sample
@ -22,24 +23,73 @@
## Analysis contents ## Analysis contents
### File copy ### File copy
Trickbotの初期動作に関する説明
- CopyFileWによって特定のパスに自身(同一ファイル)のコピーの作成を試行する
- 特定パスにコピーが存在していなかった場合コピーを作成しShellExecuteWによってコピーされたファイルが実行される。その後自プロセスをExitProcessによって終了させる
- 特定パスにコピーが既に存在していた場合CopyFileWは失敗し上記とは別の処理(Process Hollowing等)に分岐する(要するにShellExecuteWによって実行されたコピーのプロセスがこちらの分岐を通過する)
![](https://github.com/mether049/malware/blob/master/Trickbot/img/shellexecute_2_720.png) ![](https://github.com/mether049/malware/blob/master/Trickbot/img/shellexecute_2_720.png)
- CopyFileWによるコピー先はC:\ProgramData\բնութագրվում է.exeであった(ファイル名はGoole翻訳の検出結果によるとアルメニア語)
![](https://github.com/mether049/malware/blob/master/Trickbot/img/filecopy_1_720.png) ![](https://github.com/mether049/malware/blob/master/Trickbot/img/filecopy_1_720.png)
![]()
բնութագրվում է.exe 以降はコピーしたファイルに関するプロセスの処理の説明となる
### VirtualAlloc and Data transition ### VirtualAlloc and Data transition
Process Hollowingにも利用するデータに関する説明
- コピーのプロセス実行中に5~7回VirtualAllocによる領域確保が確認された
![](https://github.com/mether049/malware/blob/master/Trickbot/img/virtualalloc_3_720.png) ![](https://github.com/mether049/malware/blob/master/Trickbot/img/virtualalloc_3_720.png)
- 1回目のVirtualAllocでは0x2D000Byteの領域を確保する
- 0x2D000Byteは.dataのサイズと同じである
![](https://github.com/mether049/malware/blob/master/Trickbot/img/datasection_4_720.png) ![](https://github.com/mether049/malware/blob/master/Trickbot/img/datasection_4_720.png)
![](https://github.com/mether049/malware/blob/master/Trickbot/img/datacopy_5_720.png) - 確保した0x2D000Byteの領域に.dataをすべてコピーするわけではなく.dataのベースアドレス+0x7C3の位置からコピーを開始する
- +0x7C3のメモリダンプを確認するとPEファイルのようである
- +7C3の位置のデータもすべてをコピーするわけではなく下図のように特定の条件にマッチした際にByteずつ書き込みを行う(詳細は述べない)
> 条件0x3C <= ECX <= 0x3E or EAX <= ECX
![](https://github.com/mether049/malware/blob/master/Trickbot/img/datacopy_5_modify_720.png)
- また,.dataの+0x9C3~+0x2B5C3の位置のデータは下図のように上記とは別の処理でコピーされる
![](https://github.com/mether049/malware/blob/master/Trickbot/img/datacopy2_6_720.png) ![](https://github.com/mether049/malware/blob/master/Trickbot/img/datacopy2_6_720.png)
- コピーされたデータに対してデコードを行う
- xorが用いられていた
- デコードした結果からは64bitのPEファイルを示すような文字列が確認された(下図メモリダンプより)
![](https://github.com/mether049/malware/blob/master/Trickbot/img/decode_7_720.png) ![](https://github.com/mether049/malware/blob/master/Trickbot/img/decode_7_720.png)
- 上記からさらにデコードを実施し3回目のVirtualAllocにより確保された領域(0x60000Byte)に書き込みを行う
- 下図のメモリダンプをファイルに保存して確認した結果64bitのPEファイルであった
![](https://github.com/mether049/malware/blob/master/Trickbot/img/decode2_8_720.png) ![](https://github.com/mether049/malware/blob/master/Trickbot/img/decode2_8_720.png)
- 5~6回目のVirtualAllocで確保した領域(ベースアドレス0x10001000)に対して,上記で確保した領域(0x60000Byte)に書き込まれたPEファイルの一部をコピーする
- 下図よりPEファイルの.text以下がコピーされている
![](https://github.com/mether049/malware/blob/master/Trickbot/img/copytext_9_720.png) ![](https://github.com/mether049/malware/blob/master/Trickbot/img/copytext_9_720.png)
### Createting Process and Heaven's Gate (Process Hollowing) ### Createting Process and Heaven's Gate (Process Hollowing)
- CreateProcessWによってProcess Hollowingの対象となるプロセス(svchost.exe)を作成する
- プロセスはサスペンド状態で作成される
![](https://github.com/mether049/malware/blob/master/Trickbot/img/svchost_10_720.png) ![](https://github.com/mether049/malware/blob/master/Trickbot/img/svchost_10_720.png)
![](https://github.com/mether049/malware/blob/master/Trickbot/img/heavensgate_11_720.png) - 以降のProcess Hollowingの処理はHeavens's Gate(64bitシステムに切り替え)を利用して行われていた
![](https://github.com/mether049/malware/blob/master/Trickbot/img/ntdll_12_720.png) - ![](https://github.com/mether049/malware/blob/master/Trickbot/img/heavensgate_11_720.png)
![](https://github.com/mether049/malware/blob/master/Trickbot/img/crccalc_13_720.png) - ここから64bitの命令群に遷移する(32bit向けのユーザモードデバッガでの追跡が困難になる。WinDbgなどのカーネルモードデバッガなら追跡可能)
![](https://github.com/mether049/malware/blob/master/Trickbot/img/crccmp_14_720.png) - 遷移先は0x100100であり先ほどPEファイルの.text以下をコピーした領域である64bitPEファイルを保存してそれに対してユーザモードデバッガでデバッグすることは可能
![]() ![](https://github.com/mether049/malware/blob/master/Trickbot/img/heavensgate_16_720.png)
![]() - ntdll.dllのexport table上の関数名リストからつずつ関数名字列をとりだして目的の(Process Hollowingに利用すると思われる)関数名と一致するものを探し,さらにそのアドレスを取得する?(ここは詳細に確認していない。このあたりは[こちら](https://www.cyberbit.com/blog/endpoint-security/latest-trickbot-variant-has-new-tricks-up-its-sleeve/)でも詳しく書かれている気がする)
![](https://github.com/mether049/malware/blob/master/Trickbot/img/ntdll_12_720.png)
- 目的のAPIは関数名のCRC32値(ここも詳細に確認していない)で比較される
![](https://github.com/mether049/malware/blob/master/Trickbot/img/crccalc_13_720.png)
- 目的のAPIとCRC32の組み合わせ<br>
> 26C4B1F1 LdrLoadDll<br>
> E33A06BF NtAllocateVirtualMemory<br>
> 82bb0ee0 NtProtectVirtualMemory<br>
> 026da588 NtReadVirtualMemory<br>
> 7a65c193 NtWriteVirtualMemory<br>
> e873107e NtQueryInformationProcess<br>
> 918a52f1 NtResumeThread<br>
![](https://github.com/mether049/malware/blob/master/Trickbot/img/crccmp_14_720.png)
- 取得したアドレスを利用してAPIを呼び出しProcess Hollowingを終了させる
- 各APIの呼び出しで処理が失敗した場合その時点でプロセスが終了する
![](https://github.com/mether049/malware/blob/master/Trickbot/img/apicall_15_720.png)
## to do..
- 解析を進めて以下の部分について修正・追加を行う
- 誤って解釈している部分
- 解析しきれていない部分
- あいまい解釈している部分