天天看點

威脅分析與響應能力—Windows惡意軟體BazarLoader分析

作者:天融信教育

01簡介

BazarLoader(又名BazarBackdoor、BazaLoader、BEERBOT、KEGTAP和Team9Backdoor)是基于Windows的一種隐秘的後門木馬,主要通過電子郵件等方式傳播。攻擊者通過惡意軟體後門通路受感染的主機并對目标域網絡環境進行探測,部署Cobalt Strike,繪制網絡拓撲圖。如果為高價值目标,攻擊者還會開始橫向拓展,部署Conti、Ryuk等勒索軟體。

02主加載程式分析

2.1 第1步:檢查系統語言

與許多惡意軟體類似,BAZARLOADER會手動檢查系統的語言以避免在其母國開展惡意攻擊。通過調用GetSystemDefaultLangID來檢索系統的預設語言,通過調用GetKeyboardLayoutList來周遊系統的鍵盤布局。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

對于每一種語言,惡意軟體都會使用位掩碼檢查其有效性。如果語言辨別符大于0x43或小于0x18則視為有效,這樣BAZARLOADER才會繼續執行。如果辨別符在0x18和0x43之間的範圍内,語言辨別符和0x18之間的差異被用作位掩碼中要檢查的位的索引。

BAZARLOADER使用的位掩碼是0xD8080190C03,即二進制的11011000000010000000000110010000110000000011。如果語言ID為0x18,則檢查位掩碼中的第一位。如果語言ID為0x19,則檢查第二位,并依此類推。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

以下是惡意軟體避免的位掩碼中所有語言的清單。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

2.2 第2步:互斥對象

為了檢查自身的多個運作執行個體,BAZARLOADER首先從其程序中提取SID的子權限。通過調用GetTokenInformation檢索程序的令牌完整性級别并調用GetSidSubAuthorityCount和GetSidSubAuthority來通路SID的子權限來實作這一功能。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

如果SID的子權限是SECURITY_MANDATORY_SYSTEM_RID或SECURITY_MANDATORY_PROTECTED_PROCESS_RID,BAZARLOADER會通過調用CreateMutexA檢查互斥鎖“{b837ef4f-10ee-4821-ac76-2331eb32a23f}”目前是否由任何其他程序擁有。如果是,惡意軟體會自行終止。但分析發現檢查互斥對象是否存在的條件存在一個小錯誤,即程式假定它在實際成功時無法打開互斥對象。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

此後,惡意軟體解析字元串“{0caa6ebb-cf78-4b01-9b0b-51032c9120ce}”并嘗試使用該名稱建立互斥鎖。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

如果這個互斥對象已經存在,惡意軟體也會自行終止。

2.3 第3步:生成随機Internet流量

為了生成Internet活動來達到與C2服務程式隐秘通信的目的,BAZARLOADER調用InternetOpenA以使用以下字元串作為HTTP使用者代理來初始化WinINet函數的使用。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

接下來生成一個線程以定期連接配接到随機URL,并利用以下結構生成噪音以隐藏主要的C2流量。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

BAZARLOADER調用InitializeCriticalSection來初始化結構的臨界區對象,該對象稍後用于保護對creation_flag字段的通路。之後設定self字段指向結構,creation_flag字段為TRUE,并調用CreateThread生成一個線程來執行這些随機Internet操作。如果建立線程失敗,creation_flag字段設定為FALSE。

線程首先會嘗試擷取臨界區對象的所有權并檢查是否啟用了建立标志。如果是,則解析以下URL為堆棧字元串。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

接下來線程進入一個無限循環,開始産生通訊噪音。對于随機數生成,BAZARLOADER使用不同的函數調用Windows API BCryptGenRandom來生成一組随機位元組。程式随機選擇上面列出的4個URL之一,随機生成URL路徑段,然後将兩者結合起來建構完整的URL。在生成路徑段時,該函數取生成的路徑段的最小和最大數量,以及每個路徑段的最小和最大長度。

