當前位置:
首頁 > 新聞 > IcedID惡意軟體原理分析(一):脫殼、掛鉤和進程注入

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)

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

別光記得在看得見的世界保護你的孩子,在虛擬的網路中,我們更應該保護他們
一次基於GAO報告的暗網追蹤比特幣槍支銷售的OSINT調查

TAG:嘶吼RoarTalk |