VileRAT:一個複雜的Python植入物VileRAT是來自DeathStalker的複雜同名攻擊鏈的最後一個已知階段。它是一個經過混淆和打包的Python3RAT,與py2exe捆綁為一個獨立的二進製文件。研究人員在2020年第二季度首次發現它,隨後它也被其他供應商命名為PyVil。
關於VileRAT的介紹嵌入在py2exe捆綁二進製文件中的Python庫(DLL)通常來自官方Python版本。在分析VileRAT示例時,我們注意到它的PythonDLL是Python3.7源代碼的自定義編譯:DLL版本被標記為“heads/3.7-dirty”而不是官方發布的“tags/v3.7.4”,並引用縮短的Git提交ID“0af9bef61a”。這個縮短的提交ID與標準CPython實現的3.7分支的源代碼存儲庫中的一個匹配,該實現的日期為2020年5月23日。考慮到這個提交日期,以及在2020年第二季度首次發現VileRAT,研究人員相信VileRAT是在2020年6月首次部署的。
解包VileRAT當我們第一次遇到VileRAT時,我們注意到所有用於Python3的常用反編譯工(uncompille6、decompyle3和unpyc37等都無法從VileRAT字節碼中正確檢索Python源代碼。
VileRAT的第1階段已在Python字節碼級別進行了混淆,目的是破壞現有的反編譯器。字節碼通過以下方式混淆:
添加多個在執行時沒有任何影響的操作(中立操作)和無用數據;
添加令人困惑的分支和異常處理程序;
在執行期間永遠不會到達的部分中插入無效的字節碼,反編譯器仍然嘗試反編譯,但失敗。
VileRAT的第1階段Python字節碼,原始形式(左)和反混淆形式(右),只需看紅色部分即可
一旦在字節碼級別進行了清理,VileRAT解包的第1階段就可以被正確反編譯為Python代碼:
VileRAT嵌入不少於三層的包裝。目的就是使Python腳本(VileRAT)難以從人類角度分析,這也是DeathStalker的獨特做法,考慮到他們也對感染鏈的所有其他步驟進行了相同的嘗試,證明這是慣用做法。
最後的解包步驟最終提取了VileRAT的Python代碼和它在內存中的整個依賴包,所有這些內容導致綁定py2ex的VileRAT樣本的重量大約為12MB。使用第二類算法解包利用解碼和BZIP2解壓縮。最後的VileRAT Python包包含一個conf.pyc模塊,其中包括一個版本號,以及默認的C2域名:
VileRAT版本和函數
通過分析並比較了各種VileRAT示例,版本號是從2.4到8。雖然版本號跨度這麼大,但VileRAT的功能沒有太大變化,研究人員分析的最早示例中的一些功能實際上已經被刪除,例如將SSH用作C2通道,或者截圖,後者現在在VileLoader中實現,其餘功能包括:
1.使用現有或下載的二進製文件執行任意遠程命令;
2.建立與遠程服務器的SSH連接,可能利用它們將目標計算機的端口轉發到遠程服務器;
鍵盤記錄;
3.使用計劃任務設置持久性;
4.列出安裝在目標計算機上的安全解決方案;
5.從C2服務器自我更新。
6.VileRAT有五種不同的專有執行模式,可從命令行啟用,所有這些模式都可以通過來自C2的附加命令開關、參數或數據進一步更改:
命令行選項、內部名稱和執行模式說明如下:
1.-a, enc_cmd_dataRUN_CMD_AS_USER_ARG,任意命令執行:“命令”一詞範圍很廣:它可以是一個現有的二進製文件、一個shell命令、一個下載的可執行文件、一個Python包,或者一個內部的VileRAT函數。為了指定“命令”,一個JSON字典作為可選參數傳遞。有些命令將通過再次啟動VileRAT(使用一組不同的命令選項)來執行。執行完成後,VileRAT退出。
2.-l,enc_cmd_data_rssRUN_R_SSH_SHELL_ARG,SSH連接測試:VileRAT啟動自己的一個新進程,它連接到一個遠程SSH服務器(使用一個私鑰),然後關閉連接。這個SSH連接在以前的示例中用作C2通道,但是在最近的示例中刪除了C2邏輯。為了指定SSH連接設置,將傳遞一個JSON字典作為可選參數。執行完成後,VileRAT退出。
3.-r,enc_cmd_data_rdsRUN_R_DYN_SSH_ARG,SSH隧道本地端口轉發:VileRAT啟動自己的一個新進程,它連接到遠程SSH服務器(使用密碼)。此連接用作將端口從目標計算機轉發到遠程服務器的隧道。為了指定SSH連接設置,JSON字典作為可選參數傳遞。一旦遠程端至少連接到轉發端口一次,VileRAT就會退出,然後關閉連接。
4.-c,cp_exe_path,任意文件刪除:VileRAT嘗試刪除一個文件,其路徑以明文命令參數的形式給出。當文件被刪除或達到最大嘗試次數(10)時,VileRAT將退出。
5.-t,rtsIS_TASK_SCHED_ARG,C2主客戶端模式:這是VileRAT的主要執行模式。它定期在C2服務器上輪詢要執行的命令。可以執行的命令是此表中描述的命令之一(RUN_R_SSH_SHELL_ARG、RUN_CMD_AS_USER_ARG、RUN_R_DYN_SSH_ARG),或其他VileRAT內部更新命令之一。 CMD_UPDATE_SVC從C2下載的包觸發(部分或完整)VileRAT更新,而CMD_UPDATE_CONF可以更新內部延遲並在C2需要時啟用鍵盤記錄器。
正如我們在2022年確定的那樣,在一個典型的VileRAT第一次執行中,植入程序從以下參數開始:
請注意,在這種情況下,作為第一個參數傳遞的目標標識符實際上並未被VileRAT利用,攻擊者可能只是使用它來輕鬆識別稍後運行的VileRAT進程。較舊的VileRAT變體通常使用顯式的“-f”和“-t”命令行開關啟動,這些現在是隱式的並默認啟用。
以下是研究人員發現的VileRAT版本發展過程中一些值得注意的變化,除了定期更新以修復代碼錯誤或處理未捕獲的異常、重構代碼、更新依賴項和更改配置:
1.在2.4和2.7版之間,VileRAT釋放了使用遠程SSH服務器作為C2通道的功能,以及截圖實現;
2.在3.0版中,用於各種加密例程的base64編碼RC4密鑰從“Ixada4bxU3G0AgjcX+s0AYndBs4wiviTVIAwDiiEPPA=”更改為“XMpPrh70/0YsN3aPc4Q4VmopzKMGvhzlG4f6vk4LKkI=”,並在編碼方案中添加了額外的XOR通道(使用第2類算法)。重構了VileRAT遠程更新機制,增加了一個額外的命令開關(稱為pmode);
3.在3.7版中,研究人員最初確定用於2.4版本的特定Chrome版本和Trezor錢包偵察功能被從代碼中刪除,VileRAT失去了從運行它的文件系統上提供的文件進行更新的能力;
4.在5.4版中,生成UUID類型標識符的方式發生了變化;
5.在6.5版中,添加了一個額外的命令開關(稱為jmode);
6.在6.6版中,“-f”和“-t”命令選項默認啟用。
VileRATHTTPC2協議VileRAT的主C2通信循環,在主C2客戶端模式下執行,非常簡單,並且在一個單獨的線程中運行:
1.每隔2-5分鐘,VileRAT會嘗試向其配置中存在的每個C2服務器發送HTTPPOST請求,直到有一個響應或列表用盡。環境數據嵌入到一個JSON字典中,使用RC4加密,使用第二類的XOR算法編碼,base64編碼和URL編碼,最後設置為HTTP請求URL路徑;
2.C2服務器可能會響應一個HTTP響應,其正文可以包含一個編碼和加密的JSON數組。如果是這樣,JSON必須至少包含一個要執行的命令。
VileRATC2請求準備函數
就像在VileLoader中一樣,HTTP請求中的User-Agent值是從可能值的固定列表中隨機選擇的。傳遞給C2服務器的JSON可以分解如下:
簡單介紹一下VileRAT的基礎設施
我們尋找了可以從收集的示例(惡意DOCX文件、DOTM文件及其宏、VileDropper、VileLoader或VileRAT)中檢索到的C2域中的特性,這些特性在本報告中有所描述。我們忽略了2021年10月中旬之前註冊的域名,因為其中大部分已經在公共來源中被披露,所有已知的惡意域名和IP都在下面的攻擊指標部分中完整列出。值得注意的是,迄今為止,我們已經確定了數百個與VileRAT攻擊鏈相關的域。
這使我們能夠確定一些可能的VileRAT特定的基礎設施創建偏好:
1.最遲從2021年10月開始,DeathStalker基礎設施IP均屬於AS42159(DELTAHOSTUA,位於NL)。根據研究人員的分析,DeathStalker可能早在2021年6月就開始利用具有來自該AS(以及其他AS)的IP地址的服務器;
2.惡意域名通常在NAMECHEAP、PorkbunLLC或PDRLtd.批量註冊(同一天多個域);
3.許多惡意域名試圖偽裝成看似合法的數字服務提供商名稱(例如“azcloudazure[.]com”或“amzbooks[.]org”),其中一些表示可能試圖利用全球關注的事件進行攻擊活動(例如“weareukrainepeople[.]com”或“covidsrc[.]com”);
4.大多數時候域使用似乎是分開的,一個域僅用於攻擊DOCX/DOTM、VileLoader或VileRAT,並且可能表明攻擊者希望將其操作緊密聚集在一起。但是所有這些域通常都指向一組非常有限的IP地址;
5.研究人員通過對惡意活動期間暴露在C2IP上的服務特徵的快速分析,注意到一些常見的簽名:HTTP服務發送的內容和標頭值的組合只能針對此類惡意基礎設施進行檢索。
VileRAT的目標從2021年8月至今,在保加利亞、塞浦路斯、德國、格林納丁斯、科威特、馬耳他、阿拉伯聯合酋長國和俄羅斯聯邦發現了10個受攻擊或目標組織。
DeathStalker的VileRAT活動所針對的組織區域分佈(較深的顏色表示較高的集中度)
研究人員目前還無法對所有已確定的組織進行分析,但其中一半是外匯(FOREX)和加密貨幣交易所經紀人。一些已識別的惡意文檔和基礎架構域包含目標組織的名稱,並確認了這一目標。
值得注意的是,被確認的機構包括近期的初創公司和老牌行業領袖,包括可疑的加密貨幣交易平台。從我們手頭有限的數據來看,確定這樣的組織是極其困難的,因為一個小型FOREX公司可能在不同的國家託管其基礎設施,僱傭幾個來自不同國家的遠程工作人員,並合法地設在避稅天堂。
歸因當研究人員在2020年6月首次發現VileRAT時,一開始將植入物和相關攻擊鏈歸因於DeathStalker。這主要是因為它與先前已知的EVILNUM活動的相似性,比如LNK文件中的常見特定元數據,類似的TTP——尤其是利用GoogleDrive文件和虛假角色的魚叉式網絡釣魚方法,受害者特徵也一樣。 EVILNUM活動和DeathStalker之間的聯繫已經在我們之前的文章中介紹過。
如上述分析所述,研究人員仍然高度相信所描述的更新植入物和相關攻擊鍊是由DeathStalker開發和運營的,原因如下:
1.本次活動所使用的主要植入物(VileLoader和VileRAT)是之前分析過的內容的更新,並且仍然與之前的樣本共享大量代碼和實現細節;
2.上述感染鏈的各個組件(DOCX、啟用宏的DOTM、VileDropper)共享了之前被DeathStalker用作其他活動(尤其是PowerSing和PowerPepper)一部分的實現邏輯和技術;
3.使用受害者從電子郵件中下載的惡意文檔作為攻擊媒介;
4.向遠程服務器發送攻擊進度和錯誤信號;
5.使用類似實現的XOR算法進行字符串混淆,在DOTM宏中,以及以前記錄的PowerPepper加載程序中;
6.利用Office對象屬性作為隱藏數據源;
7.使用具有預設常量的類似哈希函數,在VileDropper中生成目標標識符,在PowerSing中解碼IP地址。
總結1.VileRAT及其加載程序和相關攻擊鏈在兩年多的時間裡不斷且頻繁地更新,並且仍然被用來持續針對外幣和加密貨幣交易經紀人,其目的是逃避檢測。
2.逃避檢測一直是DeathStalker的目標,VileRAT活動足以證明這一切,毫無疑問,它是我們迄今為止發現的最成功的逃避檢測成功的攻擊,使用了最複雜、混淆手段最多和試探性規避的技術。從使用VBA和JS進行最先進的混淆,到使用Python進行多層和基礎層打包,強大的多階段內存中PE加載程序以及安全供應商特定的啟發式繞過,讓分析者無所適從。
3.考慮到龐大且快速變化的相關基礎設施,毫無疑問,DeathStalker正在做出巨大的努力來開發和維護訪問。然而,也有一些小故障和不一致,比如最終負載超過10MB (VileRAT),簡單的感染載體,大量可疑的通信模式,嘈雜且容易識別的進程執行或文件部署,以及粗略的開發實踐留下的漏洞和需要頻繁的植入更新。因此,一個有效且正確設置的終端保護解決方案仍然能夠檢測和阻止VileRAT的大部分相關惡意活動。