IcedID惡意軟體原理分析(一):脫殼、掛鉤和進程注入
概述
IcedID是一種銀行木馬,該木馬在瀏覽器上執行Web注入,並作為監測並操縱流量的代理。該木馬能夠竊取受害者的信息,例如憑據。然後,會將被竊取的信息發送到遠程伺服器。
最近,FortiGuard Labs團隊開始對一些IcedID樣本進行分析。在本系列文章中,我將詳細分析新的IcedID惡意軟體樣本,本系列將分為三個部分。
·第一部分:脫殼、掛鉤和進程注入
·第二部分:IcedID核心Payload分析
·第三部分:子進程分析
本文是該系列的第一部分,讓我們來逐一突破。
0x01 惡意PE可執行文件
我們所分析的樣本是PE可執行文件,最常見的是受感染的Office文件。下圖展現了執行PE文件後產生的進程樹。我們可以看到,這個IcedID樣本最終創建了一個svchost.exe父進程和三個svchost.exe子進程。此外,它還可以提供Trickbot Payload,在其中以紅色突出顯示。在這一系列文章中,我們不會涉及對Trickbot Payload的分析,我們只關注IcedID內部的工作原理。
執行IcedID樣本後產生的進程樹:
如上圖所示,PE可執行文件首先使用命令行參數「-q=xxxxxxxxxx」啟動其自身。隨後,繼續啟動svchost.exe進程。在啟動第一個svchost.exe進程之後,前兩個進程將會退出。最後,這個svchost.exe父進程啟動3個svchost.exe子進程。
0x02 解壓縮PE可執行文件
接下來,我們可以開始動態分析PE執行的過程。從入口點跟蹤幾步後,程序進入到函數sub_00415CAE(),如下所示。
跳轉到trampoline代碼:
在trampoline代碼中,它用於解密代碼段。最終,它可以跳轉到程序真正的入口點。此時,PE可執行文件的脫殼過程就已經完成。
跳轉回實際入口點0x401000:
下面是程序真正入口點的偽代碼:
該程序的主要功能列表如下:
1. 檢查命令行參數是否以「-q=」開頭。如果是,則跳轉到步驟2,否則跳轉到步驟3。
2. 創建svchost.exe進程,並執行進程注入。
3. 使用TSC參數(「-q=xxxxxxxxx」)創建新進程。
我們在沒有任何參數的情況下運行此示例,因此可以進入到步驟3(sub_4012E9)。
函數sub_4012E9:
在執行rdtsc指令後,返回值將會被轉換為字元串,並作為新進程執行的參數。接下來,程序在進程上下文中設置環境變數。變數的名稱是不帶前綴「-q=」的命令行參數。
在進程上下文中設置環境變數:
最後,調用CreateProcessA函數,以使用參數創建其自身。
接下來,我們繼續對新運行的進程進行分析。
0x03 掛鉤技術和進程注入
啟動新進程後,程序進入實際入口點,如上所示。此時,check_parameter()函數返回TRUE,因為命令行參數以「-q=」開頭。然後,會轉到sub_40124A()函數。
sub_40124A()的偽代碼:
在函數hook_NtCreateUserProcess()中,首先調用函數NtProtectVirtualMemory,將函數NtCreateUserProcess的前五個位元組的保護更改為PAGE_EXECUTE_READWRITE。然後,它使用JMP指令來修改這五個位元組。最後,再次調用函數NtProtectVirtualMemory將前五個位元組恢復為原來的保護模式。
掛鉤函數NtCreateUserProcess:
以下是函數NtCreateUserProcess的彙編代碼:
在函數CreateProcessA中,代碼調用低級API NtCreateUserProcess,程序轉到trampoline代碼sub_4010B7()。下面是trampoline代碼的偽代碼。
Trampoline代碼實際執行的操作如下:
1. 對函數NtCreateUserProcess取消掛鉤;
2. 調用函數NtCreateUserProcess,負責執行創建新進程的主要工作;
3. 使用RtlDecompressBuffer釋放緩衝區;
4. 對svchost.exe執行進程注入,並在svchost.exe的進程空間中掛鉤RtlExitUserProcess。
接下來,讓我們具體來分析下步驟4。下面是該步驟中函數sub_401745()的偽代碼,在svchost.exe中實現進程注入,並掛鉤其RtlExitUserProcess:
首先,使用NtAllocateVirtualMemory在遠程進程空間(svchost.exe)中分配內存區域。接下來,它使用ZwWriteVirutalMemory在svchost.exe進程中執行代碼注入,注入到內存區域。
在svchost.exe進程中實現進程注入:
然後,在svchost.exe的進程空間中,為RtlExitUserProcess設置一個掛鉤。需要注意的是,這裡與此前掛鉤RtlExitUserProcess和NtCreateUserProcess時存在一些差別。前者是掛鉤遠程進程空間的API,而後者是掛鉤當前進程空間的API。
掛鉤RtlExitUserProcess:
掛鉤後的RtlExitUserProcess的彙編代碼如下所示:
在此前已經創建了沒有參數的svchost.exe進程。如果在沒有參數的情況下運行svchost.exe,則可以立即退出,在退出後,將調用低級API RtlExitUserProcess。由於IcedID惡意軟體掛鉤了RtlExitUserProcess,因此它可以跳轉到trampoline代碼,以執行IcedID Payload。
遠程進程svchost.exe中注入的內存區域如下圖所示。我們可以看出,已經注入了兩個內存區域。代碼段存儲在存儲區域(0xa1000 ~ 0xa7000)之中。
Svchost.exe進程的注入內存區域:
如圖14所示,它將跳轉到0xA2B2D,該部分位於存儲區(0xA1000 – 0xA7000)中。Trampoline代碼與該存儲區域的偏移量為0x2B2D。
0x03 結論
我們已經詳細分析了IcedID惡意軟體的脫殼、掛鉤和進程注入技術,以及如何執行IcedID Payload。在下一篇文章中,我們將對IcedID Payload(0xA2B2D)進行深入分析。敬請期待!
0x04 解決方案
該惡意PE文件已經被FortiGuard反病毒服務檢測為「W32/Kryptik.GTSU!tr」。
0x05 參考信息
SHA-256哈希值
PE可執行文件(b8113a604e6c190bbd8b687fd2ba7386d4d98234f5138a71bcf15f0a3c812e91)
※別光記得在看得見的世界保護你的孩子,在虛擬的網路中,我們更應該保護他們
※一次基於GAO報告的暗網追蹤比特幣槍支銷售的OSINT調查
TAG:嘶吼RoarTalk |