日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

c++ 获取64位进程模块地址_针对银行木马BokBot核心模块的深入分析

發(fā)布時間:2025/10/17 242 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ 获取64位进程模块地址_针对银行木马BokBot核心模块的深入分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、概述

BokBot惡意軟件由LUNAR SPIDER惡意組織開發(fā)和運(yùn)營,在2017年首次出現(xiàn),CrowdStrike的Falcon Overwatch和Falcon Intelligenc團(tuán)隊對被感染主機(jī)進(jìn)行了分析。最近,由于借助MUMMY SPIDER惡意組織的Emotet惡意軟件進(jìn)行分發(fā)活動,BokBot的感染數(shù)量又有所增加。

BokBot惡意軟件具有強(qiáng)大的功能,分為命令和控制、模塊化兩類,具體功能包括:執(zhí)行進(jìn)程、注冊表編輯、寫入文件系統(tǒng)、登錄、混淆、防篡改、竊取憑據(jù)、攔截代理、通過VNC進(jìn)行遠(yuǎn)程控制。

此外,已經(jīng)發(fā)現(xiàn)BokBot可以從其他惡意軟件中下載并執(zhí)行二進(jìn)制代碼,例如Azorult infostealer。

本文將深入探討B(tài)okBot主要模塊的技術(shù)細(xì)節(jié)。

二、BokBot容器執(zhí)行

最初,BokBot被加密包裝。在最終解壓縮BokBot二進(jìn)制文件并將其注入到svchost.exe之前,加密器經(jīng)歷了幾個階段。以下是這些不同階段的簡單概述:

· 第一階段(加密器):解碼第二階段的內(nèi)容并執(zhí)行。

· 第二階段(加密器):解碼ShellCode并執(zhí)行。

· 第三階段(ShellCode):對基礎(chǔ)進(jìn)程映像進(jìn)行Hollow,解碼核心進(jìn)程注入PE,使用核心進(jìn)程注入PE覆蓋基本進(jìn)程映像。

· 第四階段(進(jìn)程注入):執(zhí)行進(jìn)程注入代碼,啟動svchost.exe子進(jìn)程,將BokBot作為無頭部的PE映像注入子進(jìn)程。

我們使用CrowdStrike Falcon平臺,主要可以分析第四階段的過程。因此,本文的重點(diǎn)是BokBot注入子進(jìn)程的這一過程,惡意軟件作者在這里采用了一種獨(dú)特的方法。

2.1 進(jìn)程注入

為了繞過反病毒檢測,從而可以對進(jìn)程進(jìn)行Hollowing,BokBot對幾個Windows API函數(shù)進(jìn)行了掛鉤,并執(zhí)行掛鉤代碼,然后刪除鉤子。

2.1.1 模擬進(jìn)程Hollowing過程

為了模擬這一過程,ZwCreateUserProcess例程將被首先掛鉤。BokBot調(diào)用ZwProtectVirtualMemory,將例程的權(quán)限修改為PAGE_READWRITE。接下來,前五個操作碼(字節(jié))被替換為JMP<掛鉤代碼地址>指令的操作碼。在恢復(fù)權(quán)限后,調(diào)用CreateProcessA。

在調(diào)用CreateProcessA后,函數(shù)調(diào)用鏈將會走到調(diào)用ZwCreateUserProcess的地方,隨后調(diào)用掛鉤代碼,如上圖所示。

掛鉤代碼將通過從ZwCreateUserprocess例程中刪除掛鉤,來完成子進(jìn)程的創(chuàng)建,然后調(diào)用沒有掛鉤的ZwCreateUserProcess過程。這樣一來,將會創(chuàng)建子進(jìn)程,但在CreateProcessInternal返回之前不會執(zhí)行。其余的掛鉤例程將解碼,并將嵌入的BokBot二進(jìn)制文件注入svchost.exe的子進(jìn)程。

2.1.2 代碼注入

在注入代碼之前,BokBot PE首先被解壓縮,并被加載到本地進(jìn)程內(nèi)存中。加載后,以下Windows過程用于分配和寫入svchost子進(jìn)程:

ZwAllocateVirtualMemory ZwWriteVirtualMemory ZwProtectVirtualMemory

將主BokBot模塊寫入子進(jìn)程后,將開始執(zhí)行BokBot代碼。

2.1.3 代碼執(zhí)行

