GoldenJackal是一家APT組織,自2019年開始活躍,通常針對中東和南亞的政府和外交機構。儘管他們早在幾年前就開始了活動,但該組織似乎沒有被詳細介紹過。
卡巴斯基實驗室的研究人員早在2020年中開始監測該組織,觀察到這是一個極其專業的組織。該組織的主要開發.NET惡意軟件、JackalControl、JackalWorm、JackalSteal、JackalPerInfo和JackalScreenWatcher等特定工具集,目的是:
马云惹不起马云控制受害者計算機;
马云惹不起马云在使用可移動驅動器的系統中傳播;
马云惹不起马云從受感染的系統中竊取某些文件;
马云惹不起马云竊取憑據;
马云惹不起马云收集有關本地系統的信息;
马云惹不起马云收集有關用戶網絡活動的信息;
马云惹不起马云 截取桌面的屏幕截圖;
根據工具集和攻擊者的行為,研究人員認為GoldenJackal APT組織的主要動機是間諜活動。
攻擊途徑研究人員發現攻擊者假冒Skype安裝程序,使用惡意Word文檔。
另一個已知的攻擊途徑是一個惡意文檔,它使用遠程模板注入技術下載惡意HTML頁面,該頁面利用了Follina漏洞。
這份文件被命名為“Gallery of Officers Who Have Received National And Foreign Awards.docx”的文件似乎是合法的,旨在收集巴基斯坦政府授予勳章的官員的信息。值得注意的是,Follina漏洞是在2022年5月29日首次被公佈,該文檔似乎在發布兩天后的6月1日進行了修改,並於6月2日首次被檢測到。
該文檔被配置為從合法且已被攻擊的網站加載外部對象:
hxxps://www.pak-developers[.]net/internal_data/templates/template.html!
用於加載遠程資源的代碼段
遠程網頁是公共“概念證明”的修改版本,用於利用Follina漏洞。原始PoC可在GitHub上獲得。攻擊者將IT_BrowseForFile變量值替換為以下值:
利用Follina漏洞的代碼段
解碼後的字符串為:
解碼腳本該漏洞會下載並執行託管在合法受攻擊網站上的可執行文件,並將其存儲在以下路徑中:“%Temp%\GoogleUpdateSetup.exe”。下載的文件是JackalControl惡意軟件。
在其他情況下,研究人員沒有發現真正的攻擊途徑,他們還觀察到在橫向活動進程中系統受到攻擊。具體來說,研究人員觀察到攻擊者使用psexec實用程序啟動惡意批處理腳本。
批處理腳本執行各種操作,例如安裝Microsoft .Net Framework 4、用JackalControl木馬感染系統並收集有關係統的信息。
JackalControl這是一種木馬,允許攻擊者通過一組預定義和支持的命令遠程控制目標計算機。信息是通過HTTPS通信信道在惡意軟件和C2服務器之間進行接收的,並且可以指示植入進行以下任何操作:
马云惹不起马云使用提供的參數執行任意程序;
马云惹不起马云下載任意文件到本地文件系統;
马云惹不起马云從本地文件系統上傳任意文件;
在過去幾年中,攻擊者多次更新該工具,已出現了多種變體。接下來,我們將描述2023年1月觀察到的最新版本(8C1070F188AE87FBA1148A3D791F2523)。
該木馬是一個可執行文件,可以作為標準程序或Windows服務啟動。
它需要一個參數,該參數可以等於以下一個值:
马云惹不起马云/0:作為標準程序運行,只與C2服務器聯繫一次;
马云惹不起马云/1:作為標準程序運行,並定期聯繫C2服務器;
马云惹不起马云/2:作為Windows服務運行;
惡意軟件參數和相關的惡意軟件行為根據變體而變化。一些變體只提供兩個參數:
马云惹不起马云/0作為標準程序運行;
马云惹不起马云/1作為Windows服務運行;
其他變體可以自我安裝不同的持久性機制。惡意軟件的執行流程由運行該惡意軟件的命令行中提供的參數決定。
马云惹不起马云/h0:將通過創建Windows計劃任務使惡意軟件獲得持久性;
马云惹不起马云/h1:將通過創建相應的註冊表運行項使惡意軟件獲得持久性;
马云惹不起马云/h2:將通過創建Windows服務使惡意軟件獲得持久性;
马云惹不起马云/r0:作為標准進程運行(此參數由Windows計劃任務指定);
马云惹不起马云/r1:作為標准進程運行(此參數由生成的註冊表運行項值指定)。
马云惹不起马云/r2:作為服務運行(此參數由創建的Windows服務指定)。
攻擊者已經將不同的變體進行了傳播:有些包括用於維護持久性的代碼,另一些則被配置為在不感染系統的情況下運行;並且感染進程通常由諸如上述批處理腳本之類的其他組件執行。
惡意軟件通過生成BOT_ID開始其活動,這是用於識別受攻擊系統的唯一值。此值源自其他幾個基於主機的值:
從以下WMI查詢中獲得的UUID值:
從以下註冊表項獲取的計算機GUID:
從另一個WMI查詢中獲得的額外驅動器的列表,這反過來允許他們確定' PHYSICALDRIVE0 '的' SerialNumber ':
收集到的信息被連接在一個字節數組中,然後用MD5哈希,MD5被用作創建BOT_ID的種子。用於生成後者的算法只是對結果MD5哈希中每兩個連續字節求和,並將所得字節(模數256)作為最終BOT_ID的單個字節。下面的代碼片段描述了這種邏輯,它取自惡意軟件。
用於生成BOT_ID的代碼段
生成的BOT_ID還用於初始化DES密鑰和IV,然後用於加密與C2的通信。
惡意軟件使用HTTPPOST請求進行通信,其中數據參數將以編碼形式作為請求主體的一部分進行傳播。然後,整個請求結構將顯示如下:
一個有效的響應應該以以下方式形成:
響應使用base64進行解碼:生成的有效負載是一個字符串數組,其中使用的分隔符是標準的Windows新行序列-“\r\n”。每一行都用base64再次解碼,用DES解密,並用GZIP算法解壓縮。
每個命令都具有以下結構:
命令結構
00:執行——使用指定的參數執行任意程序。如果攻擊者將NoWait標誌設置為False,則惡意軟件會重定向進程輸出,讀取數據並將其轉發給C2;
01:下載——從本地系統讀取文件並將其上傳到服務器;
02:上傳——使用攻擊者指定的文件路徑將接收到的數據保存到本地系統。
命令數據字段旨在攜帶有關命令參數的信息,並且對於每種操作類型具有不同的結構,如下所述:
命令結果通常被組成一條消息,該消息還包括底層命令類型和命令ID的值,該值唯一地標識向惡意軟件發出的命令的示例。這三個值用GZIP壓縮,用DES加密,並用base64編碼。
生成的有效負載使用“|”字符與BOT_ID連接,再次使用base64編碼,然後使用上述POST請求格式將其上傳到遠程服務器。
安裝程序模式一些變體可以感染系統,在特定位置創建惡意軟件的副本,並保證其持久性。
惡意軟件位置是通過特定進程選擇的,它枚舉CommonApplicationData中的所有子目錄,並隨機選擇一個子目錄保存其副本。生成的文件名將以子目錄的名稱作為後綴,並附加另一個靜態值Launcher.exe,如下所示:
如果操作成功,它還會更改新的文件時間戳,並使其與所選子目錄的時間戳相同。
如果操作失敗,它會隨機選擇另一個目錄,並再次嘗試複製惡意軟件。
如果對所有子目錄的操作都失敗,它將嘗試使用硬編碼目錄名列表:
马云惹不起马云Google
马云惹不起马云Viber
马云惹不起马云AdGuard
马云惹不起马云WinZip
马云惹不起马云WinRAR
马云惹不起马云Adobe
马云惹不起马云CyberLink
马云惹不起马云Intel
如果所有嘗試都失敗了,它將嘗試在以下位置使用相同的進程:
马云惹不起马云ApplicationData
马云惹不起马云LocalApplicationData
马云惹不起马云Temp
持久性能力惡意軟件的持久性通常通過以下機制來保證:
马云惹不起马云服務安裝;
马云惹不起马云創建新的Windows註冊表項值;
马云惹不起马云創建新的計劃任務;
該服務通常由惡意軟件在執行Windows sc.exe實用程序時安裝。
註冊表值等於復制的惡意軟件文件名,不帶擴展名,並存儲在以下各項中:
計劃任務是使用硬編碼的XML模板創建的,該模板在運行時被修改,並使用相同的惡意軟件文件路徑在文件系統釋放,但擴展名不同,為.XML而不是.exe。
然後將生成的XML文件與Windows schtasks.exe實用程序一起使用來創建任務。
例如:
任務和服務描述會根據變體而變化。
JackalStealJackalSteal是另一種植入程序,通常部署在一些受感染的計算機上,用於在目標系統中查找感興趣的文件,並將其竊取至C2服務器。
此工具可用於監控目標系統中的可移動USB驅動器、遠程共享和所有邏輯驅動器。惡意軟件可以作為標準流程或服務來工作。它無法維護持久性,因此必須由另一個組件安裝。
JackalSteal通過解析參數開始執行。
選項說明
马云惹不起马云-n:配置文件的唯一標識符值;
马云惹不起马云-p:要檢查的目錄路徑;
马云惹不起马云-s:請求文件的最大大小;
马云惹不起马云-d:自上次寫入請求文件以來的天數;
马云惹不起马云-m:使用正則表達式在配置的目錄中查找以逗號分隔的字符串掩碼列表;
马云惹不起马云-w:配置Profile的連續目錄掃描之間的時間間隔(以秒為單位);
马云惹不起马云-e:從掃描活動中排除路徑;
马云惹不起马云/0:作為標准進程運行;
马云惹不起马云/1:作為服務運行;
這些選項允許攻擊者指定“概要文件”,該文件定義了攻擊者感興趣的文件。該配置文件由一個ID和一個模式列表組成。每個模式都包含一個具有以下屬性的選項列表:
马云惹不起马云Path:目標路徑;
马云惹不起马云Credentials:用於訪問遠程共享的憑據用戶和密碼;
马云惹不起马云Masks:包含通配符和掩碼字符的掩碼字符串,可用於使用正則表達式匹配任何一組文件;
马云惹不起马云MaxSize:文件的最大大小;
马云惹不起马云Days:自上次寫入文件以來的天數;
马云惹不起马云Interval:兩次連續路徑掃描之間的時間間隔
马云惹不起马云Exclude:掃描活動期間必須排除的路徑;
用於配置JackalSteal組件的命令如下:
唯一標識符“-n”通常與JackalControl木馬程序生成的BOT_ID相同。
在參數處理之後,惡意軟件將數據序列化為XML,使用由帶有“-n”選項傳遞的ID生成的密鑰用DES加密它們,並將生成的有效負載存儲在以下位置:“%ApplicationData%\SNMP\cache\%Filename]”,其中%Filename%是由攻擊者指定的唯一標識符的MD5生成的GUID。
惡意軟件通常使用“/0”或“/1”選項和“-n”選項執行,該選項用於加載獲得的配置文件ID。在第二種情況下,它從前面提到的位置加載配置文件,並啟動‘Watchers’。
Watcher是在具有相同名稱的類中定義的對象,該對像在不同的線程中運行,並根據指定的選項掃描位置。該模式可以表示:
马云惹不起马云本地文件系統中的簡單路徑;
马云惹不起马云遠程共享上的路徑;
马云惹不起马云常量字符串all;
马云惹不起马云常量字符串usb。
當模式等於“all”時,惡意軟件會枚舉所有邏輯驅動器,並為每個驅動器創建一個新的Watcher對象。當模式為“usb”時,它會偵聽與在系統上創建新的可移動驅動器的操作相對應的系統事件。當檢測到新的驅動器時,它會創建一個新的Watcher對象。
每次添加新的Watcher時,惡意軟件都會通知日誌該事件,並使用HTTP Post請求將信息發送到遠程C2。
該日誌是使用以下字符串作為模板創建的:
並上傳到包含以下信息的加密有效負載中:
為每個請求生成AES_Key和AES_IV,嵌入在代碼中的密鑰使用RSA算法進行加密。生成的有效負載也使用GZIP算法進行壓縮。
“Agent_id\\Log_path.log”和“Log”內容數據採用AES算法加密,並使用GZIP壓縮。
Watcher對象負責掃描活動,當Watcher啟動時,它會枚舉目錄及其子目錄中的所有文件。掃描儀還可以解析.lnk鏈接。當掃描程序檢測到與定義的屬性(掩碼、天數、最大大小)匹配的文件時,它會計算文件內容哈希,檢查結果值是否存在於存儲在本地緩存目錄中的哈希表中,如果不存在,則添加該值。當檢測到新文件時,惡意軟件會使用上述相同的邏輯將該文件和相關的文件路徑上傳到加密有效負載中。
在這種情況下,加密的有效負載包含以下信息:
“Agent_id\\Local_file_path”和“File”內容數據採用AES算法加密,並使用GZIP壓縮。
JackalWorm
這種蠕蟲是為了傳播和感染使用可移動USB驅動器的系統而開發的。該程序被設計為一種靈活的工具,可以用來感染任何惡意軟件的系統。
它的行為會隨著父進程而變化。
马云惹不起马云當惡意軟件在被感染的系統上工作,並且父進程是taskeng.exe或services.exe時:
马云惹不起马云監控可移動USB驅動器;
马云惹不起马云連接設備後,將隱藏最後修改的目錄,並將其替換為蠕蟲的副本;
用於監控可移動USB驅動器的代碼與JackalSteal中觀察到的代碼相同。它創建了一個ManagementEventWatcher對象,允許它訂閱與給定WQL查詢相對應的事件通知,並在攔截時發出回調。惡意軟件使用的查詢指示系統每五秒鐘檢查一次邏輯可移動磁盤創建事件:
當惡意軟件檢測到一個可移動的USB存儲設備時,它會自我複製到該設備。它將復製到的路徑是通過列出所有目錄並選擇最後修改的目錄來確定的。它將使用相同的目錄名在驅動器根目錄上創建自己的副本,並將目錄的屬性更改為“hid
Recommended Comments