趨勢科技研究人員最近發現了一個新的後門,他們將其歸因於之前報導過的被稱為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使用簡單密鑰(XOR0x01)加密。
修復後的安裝程序的入口點跳轉到.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的消息,第一個DWORD0x0000003f是以下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哈希。
對於與命令和控制(CC)服務器的通信,後門生成一個隨機的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上傳到CC服務器,其中前32個字節是客戶端公鑰的x坐標,因為常用的共享函數f(P)是取點P的x坐標。後32個字節來自一個隨機的16字節AES密鑰。
CC通信首先註冊設備ID(函數號=3;POST請求“l
註冊新計算機
隨後上傳帶有客戶端公鑰的x坐標和加密的AES密鑰的64字節文件(函數號=1;POST請求:l
註冊一個新的會話密鑰並上傳
然後,WhiskerSpy定期向CC服務器請求其應執行的任何任務(函數號=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”將發送到CC服務器。
通過跟踪分析,研究人員將這次攻擊歸咎於Earth Kitsune。在與朝鮮相關的網站上註入惡意腳本,顯示出與該組織以前的活動相似的攻擊手法和受害特徵。此外,在這次攻擊中使用的WhiskerSpy的傳播服務器和CC服務器與我們之前對Earth Kitsune的研究有兩個基礎設施重疊。第一個重疊是WhiskerSpy的CC域londoncity[.]hopto[.]]org和Earth Kitsune的域名rs[.]myftp[.]45[.]76[.]62[.]198。第二個重疊是WhiskerSpy的CC域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不斷在發展他們攻擊能力。