BokBot采用了一種新穎的技術(shù),來實(shí)現(xiàn)代碼在子進(jìn)程內(nèi)部的執(zhí)行。使用與之前相同的API,Dropper將掛鉤子進(jìn)程中的RtlExitUserProcess。由于svchost.exe是在沒有參數(shù)的情況下啟動的,因此會立即終止。當(dāng)進(jìn)程嘗試退出時,它將調(diào)用掛鉤的RtlExitUserProcess,從而執(zhí)行BokBot Payload。

在CreateProcessInternalW恢復(fù)執(zhí)行之前,針對掛鉤的例程,還有一個任務(wù)要完成。

2.1.4 注入上下文數(shù)據(jù)結(jié)構(gòu)

將BokBot Payload注入子進(jìn)程后,要將上下文數(shù)據(jù)結(jié)構(gòu)寫入子進(jìn)程。下面的上下文中,包含所需的所有數(shù)據(jù),可以確保BokBot的主模塊在執(zhí)行過程中不出現(xiàn)問題。

1、Windows過程地址:

ntdll.ZwAllocateVirtualMemory ntdll.ZwWriteVirtualMemory ntdll.ZwProtectVirtualMemory ntdll.ZwWaitForSingleObject ntdll.LdrLoadDll ntdll.LdrGetProcedureAddress ntdll.RtlExitUserProcess ntdll.ZwCreateUserProcess ntdll.RtlDecompressBuffer ntdll.ZwFlushInstructionCache

2、加載Payload的地址

3、Dropper二進(jìn)制文件的路徑

4、C&C URL

5、項目ID

在Dropper進(jìn)程的整個生命周期中,將會收集上述數(shù)據(jù)。此外,在下載和執(zhí)行模塊時,類似的結(jié)構(gòu)將會被寫入到BokBot的子進(jìn)程。

在注入后,CreatProcessInternalW會恢復(fù),并且Dropper進(jìn)程將退出。BokBot的主模塊將進(jìn)入到初始化階段。

三、BokBot初始化

在執(zhí)行主循環(huán)和C&C通信之前,BokBot首先經(jīng)歷了幾個初始化步驟,為C&C通信做好準(zhǔn)備。初始化的具體步驟如下:

1、刪除RtlExitUserProcess的掛鉤

2、創(chuàng)建內(nèi)存映射文件,以存儲日志記錄數(shù)據(jù)

3、以登錄用戶身份,執(zhí)行BokBot(如果當(dāng)前進(jìn)程是以System運(yùn)行)

4、關(guān)閉錯誤告警

5、收集系統(tǒng)信息:Windows版本信息、用戶SID、域成員信息

6、生成唯一ID

7、防止多次執(zhí)行

8、在主機(jī)上安裝BokBot

9、將現(xiàn)有下載模塊注入到子進(jìn)程中

在下面,我們將詳細(xì)介紹其中的一些步驟。

3.1 關(guān)閉錯誤告警

為了防止出現(xiàn)錯誤提示,從而使受害者得知具體問題,BokBot將進(jìn)程的錯誤模式設(shè)置為0x8007,具體對應(yīng)如下:

SEM_FAILCRITICALERRORS SEM_NOALIGNMENTFAULTEXCEPT SEM_NOGPFAULTERRORBOX SEM_NOOPENFILEERRORBOX

這樣一來,將會禁用進(jìn)程崩潰時產(chǎn)生的大多數(shù)錯誤通知。

3.2 生成唯一ID

在早期進(jìn)程執(zhí)行期間,生成了幾個唯一的ID,BokBot將使用這些ID。這些值將被傳遞給C&C服務(wù)器,并會作為RC4加密算法的密鑰,同時也傳遞給子進(jìn)程。

3.2.1 項目ID

除了將主BokBot模塊注入svchost之外,Dropper還會將一大塊二進(jìn)制數(shù)據(jù)注入,為BokBot執(zhí)行提供上下文,其中也包括項目ID。這些唯一的項目ID值,似乎是用于識別與分發(fā)活動對應(yīng)的感染。項目ID是一個4字節(jié)值。

3.2.2 Bot ID

針對受感染主機(jī)上每個用戶的特定實(shí)例,其Bot ID是唯一的。該值將用作加密密鑰,以及生成BokBot各種唯一值所需的種子。例如,為文件及事件名稱生成的偽隨機(jī)字符串,我們將在后續(xù)章節(jié)中進(jìn)一步討論。

