Earth Kitsune通過水坑攻擊傳播新的WhiskerSpy后門
趨勢科技研究人員最近發現了一個新的后門,他們將其歸因于之前報道過的被稱為Earth Kitsune的攻擊者。自2019年以來,“Earth Kitsune”一直在向主要對朝鮮感興趣的個人傳播自主開發的后門變體。在我們過去調查的許多示例中,攻擊者通過使用了水坑攻擊策略,攻擊與朝鮮有關的網站,并將瀏覽器漏洞注入其中。在分析的最新活動中,Earth Kitsune使用了類似的策略,但沒有使用瀏覽器漏洞,而是使用了社會工程。
在2022年底,研究人員發現一個親朝組織的網站被入侵和修改,以傳播惡意軟件。當目標訪問者試圖在網站上觀看視頻時,攻擊者注入的惡意腳本會顯示一條消息提示,通知受害者視頻編解碼器錯誤,以誘使他們下載并安裝木馬編解碼器安裝程序。安裝程序經過修復,加載了一個以前看不見的后門,我們稱之為“WhiskerSpy”。此外,我們還發現攻擊者采用了一種有趣的持久性技術,濫用了Google Chrome的本地消息主機。

WhiskerSpy感染鏈
在這篇文章中,我們將揭示Earth Kitsune所使用的WhiskerSpy后門的感染鏈和技術細節。
在2022年底,我們注意到一個親朝網站在他們的視頻頁面中注入了惡意腳本。該腳本顯示了一個帶有虛假錯誤消息的彈出窗口,旨在誘使受害者安裝偽裝成高級視頻編解碼器AVC1的惡意包。

一個被攻破的親朝網站的社會工程示例
這些網頁被配置為只向目標IP地址列表中的訪問者發送惡意腳本(沒有這些IP地址的訪問者不會收到惡意負載)。這種配置使得攻擊難以被發現。幸運的是,我們設法在攻擊者的服務器上找到了一個文本文件,其中包含與目標IP地址匹配的正則表達式。其中包括:
位于中國沈陽的IP地址子網;
一個位于日本名古屋的特定IP地址;
位于巴西的IP地址子網;
沈陽和名古屋的IP地址很可能是他們的真正目標。然而,我們發現巴西的目標IP地址大多屬于一個商業VPN服務。我們認為,攻擊者使用此VPN服務來測試其水坑攻擊的部署。它還為我們提供了一個驗證水坑攻擊的機會,通過使用相同的VPN服務來成功接收惡意腳本。

原始頁面(左側)和帶有注入腳本的頁面(右側)之間的網頁內容比較
該網站加載帶有以下重定向代碼的惡意JavaScript(popup.js):

嵌入式JavaScript重定向到惡意安裝程序下載
修復安裝程序
安裝程序文件是一個MSI安裝程序,它封裝了另一個NSIS安裝程序。攻擊者濫用了合法的安裝程序(windows.10.codec.pack.v2.1.8.setup.exe - e82e1fb775a0181686ad0d345455451c87033cafde3bd84512b6e617ace3338e),并將其修復為包含惡意shellcode。該補丁包括增加的部分數量,從5個增加到6個(圖5中的紅色括號),并增加圖像大小,為惡意shellcode創建額外的空間(圖5中的綠色括號)。

原始(上)和修復(下)安裝程序,在修復版本中某些參數的大小會增加

在修復的安裝程序中新添加了.odata部分
修復后的安裝程序的入口點被更改為立即跳轉到shellcode。shellcode使用簡單密鑰(XOR 0x01)加密。

修復后的安裝程序的入口點跳轉到.odata部分的代碼中
解密后,shellcode運行幾個PowerShell命令來下載惡意軟件的其他階段。這些文件都是可執行文件,從一開始就有幾百個字節,使用單字節密鑰進行異或。

.odata部分中的Shellcode調用幾個PowerShell命令來下載其他加載器
然后,它恢復原始入口點(總共15個字節),以確保原始安裝程序按預期運行。