程式在給定範圍内随機生成路徑段的計數。每個段随機生成一個字元串,該字元串在給定範圍内具有随機長度,其中包含數字和大寫/小寫字母。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

最後,惡意軟體調用InternetOpenURLA與生成的URL建立連接配接,使用HTTP_QUERY_CONTENT_LENGTH标志調用HTTPQueryInfoA以檢索内容的長度,配置設定具有該大小的緩沖區,并調用InternetReadFile從該URL讀取資料。該操作将重複進行,直到C2通信和有效負載注入完成,期間會産生大量噪音來掩蓋進出C2服務程式的主要流量。

2.4 第4步:密碼結構叢集

BAZARLOADER主要使用以下結構與C2服務程式進行通信。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

首先填充主結構中的crypto_struct字段。此結構包含稍後用于解密從C2服務程式發送的可執行檔案的加密句柄,結構可以重構如下:

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

軟體會解析字元串“RSA”和“SHA384”,并調用BCryptOpenAlgorithmProvider來擷取這兩個算法的句柄。句柄存儲在crypto_struct結構中的相應字段中。接下來解析記憶體中寫死的RSA公鑰和私鑰blob,導入相應的密鑰句柄。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

對于每個blob,惡意軟體會解析字元串“RSAFULLPRIVATEBLOB”或“RSAPUBLICBLOB”,并使用它指定blob的類型時調用BCryptImportKeyPair導入相應的密鑰句柄。

最後調用BCryptGetProperty來檢索RSA公鑰和私鑰密碼塊的長度。在完全填充了這個結構之後,BAZARLOADER現在可以執行RSA加密/解密以及SHA384哈希。

2.5 第5步:通過原始IP位址進行C2連接配接

在與C2服務程式通信之前,BAZARLOADER首先解析原始IP位址清單并将它們寫入主結構中的C2_addr_list字段。該字段是一個表示字元串結構清單的結構,可以如下所示重新建構兩個字元串結構。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

下面是此示例中使用的C2服務程式的所有IP位址的清單。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

惡意軟體會嘗試與每個位址對應的服務程式通信并下載下傳下一階段的可執行檔案。如果要建立連接配接則會填充以下結構。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

惡意軟體調用InternetCrackUrlA來檢索C2的URL元件和InternetConnectA以連接配接到服務程式。然後将此連接配接結構的字段複制到主結構的C2_connection_struct中。不過不完全确定不直接填充主要結構的原因。

BAZARLOADER生成附加到請求的HTTP标頭,通過調用GetSystemTime來使用目前日期和時間填充主結構的curr_system_time和datetime_string字段實作這一功能,并生成日期時間字元串的SHA384哈希來填充結構的datetime_string_hash和datetime_string_hash_len字段。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

接下來BAZARLOADER調用BCryptSignHash使用其RSA私有簽名生成的哈希,并使用此哈希簽名随機生成HTTP标頭。下面是随機HTTP标頭的形式。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

使用生成的HTTP标頭和請求句柄,BAZARLOADER調用HttpSendRequestA将請求發送到C2服務程式并調用HttpQueryInfoA來檢索狀态碼。如果狀态碼不是HTTP_STATUS_OK,惡意軟體會轉移到另一個C2位址。

如果狀态碼為HTTP_STATUS_OK,則調用InternetQueryDataAvailable确定要讀取的資料大小,根據大小配置設定記憶體緩沖區,并調用InternetReadFile讀取下一階段的有效載荷,直到所有内容都寫入記憶體。

最後,惡意軟體通過調用BCryptDecrypt使用其RSA公鑰解密有效負載,并檢查以確定有效負載的大小大于64位元組并且包含MZ标頭。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

2.6 第6步:通過自定義URL進行C2連接配接

如果BAZARLOADER無法從上面列出的IP位址下載下傳下一階段的可執行檔案,程式會嘗試使用使用者擁有的DNS社群服務OpenNIC解析自定義C2域。為了開始查詢OpenNIC的API,首先解析URL“api.opennicproject.org”并調用InternetConnectA建立與該網站的連接配接。