Bot ID會以下面兩種方式中的一種來生成:

1、帳戶名稱的安全I(xiàn)D(Security ID)

2、文件時間格式的系統(tǒng)時間

由于這兩個值都是64位,所以無論是用哪種方法,該值都會被分為兩個32位塊,并且會被異或。

3.2.3 ID哈希值

除了Bot ID之外,還會生成一個簡單的哈希值,用來驗(yàn)證Bot ID和項目ID的有效性。該哈希值使用Bot ID和項目ID來生成,具體方法如下:

hash = (( BotID / 0x100001E) & 0xFF) + ((BotID/0x10000) & 0xFF) hash = (ProjectID[3] + hash[0]) & 0xff hash = (BotID [0] + hash) & 0xff hash = (ProjectID[0] + hash[0]) & 0xff hash = (ProjectID[1] + hash[0]) & 0xff hash = (ProjectID[2] + hash[0]) & 0xff

該值將與項目ID、Bot ID一起作為C&C URL參數(shù)的一部分來傳遞。如果該請求無效,受感染的主機(jī)將不會收到來自C&C的任何指令。

四、C&C主機(jī)名初始化

Bokbot包含編碼后的C&C主機(jī)名列表,這些主機(jī)名會作為Dropper注入的上下文數(shù)據(jù)結(jié)構(gòu)中的一部分。該結(jié)構(gòu)中的C&C列表,也會使用由上下文提供的密鑰進(jìn)行解碼,然后使用rdtsc指令生成的新密鑰進(jìn)行重新編碼,最后存儲為指針數(shù)組。

五、防止多次執(zhí)行

使用Bot ID生成唯一的全局命名事件。通過調(diào)用GetLastError,繼續(xù)成功調(diào)用CreateEvent。如果惡意軟件已經(jīng)在執(zhí)行,那么最后一個產(chǎn)生的錯誤將會是ERROR_ALREADY_EXISTS,隨后進(jìn)程將退出。

六、安裝過程

在安裝過程中,將BokBot Dropper二進(jìn)制文件寫入安裝目錄,并創(chuàng)建計劃任務(wù),以保證其持久性。

安裝目錄將在以下根目錄中創(chuàng)建:C:ProgramData

安裝目錄的名稱是唯一的,使用Bot ID生成。在創(chuàng)建目錄后,使用Bot ID作為種子對原始的Dropper文件進(jìn)行重命名,并寫入目錄。由于Bot ID基于系統(tǒng)信息,因此將其用作種子就可以確保惡意軟件始終在特定主機(jī)上生成相同的安裝路徑和文件名。

在生成安裝目錄名稱后,BokBot需要為將要寫入該目錄的BokBot二進(jìn)制文件生成一個文件名。下面的Python代碼重現(xiàn)了BokBot用于生成文件名的算法,以及其他各種字符串。

腳本中的str_id值是一個硬編碼的整數(shù),與Bot ID一起使用,可以生成一致的字符串。例如,使用Bot ID 0x2C6205B3以及str_id 2,總是會生成字符串a(chǎn)yxhmenpqgof,但假如將str_id換為6,生成的字符串就會變?yōu)閎wjncm。

以下是安裝路徑的示例:

C:ProgramData{P6A23L1G-A21G-2389-90A1-95812L5X9AB8}ruizlfjkex.exe

在這里,將會創(chuàng)建計劃任務(wù),以在Windows登錄時執(zhí)行。任務(wù)名稱的生成方式與安裝目錄相同。

· 任務(wù)名稱:{Q6B23L1U-A32L-2389-90A1-95812L5X9AB8}

· 觸發(fā):登錄時

· 動作:啟動一個程序

· 詳細(xì)信息:BokBot Dropper路徑

七、C&C通信

BokBot通過HTTPS請求與C&C服務(wù)器進(jìn)行通信,并通過URL參數(shù)和POST參數(shù),將各種值傳遞給服務(wù)器。除了服務(wù)器使用的SSL/TLS之外,URL請求數(shù)據(jù)沒有進(jìn)行加密或模糊處理。

下面詳細(xì)介紹了所有請求所必須的主要參數(shù)、一些其他的可選參數(shù),以及Bot的注冊過程。