.odata部分中的Shellcode恢復安裝程序的原始入口點
下載的二進制文件:加載器
通過OneDrive持久化的路徑(Icon.jpg)
這包含路徑\microsoft\onedrive\vcruntime140.dll,這是另一個下載文件(bg.jpg)以vcruntime140.dll的名稱釋放的位置。
持久性和加載器濫用OneDrive側加載漏洞(Bg.jpg)
這是vcruntime140.dll (Microsoft C Runtime庫)的修復版本。在本例中,函數memset被修復。從函數(retn)返回的值被一個跳轉到覆蓋(在新添加的.onda部分中)所取代,其中注入的代碼從覆蓋中讀取字節,用一個單字節的密鑰對它們進行異或處理,并將嵌入的有效負載注入到werfautl.exe進程中。覆蓋層中的shellcode是主后門的加載器。

原始memset函數,注意地址0x18000C7D1處的指令返回(retn)

修復的memset函數,注意,地址0x18000C7D1的指令是跳轉(jmp),以覆蓋shellcode
該文件被放置在%LOCALAPPDATA%\microsoft\onedrive\目錄中,這是onedrive應用程序的默認用戶安裝位置。此前有報道稱,攻擊者利用OneDrive側加載漏洞,將虛假dll放置到該OneDrive目錄中,以實現在受攻擊計算機中的持久性。
持久性和加載程序使用惡意Google Chrome擴展(Favicon.jpg)
這是一個安裝包,包含installer.exe(一個Google Chrome擴展安裝程序)、NativeApp.exe(一個本地消息主機)和Chrome擴展文件(background.js、manifest.json和icon.png)。
NativeApp.exe是一個本地消息主機,使用標準輸入(stdin)和標準輸出(stdout)與Chrome擴展通信。注意擴展清單中的type = " stdio "。

擴展清單,請注意擴展ID (allowed_origins)路徑導致被釋放的可執行文件和type =標準輸入/輸出

在Google Chrome擴展選項卡中查看的惡意擴展
Background.js擴展腳本向onStartup消息添加一個監聽器。該偵聽器將“inject”命令發送到本機消息傳遞主機,有效地充當某種獨特的持久性方法,因為惡意有效負載在每次Chrome瀏覽器啟動時都會執行。

onStartup事件的處理程序(Chrome瀏覽器的啟動)
NativeApp使用JSON格式的消息與Chrome擴展交換數據,并實現三個命令:execute、load和inject。
消息的格式如下:xx xx xx xx {“cmd”:””,”data”:””},其中 xx xx xx xx是以字節為單位的消息長度。“cmd”項必須包含一個已實現的命令值(execute、load和inject),而“data”項可能包含其他參數,如路徑和要執行的程序。
以下是有效JSON消息的示例:

注意,每個消息的前面必須有一個4字節的小端序長度值。傳遞不可打印字符(0x00,如下圖所示)可以通過使用PowerShell及其Get-Content cmdlet和-raw參數實現,然后通過管道“|”將該內容重定向到NativeApp。如果cmd.bin文件包含如下圖所示的相同內容,NativeApp.exe將運行notepad.exe。

指示執行notepad.exe的消息,第一個DWORD 0x0000003f是以下JSON消息的長度
在當前實現中,inject命令沒有參數。相反,它連接到硬編碼的URL地址http://
主后門加載器(Help.jpg)
這是一個shellcode,加載另一個嵌入式可執行文件——我們命名為WhiskerSpy的主后門負載。
主有效載荷:WhiskerSpy
WhiskerSpy使用橢圓曲線密碼(ECC)在客戶端和服務器之間交換加密密鑰。以下是已實現的后門命令:
交互式shell;
下載文件;
上傳文件;
刪除文件;
列表文件;
截圖;
加載可執行文件并調用其導出;
向進程中注入shellcode;
設備ID被計算為位于系統管理生物系統(SMBIOS)的系統信息表中的16字節UUID的32位Fowler-Noll-Vo 哈希(FNV-1)。有關UUID值的更多詳細信息,請參閱SMBIOS規范第33頁。使用參數“RSMB”調用函數GetSystemFirmwareTable以檢索原始SMBIOS表,然后對其進行解析以定位16字節UUID,該UUID已計算其FNV-1哈希。
對于與命令和控制(C&C)服務器的通信,后門生成一個隨機的16字節AES密鑰。它根據該密鑰計算會話ID,作為32位Murmur3哈希。
如上所述,后門使用橢圓曲線密碼(ECC)。我們可以從“.data”部分中存儲的硬編碼值確定橢圓曲線域參數。在下圖中,你可以看到素數(p,黃色)、第一個系數a(紅色)、第二個系數b(綠色)、生成器(基點,藍色)和輔因子(h,橙色)。了解這些參數有助于我們確定“secp256r1”是所使用的曲線,因為我們可以看到列出的大多數常用橢圓曲線的所有重要常數,例如在tinyec項目中。

