一、概 述
近期,啟明星辰ADLab捕獲到一起以某攝像頭公司為目標的攻擊活動,該攻擊活動所使用的攻擊載荷異常復雜,遠超尋常攻擊。為了查明該攻擊來源及其載荷的技術實現,我們對其進行了深入的技術分析和溯源追蹤分析。通過分析,我們發現該攻擊在多個維度上都采用了高強度的對抗手段以防止被逆向工程,同時采用了多模塊多階段的內嵌式套娃模式,其中包含多達10個環環相扣層層相嵌的Loader和DLL模塊,這些模塊依賴大量對抗手段在內存中不落地的解密執行。無論是靜態分析對抗還是動態分析對抗都使逆向工程變得極其困難,比如其將所有類型、字段、屬性、方法等進行了名稱混淆,資源數據和相關配置信息、字符串也均通過動態加解密實現,并基于“spaghetti code”的控制流混淆使得控制流程無比復雜;而為了對抗動態分析,惡意軟件的執行流中始終貫穿著毫無規律的垃圾指令和無序跳轉,同時采用動態代理技術來封裝和隱藏類、方法和成員,并基于“Protobuf”庫對結構化數據進行二進制序列化,使得數據交換更加隱蔽。
這次攻擊活動的目標企業是一家提供攝像頭和智慧物聯解決方案的中國企業。攻擊者偽裝成該企業的客戶(國內某印染公司),以訂購產品為由向該公司服務支持部門投遞竊密木馬以試圖竊取該公司重要數據和敏感信息。黑客通過利用HTML smuggling方式在目標主機中投放惡意軟件以躲避郵件網關檢測,惡意軟件通過復雜執行邏輯后啟用竊密木馬。
通過長達一個多月的逆向工程,我們才得以提取出核心木馬,并確定其家族歸屬PureLogs竊密木馬,同時通過溯源關聯分析確認該木馬采用的loader為PureCrypter,這兩款惡意代碼是最近兩年才出現的新型攻擊框架,它們均由同一個公司開發且共用大部分的對抗技術。PureLogs是一款新型竊密木馬,該木馬曾在去年12月針對意大利的攻擊中首次被發現,其可以竊取各類瀏覽器、加密錢包和應用程序中的敏感數據。
通過溯源分析我們發現這款復雜的惡意軟件保護程序也曾經被包括PureLogs、Formbook、AgentTesla、SnakeKeylogger、Redline、AsyncRAT、WarzoneRAT、Remcos在內的多款惡意軟件所使用,但由于其保護的程序極為復雜,因此極少有團隊對PureCrypter保護過的惡意軟件進行分析。此外,對于竊密木馬PureLogs,我們發現的此次攻擊也是該竊密木馬首次被用于針對中國企業的網絡攻擊活動。
此外,在我們對Loder PureCrypter的傳播鏈進行溯源追蹤過程中還發現了“黑雀”攻擊的現象。“黑雀”攻擊是黑客產業鏈中非常有趣的一種高級黑吃黑現象,這種攻擊將供應鏈攻擊思路應用于黑客產業鏈中,用以控制或者獲取下游黑客的攻擊資源或攻擊成果。在PureCrypter的“黑雀”攻擊中,一些上游黑客在源碼項目內植入惡意程序并通過Github、地下論壇等渠道提供給黑客使用,以此坐收漁利。有關“黑雀”攻擊更多的案例和分析文章可以參考啟明星辰ADLab發布的報告《黑雀攻擊-揭秘Death僵尸網絡背后的終極控制者》、《黑雀攻擊:揭秘BillGates僵尸網絡中的黑雀現象》、《黑雀攻擊:揭秘TF僵尸物聯網黑客背后的黑客》、《黑雀攻擊:深入分析并溯源Dofloo僵尸物聯網背后的”黑雀”》。
二、溯源與關聯分析
2.1 攻擊活動分析
在本次攻擊活動中,攻擊者偽裝成國內某印染公司向目標企業投放攻擊郵件,相關攻擊示例如下所示。攻擊郵件主題為“Revised Order 20230025-03647”(修改后的訂單20230025-03647),正文包括增加訂購產品的描述以及公司聯系方式。附件是名為“20230025-03647.html”的網頁文件,受害者打開后會通過HTML smuggling的方式打開瀏覽器并脫機下載壓縮文件“20230025-03647”,其解壓后是名為“20230025-03647”的惡意可執行程序。
圖1:釣魚郵件
通過對該樣本的C2服務器45.80.192.226進行追溯,我們進一步關聯到更多相關的攻擊活動。這批攻擊在手法上普遍采用HTML smuggling的方式傳輸惡意軟件。HTML smuggling是一種利用HTML5和JavaScript的隱匿攻擊手法,攻擊者制作帶有惡意JavaScript腳本的HTML網頁,并發送含有URL或附件的釣魚郵件,誘使用戶點擊并打開附件。當收件人打開郵件中的HTML文件時,瀏覽器解碼JavaScript、加載網頁并彈出下載提示,點擊保存后包含惡意程序的壓縮包會釋放到目標系統中,從而躲避郵件網關和安全軟件等的檢測。通常來說,釣魚郵件的HTML附件大多以釣魚網頁為主,HTML文件本身是無害的,攻擊者會通過模仿各類公司網站、社交平臺、郵箱等的登陸界面來釣取用戶賬戶憑證。而近年來越來越多的出現了“HTML smuggling”攻擊,尤其是在微軟開始默認阻止在線文檔中的宏執行后變得更加流行,包括APT29、NOBELIUM等黑客組織近年來都在頻繁使用HTML smuggling策略以繞過檢測。以下是觸發攻擊的執行流程示意圖。
圖2:攻擊執行流程
圖3:HTML代碼示例
相關攻擊活動涉及的部分HTML文件及ZIP文件包如下表所示。
表1:誘餌文件
誘餌文件 | Hash |
PO4500043116.html | 3cafd0cbc8a260da84b4a7f0690cf4d90b4db93c39ddba473f02d225c84cee42 |
SC450013227.html | 8f8ae0659ac0c55a6ced6d38f8b6fa0efc3ae9ca528020e3b9ef8c7542973a94 |
NO20237188.html | b577f7e2e682035e0bae170b9c5dc4d47a15bd98d947dc91653ae80cf8a2514e |
SC23200816.z | 04cb439abc5ef187d36a45d320d35c6b9ad3e2f8dfa06eb5821025733706952f |
INV_00872023.z | 7d99a47f7d0318e8076728d266374a4c5286abc06099e05144d2b6da8af897bb |
SC23200814.z | 7fa534c2586560eacfe1ba58e9e6e412dc3586ab059da922fc9a52c219144588 |
…… |
解壓ZIP包后釋放出攻擊樣本,部分解壓釋放的攻擊樣本如下圖所示。相關惡意樣本的圖標被偽裝成Adobe Reader和Excel等常見軟件的圖標,普通用戶往往難以辨別真偽。這批惡意軟件在命名上普遍采用了PO(Purchase Order客戶采購訂單)、SC(Sales Confirmation銷售確認書)、INV(Inventory庫存)等訂單相關的命名前綴,因此也說明黑客主要利用“商貿信”相關題材實施攻擊,目標則主要是以商品銷售為主營業務的企業或公司。
圖4:惡意樣本圖標
其中,這批攻擊樣本主要采用了兩類加載方式:一類樣本通過Loader(如PureCrypter)下載后續的惡意代碼并多層解密后執行;另一類樣本則直接從資源中釋放后續惡意代碼并解密執行。大部分樣本采用第一類下載執行的方式,并會從weim.us域下載后續的惡意代碼,部分關聯的下載URL如下表所示。
表2:下載URL
下載URL |
https://weim.us/Wraxnkwaa.pdf |
https://weim.us/Ukdmsuvndi.vdf |
https://weim.us/Ugwiuid.wav |
https://weim.us/Eatfh.mp3 |
https://weim.us/Xstaoqwfh.dat |
https://weim.us/Nphmq.dat |
https://weim.us/Tagduvuddz.vdf |
https://weim.us/Xqbyixrreq.vdf |
https://weim.us/Lcogei.wav |
https://weim.us/Xbkdjf.mp3 |
https://weim.us/Ktyyrgmbvhs.vdf |
https://weim.us/Bedzbgtqrg.mp3 |
https://weim.us/Tngnzkzeiz.mp3 |
https://weim.us/Qjacaa.mp4 |
https://weim.us/Mujvrsqrdw.pdf |
…… |
2.2 Loader中的“黑雀”攻擊分析
“黑雀”攻擊是一種具有針對性且高效的攻擊方式,主要以黑客或者黑色產業鏈中的參與者為目標。其攻擊目標通常具有豐富的黑客資源,可以幫助幕后受益者黑雀獲取更大的攻擊資源,享用別人的攻擊成果。我們在追蹤攻擊的過程中意外發現了PureCrypter傳播鏈中的“黑雀”攻擊現象,本節將對此次攻擊涉及的木馬和相關的“黑雀”攻擊進行介紹。
在此次攻擊活動中,攻擊者至少使用了PureCrypter和PureLogs木馬組合實施攻擊。其中PureCrypter最早于 2021年3月出現,其支持分發多種惡意軟件,包括PureLogs、Formbook、AgentTesla、SnakeKeylogger、Redline、AsyncRAT等在內的多個惡意家族。
PureLogs則是該工具背后的開發組織PureCoder在2022 年 12 月新上線的一款新型信息竊取程序,旨在從網絡瀏覽器、加密錢包和電子郵件客戶端中竊取數據。PureLogs每年收費 199美元,終身使用為299美元。由于PureLogs發布尚不足1年,相關的攻擊事件也較為少見。在PureCoder的官方介紹中,其提供的產品包括Pure Crypter(代碼加載、混淆加密等)、Pure Logs(信息竊取)、Pure Miner(挖礦程序)、Blue Loader(僵尸網絡)、Pure hVNC(VNC程序)等多種工具,下圖為其產品截圖和售價。
圖5:PureCoder售賣的工具
PureCoder的銷售渠道包括產品官網(purecoder.io)、暗網論壇、HACKFORUMS、CRACKED.IO等黑客論壇,開發者還通過Telegram和Discord建立討論群組。例如其在Telegram的頻道PureCoder Group就已有數百個用戶。下圖是討論組(General)內的惡意軟件訂購者在交流惡意代碼免殺、存活時間以及感染量等話題。
圖6:討論組內惡意軟件訂購者的交流信息
我們在進一步的追蹤過程中,意外的在Github上發現了一個被植入后門的源代碼項目,項目主頁為:https://github.com/CoderLadyTeam。
圖7:植入后門的源代碼項目
攻擊者創建了名為Pure-Crypter-ADVANCED-INJECTION-TECHNOLOGY-64BIT-32BIT-Anti-Delete-main的項目并引誘尋找PureCrypter源碼、破解、試用等版本的黑客下載編譯。其將木馬偽裝成visual studio的解決方案sln文件的圖標從而誘騙用戶打開(實際是后綴為.scr的惡意程序)。下圖為惡意源碼的文件目錄,由于visual studio對系統配置要求較高,大部分開發者會安裝在本機而非虛擬機內使用,因此這類偽裝成VS項目文件的惡意程序攻擊成功率極高。
圖8:項目結構
當黑客打開Pure Crypter Leak_nls.程序后,木馬會回連Discord的CDN(cdn.discordapp.com),并通過Discord的文件存儲網絡下載后續木馬。下載鏈接如下:
https://cdn[.]discordapp[.]com/attachments/1014017847183286272/1157998889182437416/WindowsUpSetting.scr?ex/WindowsUpSetting.exe
后續階段在此不做更多分析,我們針對Pure Crypter Leak_nls程序進一步關聯后,發現攻擊者不僅利用了PureCrypter工具實施“黑雀”攻擊,還有更多此類被植入惡意程序的工程項目如下表。
表3:惡意源代碼工程
源代碼工程項目 | Hash |
Pure-Crypter-ADVANCED-INJECTION-TECHNOLOGY-64BIT-32BIT-Anti-Delete-main.zip | 2C359289F0DF5A5816E08A1AE4F53F47 |
Escape-from-Tarkov-External-Esp-Aimbot-Hack-Cheat-main.zip | 1457799905135f4b0d22c700ad706bba |
Rainbow-Six-Siege-Rs6-External-Esp-Aimbot-Hack-Cheat-main.zip | cdd5f926c03d48b2bc93cc07d771b1e0 |
Full-Permanent-Spoofer-shadow-ban-remover-main.zip | 48465ded994461d228b6cc9204cf719f |
…… |
同時,類似的攻擊也出現在地下黑客論壇中,如https://sinister.ly/Thread-Leak-Pure-Crypter-Best-Fud-Crypter-On-The-Market-Cracked。
圖9:地下論壇中的惡意源碼項目
攻擊者采用了相似的手法在工程項目中植入Pure Crypter Leak_nls惡意程序,不同的是此次攻擊采用了一款.net編寫的木馬,因此我們推測兩次攻擊有可能源自不同的攻擊者。
圖10:項目結構
通過Pure Crypter Leak_nls程序進行關聯同樣可以發現大量被植入惡意程序的黑客工具項目源碼。
表4:惡意源代碼工程
源代碼工程項目 | Hash |
Discord-Simple-Token-Grabber-V1-main.zip | 454cc03e8e47733f5b0f7901e8e27285 |
Fortnite-Hack-Esp-Exploits-With-Menu-main.zip | d1f6ec9b99b04dea8c8f53c7f30cea01 |
Overwatch-External-Esp-Aimbot-Hack-Cheat-main.zip | df6ef6f5c605fc9e485916d206b078c4 |
Exodus-Exploit-Stealer-Login-Bypass-Hack-Any-Account-main.zip | 48d532d829ed5332610344d9fa9e6814 |
Pure Crypter 1.zip | 3c47b4ba36d357a737fcb90b94437e5a |
Dll-Injector-Eac-Be-Work-All-Games-Fast-LoadLibrary-main.zip | 91476cdebd6552450833bf2dd1445908 |
Discord-Image-Token-Password-Grabber-Exploit-Cve-2022-main.zip | 292ae9d6529ffbe4f844b5d5770f949a |
Dll-Injector-EAC-BAC-VANGUARD-main.zip | 8707381d8208a73f96b6bc3ccf51f4ef |
Call-Of-Duty-Warzone-Hwid-Spoofer-Cleaner-Hwid-main.zip | eaeb37b3abadf4a9156e9f93c764c125 |
HWID-SPOOFER-UNDETECTED-main.zip | 7044c63a226b4d914fc0f3aabb834541 |
Hwid-Spoofer-Bios-Hwid-Volume-Permanted-Eac-Be-Anticheats-main.zip | 0bbfa8ab23de7135ecae63fa53232a15 |
Hwid-Spoofer-Fornite-Cleaner-Spoofer-Permanted-main.zip | 6f885443826510ef9efd9490eb85eb76 |
NEW-DLL-INJECTOR-V2-GAME-main.zip | 909ebe6f0cba3e9bf21e8264113cfcb9 |
…… |
由此可見,PureCrypter的傳播鏈中同時存在著多種“黑雀”攻擊的現象,同時這些攻擊又不局限于PureCrypter工具,一些其它的黑客工具也被污染并發布在Github或各類地下論壇中傳播。因此,我們認為相關攻擊是黑客產業鏈中一種相對廣泛的“黑雀”攻擊活動。借助這些高效的黑吃黑手段,上游攻擊者可以迅速掌握大量普通黑客的攻擊資源,但同時這也給相關的攻擊活動帶來了更多的復雜性和不確定性。對于中招用戶來說,需要高度警惕在已發現的攻擊中是否存在“黑雀”隱藏其中,并借助下游黑客的控制權限實施更加隱秘的攻擊。
三、攻擊樣本分析
本次攻擊活動涉及到多階段多種模塊攻擊形式,在分析完所有攻擊樣本和攻擊手法后,我們將此次攻擊活動歸類為四個階段:誘餌投遞、木馬下載、PureCrypter以及PureLogs。整個流程能夠體現出攻擊者的精密策劃和部署。在捕獲的諸多樣本中,我們選取了較典型的攻擊樣本作為此次的分析案例,接下來我們會從第二階段模塊開始進行詳細的技術分析,攻擊活動的整個流程可參考下圖。
圖11:攻擊活動流程圖
從上面的流程圖能夠看到,第一階段的誘餌投遞,攻擊者先將帶有HTML附件的釣魚郵件投遞給受害者。第二階段的木馬下載采用的是HTML smuggling隱匿攻擊手法,當受害者打開郵件中的HTML文件時,瀏覽器會彈出下載(/保存)文件提示,點擊保存后木馬則會釋放到目標系統中。一旦受害者點擊運行木馬(.NET Downloader),流程則會進入到第三階段PureCrypter。此時,.NET Downloader模塊會在后臺靜默遠程下載并以不落地形式在內存執行Injector模塊。Injector模塊中除了惡意代碼以外,還會通過AES、Reverse(倒置編碼)以及Gzip等方式逐步解密加載其它4個資源模塊。除此之外,其還會使用Protobuf.Deserialize來存儲和操作惡意軟件的相關配置信息,并根據配置信息來決定如何進行下一階段的payload注入。在我們本次的攻擊事例中,第三階段的執行策略是采用進程鏤空技術將第四階段PureLogs注入到白名單“MSBuild.exe”程序中。第四階段中的Loader主要功能是用來解密加載Logger Stealer,同樣的,Logger Stealer也會使用AES、Reverse(倒置編碼)以及Gzip等方式再次逐步解密加載嵌入式的其它4個資源模塊。最后,Logger Stealer則向惡意服務器發送上線包,并等待接收遠程指令,以便完成竊密行為。
鑒于惡意軟件具有多階段多模塊的超復雜特性,我們將各模塊功能做了簡單的概括描述(如表5),詳細的操作細節我們會在接下來的章節中進行深入的分析。
表5:惡意模塊概述表
模塊 | 類型 | 功能 |
第三階段 | ||
.NET Downloader | EXE | 聯網下載Injector模塊并執行解密加載操作(未混淆) |
Injector | DLL | 從自身資源數據中解密出Resources1模塊,再從Resources1模塊中解密出其它兩個模塊。調用“?.dll”模塊格式化字符串數據,使用“protobuf-net.dll”模塊操作和儲存配置信息,最后解密第四階段的“Loader”并將其進行注入操作。 |
Resources1 | DLL | 用以存儲資源(無代碼的資源模塊) |
?.dll | DLL | 格式化從資源數據中解密出的字符串數據信息 |
protobut-net.dll | DLL | 存儲和操作惡意軟件的相關配置信息(白文件) |
第四階段 | ||
Loader | EXE | 解密加載Logger Stealer(未混淆) |
Logger Stealer | DLL | 從自身資源數據中解密出Resources2模塊,再從Resources2模塊中解密出后續需要使用的“costura.dll”、“dotnetzip.dll”、“protobuf-net.dll”等3個模塊,進行相關數據的操作。最后連接C2,執行竊密等惡意行為。 |
Resources2 | DLL | 用以存儲資源(無代碼的資源模塊) |
dotnetzip.dll | DLL | 用來操作ZIP文件的開源庫(白文件) |
costura.dll | DLL | Fody.Costura所使用的庫文件(白文件) |
protobuf-net.dll | DLL | 存儲和操作惡意軟件的相關配置信息(白文件) |
在分析過程中我們發現,第三階段PureCrypter的Injector和PureLogs的Logger Strealer這兩個模塊采用了各種反分析的高強度混淆手法。
首先,惡意軟件所有的類型、字段、屬性、方法等名稱都使用了名稱混淆(Obfuscation)處理,致使分析人員在閱讀代碼時,難以理解它們的具體功能。資源數據和相關配置信息、字符串方面均以加密并壓縮的方式嵌入到程序集中,僅當使用時再進行解壓縮和解密。運行環境如沙箱檢測結果、互斥體的創建、持久化和注入方式、執行自刪除等諸如此類的相關信息數據則采用了protobuf(數據結構序列化/反序列化)進行操作,protobuf的靈活性不僅能夠定制其專用的數據結構,還可在不用重新部署的情況下更新此數據結構,不僅如此,這種儲存方式相當于在各數據成員的外部進行了一層包裹,再配合上名稱混淆處理,促使分析人員無法直觀的查看其所包含的數據信息,很難快速了解惡意軟件的功能配置,以及各資源數據的實際內容和用途。同時也能在一定程度上躲避安全軟件的靜態查殺。
其次,惡意軟件在控制流方面則采用了“spaghetti code”式混淆,修改了方法內的執行流程,添加了大量的有\\無條件分支、循環,函數調用等無用分支等,使控制流程復雜、混亂而難以理解,在靜態分析時則難以判定惡意代碼的結構和真實執行流程,而當動態調試時,這些大量的無意義垃圾指令、跳轉指令又使得分析人員無法快速鎖定關鍵點進行下斷。此外,在大量的方法調用上,惡意軟件還使用了動態代理手法,也就是使用代理類來動態地調用一些常規的方法,這也相當于將常規的方法做了封裝和隱藏,如此一來,無論是靜態還是動態分析時,分析人員都很難直觀的識別惡意代碼所調用的類及類方法。由此而極大的耗費分析人員大量的時間和精力。
除此之外,惡意軟件還使用了Fody.Costura(Fody框架下的插件)將可執行EXE所需的DLL壓縮并嵌入到程序集中,由此簡化惡意軟件的部署和縮小其文件體積。
此次攻擊樣本除最初的Downloader以外還包含了2個EXE文件和8個DLL文件,整體采用了套娃式的多模塊多階段模式,惡意軟件將具有層級關系的Loader模塊和DLL模塊在內存中依照內部使用需求逐個解密加載并執行。這種多階段的執行流程使惡意軟件更加的復雜化,且所有的DLL模塊均具有前后依賴關系,同時再配合上述各種混淆手段,以致安全人員很難獨立調試去混淆后的各模塊,以便有效快速的分析其主要功能。
3.1 木馬下載
木馬的最初下載是由惡意下載頁面完成。查看html源碼我們可以看到,其調用了eval和atob兩個函數,eval可以將一個字符串當做JavaScript代碼來執行,而atob則可將一個Base64編碼的字符串解碼成原始的字符串。
圖12:html源碼
在對atob函數中的字符串進行解碼處理后,可看到一段JavaScript執行代碼。其主要功能為解碼出PE文件,并將該文件命名為“NO20237188.exe”進行保存。具體如下圖所示。
圖13:JavaScript惡意代碼
展示于受害者的惡意頁面效果如下圖所示。
圖14:惡意頁面效果圖
3.2 PureCrypter
“NO20237188.exe”是一個.NET可執行文件,經過我們詳細的逆向分析后,最終通過解密出的字符串作為線索判定此次的惡意軟件為PureCrypter家族。PureCrypter是一款使用C#編寫的Loader,由Downloader和Injector兩個可執行文件組成。其中,Downloader是一個簡單的.NET下載器,主要負責下載和在內存中執行第二階段的Injector。而Injector則為PureCrypter主要的有效載荷,其會解密各種資源模塊并解析與惡意程序設置相關的內部配置文件,并在最后將用以分發惡意軟件的PureLogs部分注入到白名單進程中(本例被注入進程為MSBuild.exe)。下面我們將對PureCrypter各模塊的惡意行為進行詳細的技術分析。
3.2.1 Downloader模塊
該階段的Downloader模塊相對比較簡單,其惡意代碼未進行混淆處理,也未包含環境檢測和持久化等一系列操作。該模塊通過調用httpClient的GetAsync方法從控制服務器下載第二階段Injector模塊。雖然當前服務器下載鏈接已失效,但我們從自有的威脅情報平臺數據庫中成功獲取到了下一階段的Injector(.vbf文件)。當Injector被成功下載后,Downloader則使用簡單的或運算對Injector模塊進行解密。具體代碼如下圖所示。
圖15:下載和解密Injector模塊
隨后,再通過Assembly.Load方法直接加載Injector程序集(.DLL),并指定調用模塊的入口處進入下一階段。
圖16:加載Injector模塊
3.2.2 Injector模塊
解密后被執行的“Tagduvuddz.vdf”是由.NET編寫的32位DLL文件,其則是PureCrypter的核心功能Injector模塊。調用”Tagduvuddz.vdf”入口后,首先會進入到此處。
“GetDelegateForFunctionPointer”是用來將非委托函數指針轉換為委托的方法,在分析中我們發現惡意代碼中使用了大量的動態代理方法調用。
圖17:Injector模塊入口處
讀取名為“yCePnpiAUBbRvu3iIg.ysLIBw2TAHTO5rmrIy”的資源數據進行解密,解密出代理函數的token值。
圖18:解密代碼函數token值
那么,當需要調用某方法時,則傳入相應代理類型的token,然后遍歷類型中的每個字段,通過字段獲取代理方法的MemberRefToken,隨后ReolveMethod。
圖19:代理函數調用代碼
代理的生成類大多數都在根命名空間下,統一格式如下圖所示。采用動態代理調用,致使我們在靜態分析時很難識別其真實的調用方法,唯有在動態調試時才能獲取到其真實的方法。因此使用此手法,能夠極大的增加了安全人員分析樣本的精力和時間成本。
圖20:代理的生成類
讀取“TVCDsGUk3IqH5cDEVT.6bSM4rAxX72vreslXr”的資源數據到內存中,然后進行SHA1運算。
圖21:SHA1運算
運算后的數據內容如下圖所示。
圖22:SHA1運算后的內容
隨后,再使用AES對“TVCDsGUk3IqH5cDEVT.6bSM4rAxX72vreslXr”進行解密。
圖23:AES解密
最后,解密出后續流程中所需的相關字符串信息。
圖24:AES解密后的內容
獲取名為”lUXNHw8KGOcuf5PAjq.oxQ3hTn8wDlB3oBEm8″的資源數據,解壓縮出“31654f80-7170-4def-9adf-dc023d8aee27.dll”資源DLL。
圖25:解壓縮出資源DLL文件
查看“31654f80-7170-4def-9adf-dc023d8aee27.dll”發現其是一個沒有代碼僅包含資源的儲存文件,總共有6個資源數據,具體如下圖所示。
圖26:DLL文件中的資源數據內容
從“31654f80-7170-4def-9adf-dc023d8aee27.dll”中獲取名為“sZuFO”的資源數據。
圖27:獲取“sZuFO”資源數據
隨后,再使用AES解密出”?.dll”。該模塊的主要功能是將解密后的字符串數據(如圖28所示)轉換成名稱為”yrpaExDORrzH”的hashtable格式。
圖28:“?.dll”的主要功能代碼
接著返回原主模塊,從“31654f80-7170-4def-9adf-dc023d8aee27.dll”模塊中查找”costura.protobuf-net.dll.compressed”資源數據,并進行解壓縮處理。
圖29:查找并解壓縮“costura.protobuf-net”
內存加載“protobuf-net.dll”,使用反序列化格式保存惡意軟件的配置信息,具體如下圖所示。
圖30:設置和保存惡意軟件配置信息
根據配置信息,能夠得出此次的注入進程為“MSBuild.exe”。那么在注入之前,Injector模塊則開始嘗試動態解析所需的API函數。前期解密并儲存的名為”yrpaExDORrzH”字符串(如圖28)的hashtable中則包含了將要使用的API函數名以及其所對應的DLL文件名。其中API函數名是以Base64編碼方式儲存,當中編碼的字符串會隨機插入“@”字符,在解碼時,會先刪除“@”字符,然后再使用Base64解碼字符串。部分內容如下圖所示。
圖31:Base64編碼的API字符串
我們對所有API函數名稱進行解碼操作和整理后,得到的具體內容如下表所示。
表6:API函數名稱列表
序號 | 未解碼字串 | 解碼字串 |
1 | “Q3JlY@XRlU@HJvY2Vzc0E=” | CreateProcessA |
2 | “Um@VhZFByb2N@lc3NNZW1vcnk=” | ReadProcessMemory |
3 | “WndVbm1h@cFZpZXd@PZlNlY3Rpb24=” | ZwUnmapViewOfSection |
4 | “Q2xv@c2VI@YW5kbGU=” | CloseHandle |
5 | “V293NjRT@ZXRUaHJlYWRDb250ZXh0″ | Wow64SetThreadContext |
6 | “UmV@zdW1l@VGhyZWFk” | ResumeThread |
7 | “U2V0@VGhyZ@WFkQ29udGV4dA==” | SetThreadContext |
8 | “R2@V0VGhyZWFkQ@29udGV4dA==” | GetThreadContext |
9 | “V3JpdGVQcm9j@ZXNzT@WVtb3J5″ | WriteProcessMemory |
10 | “VmlydHVh@bEFsbG9@jRXg=” | VirtualAllocEx |
解析和導入的具體操作如下圖所示。
圖32:解析和導入API函數
從“31654f80-7170-4def-9adf-dc023d8aee27.dll”模塊中查找”Nvtwjmadmap.Properties.Resources.resources”的資源數據,并提取名為“Npxrc”的資源。
圖33:提取名為“Npxrc”的資源數據
之后,再對 “Npxrc”資源進行數據Reverse和GZip解壓處理,進而得到將要注入到“MSBuild.exe”的可執行文件,也就是下一階段的Loader。
圖34:解出下一階段的Loader
本次注入方式采用的是進程鏤空技術,惡意程序首先通過CreateProcessA函數創建一個掛起的“MSBuild.exe”進程,再使用ZwUnmapViewOfSection函數卸載進程內存映射,最后將下一階段的Loader寫入到進程內存并執行。
除此之外,我們通過解密出的一些字串能夠看到該惡意軟件額外的各種反虛擬機反沙箱等環境檢測,以及反調試等一系列的對抗功能,具體內容如下表所示。
表7:惡意軟件的對抗技術
相關字串 | 功能 |
“SbieDll.dll” | 檢查“”SbieDll.dll””模塊是否存在 |
“VMware|VIRTUAL|A M I|Xen”,
“SerialNumber”, “version”, “select * from Win32_BIOS” |
查詢 WMI 對象 Win32_BIOS 中計算機的 SerialNumber 和 Version,并檢查其是否與正則表達式“ VMware|VIRTUAL|AMI|Xen ”匹配 |
“Microsoft|VMWare|Virtual”,
“manufacturer” |
查詢 WMI 對象 Win32_ComputerSystem 中計算機的制造商和型號,并檢查它是否與正則表達式“ Microsoft|VMWare|Virtual ”匹配 |
無 | 調用 CheckRemoteDebuggerPresent |
無 | 檢查顯示器的具體分辨率 |
3.3 PureLogs
3.3.1 Loader模塊
注入的Loader模塊是一個由.NET編寫的64位PE文件,使用反編譯器查看發現惡意代碼未進行混淆處理。其主要功能為釋放出最終的Stealer惡意軟件,并加載執行。首先,Loader對指定數據進行先GZip解壓再Reverse操作。具體如下圖所示。
圖35:釋放并加載執行Stealer惡意軟件
在內存中解出的可執行PE文件如下圖所示。
圖36:解密出的PE文件
之后,再加載執行最終的Logger Strealer模塊,并指定調用類和類方法。
圖37:加載執行Logger Strealer模塊
Logger Strealer模塊與Injector模塊的混淆程度相似,同樣是使用了各種混淆手法。其首先會使用Base64解碼出后續所需要的特定字符串,其中包括C2、上線包標識字串以及互斥體對象名等信息。
圖38:解碼特定字符串
解碼出的字符串內容如下圖所示。也是由此處,我們根據其中的特殊字串關聯出該Strealer是屬于Pure Logger家族。
圖39:解碼出的字符串內容
之后,創建名為“c1897c4d3e7060ba”的互斥體對象。
圖40:創建互斥體
創建socket并進行connect連接,向遠程服務器發送上線包,上線包的數據使用了GZip和DES進行加密。
圖41:聯網并發送上線包
抓取的上線包的流量數據如下圖所示。
圖42:加密后的上線包內容
隨后,則進入接收功能。具體代碼如下圖所示。
圖43:等待接收遠程控制指令
獲取名為“4eUtR2Udd4nrZFCjx4.GhIn5DabADP77htptt”的資源數據,進行解密和解壓處理,解出“ef3a8629-365f-4e5a-bdae-60022f71fcc6.dll”文件。
圖44:解密出資源DLL文件
“ef3a8629-365f-4e5a-bdae-60022f71fcc6.dll”也是一個無代碼的資源文件,其包含4個Fody/Costura嵌入式的壓縮資源。具體如下圖所示。
圖45:DLL文件中的資源數據內容
我們從惡意代碼中能夠看到,其在滿足某項條件后,會通過powershell命令進行自刪除,指令為:“Start-Sleep -Seconds 10; Remove-Item -Path’‘’+ FILEPATH + ‘” -Force”。
圖46:自刪除指令內容
最后,當Logger Strealer模塊與惡意服務器成功連接后,則會接收遠程控制指令,以便執行相應的惡意行為。參考PureLogs官網介紹,我們能夠看到該Logger Stealer具有瀏覽器憑證、密碼、Cookies、信用卡等,以及多類加密錢包和各種常用應用所涉及的賬密碼隱私數據的竊取功能。
圖47:Logger Stealer竊密工具
四、總 結
本文披露了近期針對我國某攝像頭公司的一起網絡攻擊活動,并對相關的攻擊武器PureCrypter和PureLogs及其采用的技術和對抗手法進行了全面和深入的分析,包括基于所有類型、字段、屬性、方法等的名稱混淆、基于“spaghetti code”的控制流混淆、自定義的動態代理調用(隱藏類及方法)、基于“Protobuf”的數據結構封裝等多種對抗技術的交叉運用,此外還分析了攻擊中采用的多模塊多階段的套娃模式,包括10個具有層級關系的Loader及DLL模塊等。同時我們還對追蹤過程中發現的“黑雀”攻擊現象進行了披露和分析,這些高效的黑吃黑手段給黑客產業鏈帶來了更多的復雜性,也讓網絡秩序變得越發不安全。
此外,盡管目前未發現本次攻擊活動有更進一步的攻擊意圖,但直接針對物聯網企業的攻擊仍需引起更多的重視。近年來企業遭到網絡入侵并進一步被供應鏈攻擊的事件屢見不鮮,很多看似影響不大的網絡攻擊在早期未能得到企業足夠的重視,結果卻演變成了重大安全事件,例如Solarwinds供應鏈攻擊事件,起初的攻擊入口源于普通員工的密碼失竊,多家企業均發現了相關設備上的異常活動卻并未深入調查分析,直到數月后才被披露,影響深遠并造成了巨大危害。而本次攻擊中,由于在PureCrypter的傳播鏈中發現了“黑雀”攻擊的現象,這使得相關的攻擊活動變得更加復雜。除了防范黑客在經濟層面的攻擊意圖外,還需進一步關注其是否存在轉賣控制權限、竊取軟件源代碼、篡改源代碼構造漏洞、甚至是植入后門實施供應鏈攻擊等隱藏更深的攻擊目的,需要引起相關企業足夠的警惕。網絡安全無小事,不要忽視任何一次可能帶來潛在危害的安全隱患,治病于未病,隱患于未然。
來源:ADLab