7.1 主要C&C請求和響應(yīng)參數(shù)

每個請求或響應(yīng)都會將這些參數(shù)發(fā)送到服務(wù)器。這些內(nèi)容將會為C&C提供有關(guān)請求/響應(yīng)類型以及唯一標(biāo)識受感染計算機(jī)的信息:

/in.php?g=2&c=3592L387P92A771N77&p=0&r=102

對于這些參數(shù),更詳細(xì)的描述請參見下表:

URL路徑通常會在不同版本之間有所不同。例如,版本100-102使用的是/data100.php,而不是/in.php。

7.2 附加C&C請求和響應(yīng)參數(shù)

在BokBot中,包含一個連續(xù)循環(huán)的通信線程,該循環(huán)直至進(jìn)程退出,持續(xù)從C&C服務(wù)器檢索指令。除了上面已經(jīng)描述的參數(shù)之外,請求中還包含一些附加參數(shù)。當(dāng)Bot向C&C服務(wù)器返回命令的執(zhí)行結(jié)果時(例如:上傳屏幕截圖時),不會發(fā)送這些參數(shù)。

下面URL參數(shù)中,展示了與C&C初始連接的示例:

/in.php?g=2&c=42454B23<Bot ID>3B&p=0&r=104&i=0&n=0&o=0&k=3073&a=2&l=

在這個示例中,沒有Web注入,沒有C&C URL,也沒有下載任何模塊,因此其中的一些重要參數(shù)值都為0或空。在這里,生成了初始時間戳,版本號為靜態(tài)的。

八、初始Bot注冊

注冊請求會與每個發(fā)送到C&C的標(biāo)準(zhǔn)C&C URL參數(shù)相組合。在初始請求之后,C&C服務(wù)器將命令發(fā)回受害者主機(jī),并發(fā)送信號通知其下載Web注入、更新的C&C主機(jī)名、可執(zhí)行模塊或其他要執(zhí)行的任務(wù)。

初始注冊URL中,包含與系統(tǒng)信息相關(guān)的參數(shù)。以下字符串是一個示例:

在下表中,描述了注冊URI參數(shù):

下面是注冊請求(紅色)和C&C(藍(lán)色)響應(yīng)的示例,其中包含發(fā)送給受感染主機(jī)的命令。

8.1 C&C命令

在本節(jié)中,將分析C&C發(fā)出的命令請求。來自C&C的每個命令,都采用以下格式:

當(dāng)前版本的BokBot中,提供了以下命令:

需要注意的是,這些命令的ID值可能會在不同版本之間更改。如此列表所示,BokBot為運(yùn)營商提供了各種與受感染機(jī)器進(jìn)行交互的選項。

8.2 URL下載命令處理程序

其中,許多命令都會觸發(fā)命令處理程序函數(shù),該函數(shù)需要與C&C URL或服務(wù)器請求參數(shù)中指定的其他URL進(jìn)行通信。如果請求指定,那么從目標(biāo)URL下載的數(shù)據(jù)就會被寫入到DAT。無論下載的數(shù)據(jù)是否被寫入到DAT文件,它都將由以下C&C命令之一的回調(diào)函數(shù)處理:

1、啟動一個新的可執(zhí)行模塊,重啟當(dāng)前可執(zhí)行模塊。

2、更新Web注入(任一命令)

3、更新配置

4、更新BokBot

5、寫入文件

6、下載并執(zhí)行二進(jìn)制文件

使用C&C URL主機(jī)名的命令,將會發(fā)送d URL參數(shù),示例如下:

該值通常設(shè)置為0,要下載的文件將由g參數(shù)指定。

九、模塊和DAT文件

從C&C接收的所有需要在重新啟動計算機(jī)后保留的數(shù)據(jù),都會在受感染的計算機(jī)上寫入到DAT文件中。這些文件包括:Web注入配置、C&C配置和外部模塊。

使用Bot ID作為密鑰,主模塊和子模塊將根據(jù)需要,對每個文件進(jìn)行加密和解密。每個模塊都有一個唯一的標(biāo)簽。

9.1 生成唯一標(biāo)簽

BokBot會為注入的進(jìn)程、下載的模塊和下載的DAT文件分配唯一的標(biāo)簽。這些標(biāo)簽是執(zhí)行BokBot進(jìn)程以識別外部進(jìn)程資源的一種便捷方法。標(biāo)簽的生成非常簡單:

