Rhadamanthys是一款很高級的信息竊取程序,於去年9月在暗網上首次亮相,亮相之初即受到了攻擊者的熱捧。
2022年9月24日,一個化名“kingcrete2022”的用戶發布了以下內容:
開發者並沒有急於將該產品投放市場,他們已經以“kingcrete2022”的化名在論壇上潛伏了半年,實際可能比其他化名的時間還要長。惡意軟件的整體性構建在正式發布前整整一個月就已經編譯完成了。在正式發布後,一系列瘋狂的版本更新便開始了,開發者添加了一長串功能和子功能,並提供了英語和俄語支持。很快數千個用戶的信息、數十萬個密碼和數百個加密貨幣錢包就被竊取。為了擴大攻擊範圍,開發者還對購買其服務的用戶提供了售後服務。
攻擊目標理論上,Rhadamanthys的開發者並不關心用戶如何處理竊取者竊取的非法數據,不管是實施欺詐、出售數據、發動內戰,對開發者來說都是一樣的。實際上,這種現成惡意軟件的主要客戶是投機取巧的網絡犯罪分子,他們的目標是在任何時間感染任何人。因此,活動受害者遍布世界各地,特別是在一些地方,一些運營商已經開始進行創造性迭代了,比如一個活動以OBS studio等視頻編輯軟件為幌子傳播樣本,通過谷歌廣告推送給不知情的受害者。
攻擊熱圖一般來說,操作這類惡意軟件的攻擊者通常不像大型勒索軟件組織那樣太關心大型目標。對他們來說,這只是一場數字遊戲,即從眾多受害者身上榨取金錢。儘管如此,從統計數據來看,這些攻擊的最終目標確實是針對大型組織的;通過監測,我們能夠確認Rhadamanthys試圖感染加拿大的一家政府機構,以及印度基礎設施部門的一家能源公司。
功能概述Rhadamanthys中包含的功能非常多,其設計原則就是囊括信息竊取所需的一切功能和有關擴展。
Rhadamanthys的功能列表包括竊取受害者的系統信息:計算機名稱、用戶名、內存容量、CPU內核、屏幕分辨率、時區、地理位置、環境、安裝的軟件、屏幕截圖、cookie、歷史記錄、自動填充、保存的信用卡、下載、收藏夾和擴展,它從FTP客戶端竊取憑據——Cyberduck、FTP Navigator、FTPRush、FlashFXP、Smartftp、TotalCommander、Winscp、Ws_FTP和Coreftp;以及來自郵件客戶端CheckMail, Clawsmail, GmailNotifierPro, Mailbird, Outlook, PostboxApp, Thebat! Thunderbird, TrulyMail, eM和Foxmail;它從雙因素驗證應用程序和密碼管理器RoboForm、RinAuth、Authy和KeePass竊取憑據;VPN業務,包括AzrieVPN、NordVPN、OpenVPN、PrivateVPN_Global_AB、ProtonVPN和WindscribeVPN;筆記應用程序,包括NoteFly、Notezilla、Simple Stick Notes和Windows Stick Notes;即時通訊應用程序的消息歷史記錄,包括Psi+、Pidgin、tox、Discord和Telegram;此外,它還竊取了Steam、TeamViewer和SecureCRT的受害者憑據。
當Filezilla FTP憑據出現在攻擊者端時被竊取
開發者特別強調了與竊取加密貨幣相關的功能,在一個版本更新中,有9項新功能,其中4項是對加密貨幣錢包的竊取和破解的增強。最初版本中支持的錢包列表確實很難處理,包括Auvitas, BitApp, Crocobit, Exodus, Finnie, GuildWallet, ICONex, Jaxx, Keplr, Liquality, MTV, Metamask, Mobox, Nifty, Oxygen, Phantom, Rabet, Ronin, Slope, Sollet, Starcoin, Swash, Terra, Station, Tron, XinPay, Yoroi, ZilPay, Coin98, Armory, AtomicWallet, Atomicdex, Binance, Bisq, BitcoinCore, BitcoinGold, Bytecoin, coinomi, DashCore, DeFi, Dogecoin, Electron, Electrum, Ethereum, Exodus, Frame, Guarda, Jaxx, LitecoinCore, Monero, MyCrypto, MyMonero, Safepay, Solar, Tokenpocket, WalletWasabi, Zap, Zcash 和Zecwallet。
所有這些竊取行為都是在感染後自動執行的,如果攻擊者決定對受感染的設備進行更多的操作,他們可以將新配置推到“文件抓取”模塊,該模塊將竊取與windows搜索查詢匹配的所有文件或者對於真正的高級用戶,將手工製作的powershell推到受害設備上執行。
在攻擊者端出現時被竊取的環境變量
“文件抓取”模塊在攻擊者端出現時竊取的文件
技術分析初步執行流程該惡意軟件在進入信息竊取功能之前要經歷六個執行階段:滴管、shellcode、安裝程序等。
在分析Rhadamanthys時,我們觀察到分析樣本的邏輯與上述文章中詳細描述的邏輯之間的差異,這證明了惡意軟件還在不斷開發中。最值得注意的是NSIS加載程序DLL的行為,在我們分析的執行流中,它從C:\\Windows\\Microsoft.Net\\Framework\\v4.0.30319\\AppLaunch.exe創建一個掛起的進程,然後用注入的惡意代碼逐個替換掛起的進程。
如上所述,注入的代碼會依次加載幾個執行階段,其中一個階段嘗試從Al-Khaser項目中獲取許多VM逃避,然後解綁ntdll.dll中的函數,以避免被檢測到。最後,它解析了一個內部混淆的C2地址,並從其中下載包含實際信息竊取功能的最後階段。
分析孤立內存轉儲分析實際的竊取邏輯並不是那麼簡單,在無法訪問實時C2服務器的情況下,分析師有兩種選擇。要么他們去執行一個全新的執行鏈,對所有階段進行調試,並希望獲得一個實時的C2服務器,該服務器會使用很多啟發式方法將它們竊取;或者在不可讀的狀態下使用轉儲,這些轉儲是在C2仍然存在時從沙箱運行中獲得的。在這種特殊的情況下,內存轉儲包含許多說明惡意軟件大致行為的字符串,但是在進行適當的交互式反彙編之前存在許多障礙。
第一個也是最主要的障礙是缺乏API調用的解決方案。在反彙編程序中打開轉儲,然後進行函數調用,可以很快地運行一個必須是動態解析函數的自製導入表。轉儲是沙箱運行的產物,早就結束了,現在這些地址似乎毫無意義。我們能夠使用下面將要解釋的方法來解析幾乎每個函數。
首先,我們知道,在沙箱運行期間,這些地址指向加載到內存中的DLL。第二,我們知道執行是在擁有代碼名為Win10v2004-20220812-en的tria.ge環境中運行的。我們將自己的虛擬可執行文件上傳到沙箱中,確保我們選擇的環境與原始沙箱運行中使用的環境相同,然後查看我們選擇的DLL並恢復DLL版本。
不幸的是,即使我們有DLL版本,微軟也沒有那麼慷慨地提供DLL的歷史版本供下載。這類問題有多種解決方法,你可以上winbindex查找。我們選擇使用tria.ge的一個功能:許多用戶要求提供手動轉儲執行流中生成的文件的功能。作為一種解決方案,沙箱引入了一項功能,允許用戶轉儲他們想要的任何文件,只要他們打開windows文件資源管理器並手動刪除那裡的文件。好吧,如果我們嘗試將kernel32.dll從C:\windows\system32中的駐留位置刪除,操作系統將不會允許,但沒有什麼能阻止我們將文件複製到其他地方,然後刪除副本。在原始沙箱運行期間加載到內存中的同一個DLL現在可以在分析結束後從分析報告的“下載”部分獲得。
通過這種方式,我們下載了許多dll,這些dll是惡意軟件或任何軟件真正想要解析API的始作俑者,如advapi32.dll、user32.dll、msvcrt.dll、ws2_32.dll等。現在我們可以在反彙編程序中打開這些文件,手動加載文件並為每個DLL函數分配虛擬地址。遺憾的是,我們還遠遠沒有完成,因為我們仍然不知道DLL最初加載時的基址,甚至不知道特定的DLL包含某個內存地址所指向的函數。
即使不知道哪一個是相關的DLL,也可以通過簡單的觀察在一定程度上緩解,例如,在下圖中,函數qword_c5c08(指針值0x7ffbf1bd5f20)將註冊表項作為參數,因此很可能來自advapi32.dll。但這不會適用於每個dll,我們不會總是足夠幸運地找到一個函數,惡意軟件會將這樣一個硬編碼字符串作為參數。更關鍵的是,即使我們以某種方式知道每個函數地址的正確DLL,這仍然不會告訴我們在最初的沙箱運行期間加載DLL的原始地址,這對於計算當時加載到內存中的函數地址(我們正在嘗試解析)與我們在反彙編程序中打開的加載的帶註釋的DLL中的標記函數地址之間的rebase delta(基於深度學習的語音和自然語言理解模型訓練平台)是必要的。
qword_c5c08可能是一個以某種方式與Windows註冊表交互的函數
為了克服這個障礙,我們注意到沙箱轉儲中的函數地址可能被劃分為連續的序列,每個序列都是從同一個DLL導入的。這意味著,如果我們從表中取出10個qword指針,幸運的是它們都是從同一個DLL中解析的,那麼當加載到內存中時,在該DLL中,這10個函數的地址之間將存在相同的差異。為了講解方便,我們舉一個示例:假設我們要解析的10個地址列表以某個地址AX開始,然後以AX+0x300、AX+0x500、AX+0x930等六個其他地址繼續;進一步假設,在一個加載和註釋的DLL中,我們發現對於某個地址AY,恰好AY+0x300、AY+0x500、AY+0x930等都是函數的地址。這是一個非常幸運的巧合,它本身就發生了,原始沙箱運行中的原始地址AX解析為我們註釋文件中AY中的函數。通過查看與列表中的地址匹配的10個函數名,並驗證它們似乎是沙箱中運行的軟件所需的合理列表,可以進一步檢查匹配情況。
以下IDAPython代碼在加載的DLL數據庫中運行時,將自動執行查找函數地址序列匹配項的任務:
例如,上圖中看到的地址(我們懷疑是從advapi32.dll解析出來的地址)出現在以下10個地址的序列中:
我們打開從沙箱中轉儲的advapi32.dll文件的註釋idb,加載上面的IDA腳本,並運行函數dll_match,將此地址列表作為輸入。作為輸出,我們收到這些函數地址中每一個的正確分辨率。
事實證明,在沙箱運行期間加載到地址0x7ffbf1bd5f20的上述函數是RegQueryValueExW。使用這種方法,可以很容易地“挑選”並嘗試對各種dll運行相同的腳本,以查看獲得了哪些匹配,以及它們的可行性。雖然特定的工作流程不能很好地擴展,但如果需要的話,不難看出如何簡化流程,例如,通過保留許多DLL版本的函數地址差異的預計算數據庫,並對其進行所有差異比較。
竊取Chrome信息的過程示例
即使解決了API調用,數據庫仍然非常大,包含超過2500個函數。其中許多是來自第三方庫的庫函數,如sqlite3和lua_cjson,這帶來了另一個麻煩,因為解析這些函數需要我們編譯這些庫的註釋版本,然後執行bindiff(或類似的操作)來標記Rhadamanthys使用的函數。這是一個出了名的挑選過程,許多標籤在手動驗證之前並沒有太大用處。
綜上所述,數據庫的狀態現在更令人滿意,並允許我們以以前無法做到的方式分析執行流。例如,我們將重點關注惡意軟件從谷歌Chrome中竊取存儲的登錄憑據、cookie等的能力,包括三個階段:正在搜索包含所有數據的正確目錄;
從包含cookie、登錄數據等的感興趣的文件中讀取原始數據;
根據數據是JSON還是SQL數據庫格式,使用第三方庫邏輯對數據進行解析;
惡意軟件首先在受害者文件系統中遞歸搜索名為“web data”的文件,以導航到%LOCALAPPDATA%\\Google\\Chrome\\User data\\default,然後遍歷樹查找其他工件,如“Cookie”或“登錄數據”,並將每個匹配項收集到二進制位字段中;如果這個字段非零,那麼惡意軟件就會確信它已經正確定位了Chrome目錄。
然後,惡意軟件會訪問用戶感興趣的文件,比如登錄數據。其中一些文件是SQL數據庫,在這種情況下,惡意軟件從內存中的文件內容初始化SQL數據庫,然後通過發出SELECT語句獲得所需的數據。相比之下,其他的則是JSON格式,因此惡意軟件會調用一個函數來解析JSON並提取與某個項相關的值:
通過將信息解析為明文格式,現在可以將其附加到被盜信息數據庫中,並最終報告給攻擊者,從而得到針對該特定目標(Chrome)的盜竊功能。
總結Rhadamanthys代表著在新興惡意軟件發展的趨勢,即它們盡可能多地發揮作用,也證明了在惡意軟件行業,品牌的影響力慢慢變大。一些讀者可能還記得Godzill加載程序的模式,它的零售價格只有Emotet的四分之一,並提供一系列與Emotet截然不同的功能,以增強其競爭力。這清楚地表明,攻擊者不會明確計算哪些功能集會為他們帶來更多的受害者,他們依賴於一種模糊的感覺,即他們對開發者、品牌和功能更看重。任何開發人員都可以編寫一段惡意軟件,有些開發人員甚至可以編寫一個具有完整功能的惡意軟件,但需要市場的認可。