From 5dbe3289efb50e07995c48ae2c685540a7579c74 Mon Sep 17 00:00:00 2001 From: HackMD Date: Fri, 3 Jan 2020 14:26:13 +0000 Subject: [PATCH] first --- Trickbot/analysis_processhollowing.md | 68 +++++++++++++++++++++++---- 1 file changed, 59 insertions(+), 9 deletions(-) diff --git a/Trickbot/analysis_processhollowing.md b/Trickbot/analysis_processhollowing.md index 0faf40d..9408783 100644 --- a/Trickbot/analysis_processhollowing.md +++ b/Trickbot/analysis_processhollowing.md @@ -4,6 +4,7 @@ - File copy - VirtualAlloc and Data transition - Createting Process and Heaven's Gate (Process Hollowing) + - to do... ## Sample/Environment - Sample @@ -22,24 +23,73 @@ ## Analysis contents ### File copy +Trickbotの初期動作に関する説明 +- CopyFileWによって特定のパスに自身(同一ファイル)のコピーの作成を試行する +- 特定パスにコピーが存在していなかった場合,コピーを作成しShellExecuteWによってコピーされたファイルが実行される。その後,自プロセスをExitProcessによって終了させる +- 特定パスにコピーが既に存在していた場合,CopyFileWは失敗し上記とは別の処理(Process Hollowing等)に分岐する(要するに,ShellExecuteWによって実行されたコピーのプロセスがこちらの分岐を通過する) ![](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) -![]() -բնութագրվում է.exe + +以降はコピーしたファイルに関するプロセスの処理の説明となる ### VirtualAlloc and Data transition +Process Hollowingにも利用するデータに関する説明 +- コピーのプロセス実行中に5~7回VirtualAllocによる領域確保が確認された ![](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/datacopy_5_720.png) +- 確保した0x2D000Byteの領域に.dataをすべてコピーするわけではなく,.dataのベースアドレス+0x7C3の位置からコピーを開始する +- +0x7C3のメモリダンプを確認すると,PEファイルのようである +- +7C3の位置のデータもすべてをコピーするわけではなく,下図のように特定の条件にマッチした際に,1Byteずつ書き込みを行う(詳細は述べない) +> 条件: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) +- コピーされたデータに対してデコードを行う +- xorが用いられていた +- デコードした結果からは64bitのPEファイルを示すような文字列が確認された(下図メモリダンプより) ![](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) +- 5~6回目のVirtualAllocで確保した領域(ベースアドレス:0x10001000)に対して,上記で確保した領域(0x60000Byte)に書き込まれたPEファイルの一部をコピーする +- 下図より,PEファイルの.text以下がコピーされている ![](https://github.com/mether049/malware/blob/master/Trickbot/img/copytext_9_720.png) ### 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/heavensgate_11_720.png) -![](https://github.com/mether049/malware/blob/master/Trickbot/img/ntdll_12_720.png) -![](https://github.com/mether049/malware/blob/master/Trickbot/img/crccalc_13_720.png) -![](https://github.com/mether049/malware/blob/master/Trickbot/img/crccmp_14_720.png) -![]() -![]() +- 以降のProcess Hollowingの処理はHeavens's Gate(64bitシステムに切り替え)を利用して行われていた +- ![](https://github.com/mether049/malware/blob/master/Trickbot/img/heavensgate_11_720.png) +- ここから64bitの命令群に遷移する(32bit向けのユーザモードデバッガでの追跡が困難になる。WinDbgなどのカーネルモードデバッガなら追跡可能) +- 遷移先は0x100100であり,先ほどPEファイルの.text以下をコピーした領域である(64bitPEファイルを保存してそれに対してユーザモードデバッガでデバッグすることは可能) +![](https://github.com/mether049/malware/blob/master/Trickbot/img/heavensgate_16_720.png) +- ntdll.dllのexport table上の関数名リストから1つずつ関数名字列をとりだして目的の(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の組み合わせ:
+> 26C4B1F1 LdrLoadDll
+> E33A06BF NtAllocateVirtualMemory
+> 82bb0ee0 NtProtectVirtualMemory
+> 026da588 NtReadVirtualMemory
+> 7a65c193 NtWriteVirtualMemory
+> e873107e NtQueryInformationProcess
+> 918a52f1 NtResumeThread
+![](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.. +- 解析を進めて以下の部分について修正・追加を行う + - 誤って解釈している部分 + - 解析しきれていない部分 + - あいまい解釈している部分 +