· 18 – Web注入配置文件,在二進(jìn)制文件中靜態(tài)定義。

· 19 – 報告配置文件,在二進(jìn)制文件中靜態(tài)定義。

· 20 – C&C配置文件,在二進(jìn)制文件中靜態(tài)定義。

· 33-46 – 下載的模塊將注入子進(jìn)程。需要以增量的方式分配,不一定是對模塊所做的唯一標(biāo)記。

在對BokBot的分析過程中,這些值將會定期出現(xiàn),其中也包括生成唯一文件名的值,會在后面詳細(xì)描述。

十、下載DAT文件

如前所述,DAT文件是根據(jù)C&C發(fā)送的命令進(jìn)行下載。一旦從C&C接收到命令,就會調(diào)用特定于此命令的處理程序,來處理該請求。作為響應(yīng),受感染的機(jī)器將會通知C&C它已經(jīng)準(zhǔn)備好接收RC4加密后的Blob。下圖說明了下載配置文件和模塊的命令的過程。

一個8字節(jié)的RC4命令將會被添加到數(shù)據(jù)緩沖區(qū)。在將Blob寫入文件之前,BokBot會對文件進(jìn)行解密,然后使用基于Bot ID的新RC4密鑰,對其進(jìn)行重新加密。

10.1 寫入文件

BokBot在C:ProgramData下創(chuàng)建一個新目錄來存儲DAT文件。使用前面描述的字符串生成算法,生成目錄名稱。使用唯一標(biāo)記值,生成DAT文件名。該唯一標(biāo)記值也是通過字符串生成算法(取決于Bot ID)運(yùn)行,該算法會返回DAT文件的唯一文件名。

上表中引用了我們測試過程中發(fā)現(xiàn)的所有DAT文件。在我們的測試環(huán)境中,安裝目錄是C:ProgramDatayyyyyyyyiu。

10.2 可執(zhí)行模塊

BokBot有幾個可執(zhí)行模塊,可以下載并注入svchost.exe子進(jìn)程。一旦使用RC4解碼相關(guān)的DAT文件,就不需要對可執(zhí)行模塊DAT文件進(jìn)行額外的解碼或解壓縮??蓤?zhí)行模塊頭包含識別模塊所需的信息:

文件的其余部分,包含加載和執(zhí)行模塊所需的數(shù)據(jù),包括PE文件的各個部分,以及自定義PE頭。

模塊的注入與執(zhí)行過程,使用類似于Dropper的技術(shù)來注入可執(zhí)行模塊,并且去掉了ZwCreateUserProcess的掛鉤,并暫停子進(jìn)程啟動(CREATE_SUSPENDED)。通過添加RtlExitUserProcess掛鉤,它更接近于傳統(tǒng)的進(jìn)程遷移。

1、PE圖像加載

由于沒有標(biāo)準(zhǔn)的PE頭部,所以DAT文件中必須包含所有相關(guān)信息(虛擬大小、重定位等),以便將這個二進(jìn)制文件正確映射到子進(jìn)程。該數(shù)據(jù)是DAT文件標(biāo)頭的一部分。BokBot在將二進(jìn)制文件注入子進(jìn)程之前,現(xiàn)在本地進(jìn)程內(nèi)存中構(gòu)建二進(jìn)制文件。

2、注入

注入過程,使用與Dropper相同的API,也就是ZwAllocateVirtualMemory、ZwWriteVirtualMemory和ZwProtectVirtualMemory。在注入后,使用ResumeThread恢復(fù)進(jìn)程。

3、執(zhí)行上下文注入

再一次,在執(zhí)行之前,先將執(zhí)行上下文結(jié)構(gòu)寫入子進(jìn)程。這里包含的一些信息包括:Bot ID、項目ID、C&C主機(jī)名、URL路徑格式字符串。

這樣一來,就可以保持父進(jìn)程與子進(jìn)程之間的一致性,不需要生成新的唯一標(biāo)識符,所有加密密鑰都是相同的:相同的主機(jī)名,甚至也有相同的URL路徑。父進(jìn)程和子進(jìn)程之間的一致性對于使用進(jìn)程間通信(IPC)在兩者之間發(fā)送的消息是非常必要的。