接下來調用HttpOpenRequestA以建立對象名稱為“/geoip/?bare&ipv=4&wl=all&res=8”的GET請求句柄,并使用HttpSendRequestA發送請求。

通過檢查OpenNIC的API,可以分解此對象名稱以檢視BAZARLOADER請求的内容。其中“bare”參數隻列出DNS伺服器的IP位址,“IPv4”參數隻列出IPv4伺服器,“wl”參數隻列出白名單伺服器,“res”參數隻列出8個伺服器。

為了測試這一點,可以簡單地将下面的路徑粘貼到我們選擇的浏覽程式中。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

惡意軟體進入循環調用InternetQueryDataAvailable和InternetReadFile來讀取8個OpenNIC的DNS伺服器到記憶體中。

對于每個DNS服務程式IP位址,BAZARLOADER将其從字元串解析為int并填充主結構中的opennic_server_struct字段。下面是用于存儲OpenNICIP位址的結構。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

最後解碼以下自定義C2域,嘗試使用DNS服務程式解析并下載下傳下一階段的可執行檔案。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

對于每個自定義域,BAZARLOADER調用DnsQuery_A從OpenNIC的服務程式查詢DNS資源記錄,解析C2服務程式的IP位址。

在檢查IP位址是否有效後,惡意軟體會嘗試連接配接它并請求下載下傳下一階段的可執行檔案,與上一步過程類似。

2.7 第7步:通過process hollowing技術注入

成功下載下傳下一階段可執行檔案之後,BAZARLOADER開始注入功能,從另一個程序啟動,填充以下結構。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

首先檢查程序是否被提升為管理權限。調用GetCurrentProcess和OpenProcessToken來檢索程序令牌句柄,并調用GetTokenInformation來擷取令牌的提升資訊。如果程序沒有被提升,則解析以下程序的名稱并嘗試填充注入結構的字段。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

對于每個程序名稱,惡意軟體會枚舉程序的快照以檢索其ID,并調用OpenProcess以擷取其句柄。為了填充包含程序指令行和完整路徑的full_exec_command和thread_curr_directory字段,BAZARLOADER首先從程序環境塊(PEB)中提取程序參數。

惡意軟體調用NtQueryInformationProcess來檢索PEB的位址,并調用ReadProcessMemory将PEB讀入記憶體來通路PEB。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

接下來,它調用ReadProcessMemory從程序的記憶體中讀取程序參數。使用程序參數RTL_USER_PROCESS_PARAMETERS結構,BAZARLOADER讀取程序的指令行和完整路徑以填充注入結構。同樣也使用process參數通路浏覽程式的環境塊并将其寫入注入結構。

如果BAZARLOADER具有管理者權限,而不是浏覽程式的程序,則會嘗試從以下指令行使用svchost.exe程序填充注入結構。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

接下來利用注入結構,惡意軟體調用CreateProcessA來建立處于挂起狀态的目标程序以執行process hollowing。

我們可以通過被調用的WindowsAPI快速發現process hollowing正在發生。調用NtUnmapViewOfSection來取消映射并占用父級的記憶體。然後調用VirtualAllocEx和WriteProcessMemory在父程序中配置設定虛拟記憶體并将惡意負載寫入其中。

分析發現,惡意軟體周遊父節點的節頭以找到“.reloc”節,并對記憶體中注入的圖像執行重定位。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

最後,BAZARLOADER調用SetThreadContext為父程序設定新的入口點,并調用ResumeThread再次恢複父程序,父程序将執行注入的可執行檔案。

威脅分析與響應能力—Windows惡意軟體BazarLoader分析
威脅分析與響應能力—Windows惡意軟體BazarLoader分析

在此基礎上即可分析BAZARLOADER如何下載下傳遠端可執行檔案并使用程序空心化來執行。

繼續閱讀