“secp256r1”曲線的硬編碼參數
上圖還顯示了一個值(棕色),它表示硬編碼服務器的公鑰。
然后進行一系列計算(橢圓曲線Diffie–Hellman或ECDH密鑰交換):
生成隨機32字節客戶端私鑰(clientPrivKey);
通過將客戶端私鑰乘以曲線生成器來計算客戶端公鑰(clientPubKey = clientPrivKey * curve.g);
通過將客戶端私鑰乘以服務器公鑰來計算sharedKey(sharedKey = clientPrivKey * serverPubKey);
這些計算的結果作為一個64字節二進制blob上傳到C&C服務器,其中前32個字節是客戶端公鑰的x坐標,因為常用的共享函數f(P)是取點P的x坐標。后32個字節來自一個隨機的16字節AES密鑰。
C&C通信首先注冊設備ID(函數號= 3;POST請求“l

注冊新計算機
隨后上傳帶有客戶端公鑰的x坐標和加密的AES密鑰的64字節文件(函數號= 1;POST請求:l

注冊一個新的會話密鑰并上傳
然后,WhiskerSpy定期向C&C服務器請求其應執行的任何任務(函數號= 2;POST請求“h

WhiskerSpy請求執行任務
接收的數據包(文件h

特殊類型的消息
WhiskerSpy實現標準函數。在分析代碼時,我們注意到一些用于報告任務狀態的狀態代碼,其中接收到的消息的第一個字(兩個字節)是命令ID。注意,在命令包的情況下,所有命令的魔法值都相同,它位于命令ID之前,不顯示在表2中。在活動數據包的情況下,magic值的第一個單詞(2字節)用作命令ID,因此可以在表中找到0x70D值。

WhiskerSpy的后門命令
類似的后門
老版本的WhiskerSpy是32位可執行文件,只實現前面提到的函數的子集(1-5,8,0x70D是相同的,6 =退出進程;7 = 將文件釋放到temp并執行),其余的函數都不存在。
通信不是通過HTTP協議,而是通過FTP協議。這意味著FTP名稱和密碼必須硬編碼為二進制文件才能進行通信。此方法將當前的受害者數量泄漏為l<machineID><sessionID>和h<machineID<文件,這意味著,任何知道登錄憑據的人都可以看到這些文件。FTP版本的后門還會檢查調試器是否存在。如果存在,狀態代碼“HELO>”將發送到C&C服務器。
通過跟蹤分析,研究人員將這次攻擊歸咎于Earth Kitsune。在與朝鮮相關的網站上注入惡意腳本,顯示出與該組織以前的活動相似的攻擊手法和受害特征。此外,在這次攻擊中使用的WhiskerSpy的傳播服務器和C&C服務器與我們之前對Earth Kitsune的研究有兩個基礎設施重疊。第一個重疊是WhiskerSpy的C&C域londoncity[.]hopto[.]]org和Earth Kitsune的域名rs[.]myftp[.]45[.]76[.]62[.]198。第二個重疊是WhiskerSpy的C&C域londoncity[.]hopto[.]org和updategoogle[.]servehttp[.]com,加上傳播服務器microsoftware[.]sytes[.]net的域都解析為172[.]93[.]201[.]172。該IP地址也從Earth Kitsune的agfSpy后門使用的域selectorioi[.]ddns[.]net映射而來。

基礎設施與Earth Kitsune重疊
總結
從技術角度來看,這種威脅非常有趣。它修復合法安裝程序以隱藏其活動,使用鮮為人知的哈希算法來計算計算機ID和會話ID,并使用ECC來保護加密密鑰。此外,所提出的持久性方法也是相當獨特和罕見的。這表明Earth Kitsune不斷在發展他們攻擊能力。
參考及來源:
https://www.trendmicro.com/en_us/research/23/b/earth-kitsune-delivers-new-whiskerspy-backdoor.html