將模塊注入子進(jìn)程后,解密的DAT文件的前四個字節(jié)將添加到一個數(shù)組中,BokBot使用該數(shù)組來標(biāo)識當(dāng)前正在執(zhí)行的模塊。

10.3 數(shù)據(jù)文件

其他DAT文件包含與C&C通信或Web注入相關(guān)的所必須的數(shù)據(jù)。從本質(zhì)上講,這些文件提供了主要BokBot進(jìn)程和可執(zhí)行模塊完成其工作所需的任何其他數(shù)據(jù)。

配置文件包含BokBot主模塊與C&C保持通信所需的所有數(shù)據(jù)。一旦使用特定于進(jìn)程的RC4密鑰解密文件,就不再需要額外的解壓縮或者解密過程。

每個配置文件都帶有一個數(shù)字簽名塊,用于驗(yàn)證C&C主機(jī)名數(shù)據(jù)的完整性。根據(jù)混淆部分中說明的簽名驗(yàn)證方法,來對簽名進(jìn)行驗(yàn)證。以下是C&C配置的示例,簽名塊為紅色:

其中,有多個Web注入文件。一個包含所有目標(biāo)URL和主機(jī)名數(shù)據(jù),另一個包含正則表達(dá)式模式以及需要注入的代碼。這些文件都事先經(jīng)過RC4加密和壓縮。

這些文件并非由主BokBot二進(jìn)制文件解析,而是由攔截代理模塊對其進(jìn)行解析。其過程是,驗(yàn)證Zeus File Magic,分配緩沖區(qū),然后解壓縮文件。

十一、與子進(jìn)程的通信

BokBot使用內(nèi)存映射文件和事件,與包含注入模塊的所有子進(jìn)程進(jìn)行通信。通過使用CreateEvent、OpenEvent和OpenFileMapping利用命名事件的過程,BokBot主模塊能夠?yàn)檫@些子進(jìn)程提供附加信息。

11.1 共享模塊日志

這些模塊會寫入到同一個共享內(nèi)存映射文件中,并使用父進(jìn)程和子進(jìn)程之間的共享名稱創(chuàng)建內(nèi)存映射文件。可以生成此名稱的每個進(jìn)程,都可以使用它來打開內(nèi)存映射文件,并將數(shù)據(jù)寫入共享模塊日志。更多細(xì)節(jié)我們會在下一節(jié)中介紹,所編寫的具體數(shù)據(jù)會在下面單獨(dú)的模塊描述中進(jìn)行分析。主模塊負(fù)責(zé)清除日志,并將數(shù)據(jù)發(fā)送到C&C服務(wù)器。

11.2 特定模塊的通信

BokBot的主模塊通常需要向包含注入模塊代碼的子進(jìn)程發(fā)出命令。這些命令可以觸發(fā)模塊中特定命令的更新,或者指示模塊執(zhí)行特定功能(例如:從Outlook收集數(shù)據(jù))。下圖該輸了這一過程,我們也將在后續(xù)章節(jié)中進(jìn)一步說明。

11.2.1 事件名稱生成

為了使BokBot主模塊和子進(jìn)程、事件之間成功通信,需要生成唯一的名稱,并且必須在所有進(jìn)程中保持一致。其具體方法如下:

父進(jìn)程和子進(jìn)程將使用這些事件來交換數(shù)據(jù)。

11.2.2 BokBot主模塊

此過程能夠與注入模塊的所有子項進(jìn)行通信。這些通信都圍繞C&C發(fā)出的命令。一旦有需要通知可執(zhí)行模塊子進(jìn)程的命令啟動,就會打開一個命名的Q事件,以確保子進(jìn)程已經(jīng)準(zhǔn)備好接收數(shù)據(jù)。如果Q事件不存在,那么就表示尚未啟動子進(jìn)程。BokBot將目標(biāo)模塊注入紫禁城中,并循環(huán)檢查,以查看是否可以打開該事件。

成功打開Q事件后,BokBot將創(chuàng)建一個新的命名R事件,創(chuàng)建一個內(nèi)存映射文件(名稱為M event),將數(shù)據(jù)寫入文件,并發(fā)出打開Q事件的信號,等待子進(jìn)程的響應(yīng)。子進(jìn)程清除R事件后,內(nèi)存映射文件將被取消映射,所有句柄都將關(guān)閉。

11.2.3 BokBot可執(zhí)行模塊

初始化之后,子進(jìn)程將創(chuàng)建一個命名的Q事件,并等待父進(jìn)程發(fā)出信號。在發(fā)出信號后,將打開命名的R事件,并處理內(nèi)存映射文件中的數(shù)據(jù)。

BokBot的主模塊會將一些上下文信息寫入注入的模塊,并告訴它執(zhí)行特定的操作。這些操作會根據(jù)接收數(shù)據(jù)的模塊而有所更改。以下命令在模塊之間是一致的,但執(zhí)行的操作可能會有所不同:

· 0xFF00 – 使用0x1122代碼處理退出

· 0xFF01 – 檢查Web注入或無操作

· 0xFF02 – 更新C&C主機(jī)名

除了命令之外,還會基于命令,告知注入模塊要完成的指令,以處理與命令相關(guān)聯(lián)的相關(guān)數(shù)據(jù)。

在父進(jìn)程分配的任務(wù)完成后,將取消映射內(nèi)存映射文件,發(fā)出R事件信號,并關(guān)閉所有其他打開的事件。

十二、混淆與防篡改

BokBot使用幾種方法進(jìn)行混淆以阻礙分析過程,分別是:字符串混淆、從服務(wù)器發(fā)出加密的DAT文件、簽名驗(yàn)證和多態(tài)性。

12.1 字符串混淆

為了使分析更加困難,這里使用了移位密鑰算法對重要字符串進(jìn)行XOR編碼。所有編碼的字符串都具有以下結(jié)構(gòu):

· 0x0 – DWORD – 初始XOR密鑰

· 0x4 – WORD – 字符串大小

· 0x8 – char[] – 編碼后字符串

解碼字符串的算法如下(Python):

# # Encoded string structure # String_struct = “” xor_key = string_struct[:4] string_length = string_struct[4:6] ciphertext = string_strct[6:] plaintext = “”For idx in range(string_length)xor_key = (((xor_key >> 0x3) | (xor_key << 0x1D)) + idx) & 0xFFFFFFFFenc_byte = ciphertext[idx]if (enc_byte ^ (xor_key & 0xFF) != 0:plaintext += chr(enc_byte & (xor_key & 0xFF))

12.2 簽名驗(yàn)證

簽名驗(yàn)證會在以下兩種情況下發(fā)生:C&C URL發(fā)生更新、BokBot二進(jìn)制文件發(fā)生更新。在這兩種情況下的驗(yàn)證過程完全一致,驗(yàn)證函數(shù)主要接收兩部分內(nèi)容:要驗(yàn)證的128字節(jié)簽名,和要驗(yàn)證的數(shù)據(jù)。

首先,BokBot創(chuàng)建需要驗(yàn)證的數(shù)據(jù)的MD5哈希值。接下來,嵌入在執(zhí)行二進(jìn)制文件中的RSA公鑰將通過CryptImportKey導(dǎo)入。生成哈希并導(dǎo)入密鑰后,CryptVerifySignature將用于驗(yàn)證簽名。這可能是為了防止某些第三方接管,或者以其他方式破壞僵尸網(wǎng)絡(luò)。

12.3 多態(tài)性

每次安裝BokBot時,在將其寫入安裝目錄之前,都會使用垃圾數(shù)據(jù)修改二進(jìn)制文件的.text部分,并更新其虛擬大小。同時,生成新的校驗(yàn)和(Checksum),并替換當(dāng)前的校驗(yàn)和。

十三、總結(jié)

BokBot是一款功能強(qiáng)大的銀行木馬,可以為攻擊者提供強(qiáng)大的功能。BokBot最獨(dú)特之處之一是它與子模塊通信的方法。我們后續(xù)還將對該木馬進(jìn)行持續(xù)分析,并將及時發(fā)布最新成果。

十四、BokBot相關(guān)哈希值

本文所涉及的全部樣本哈希值如下:

十五、MITRE ATT&CK

本文翻譯自:https://www.crowdstrike.com/blog/digging-into-bokbots-core-module/如若轉(zhuǎn)載,請注明原文地址: http://www.4hou.com/technology/15677.html更多內(nèi)容請關(guān)注“嘶吼專業(yè)版”——Pro4hou

總結(jié)

以上是生活随笔為你收集整理的c++ 获取64位进程模块地址_针对银行木马BokBot核心模块的深入分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。