Unit 42 最近發現了一個針對葡語用戶的惡意軟件活動,旨在将加密貨币從合法用戶的錢包中轉移到由攻擊者控制的錢包中,該活動使用了一種被稱爲 CryptoClippy(加密貨币剪輯器)的惡意軟件,它可以監控受害者的剪貼闆,尋找加密貨币錢包地址被複制的蹤迹,以此來發起攻擊并竊取加密貨币。
攻擊時,CryptoClippy 會将實際錢包地址替換爲攻擊者自己的地址。爲了将惡意軟件植入到用戶的計算機,該活動中的攻擊者使用谷歌廣告和流量分發系統(TDS)将受害者重定向到假冒 WhatsApp Web 應用程序的惡意域名。他們借此來确保受害者是真正的用戶,而且他們是葡語使用者。對于被發送到惡意域的用戶,攻擊者試圖誘騙他們下載惡意文件,包括 .zip 或 .exe 文件,從而獲得最終的有效負載。
什麽是加密貨币剪輯器?
CryptoClippy 旨在将加密貨币資金從合法用戶的錢包轉移到由攻擊者控制的錢包。當計算機 CryptoClippy 時,惡意軟件會不斷檢查受害者的剪貼闆,看看他們是否複制了加密貨币錢包地址,其攻擊邏輯是,如果一個人将錢包地址複制到剪貼闆,這表明他們可能正在将加密貨币從一個錢包轉移到另一個錢包。
CryptoClippy 使用正則表達式來識别地址屬于哪種類型的加密貨币。然後,它将剪貼闆條目替換爲攻擊者的錢包地址。由于錢包地址通常很長,有時超過 40 個字符,粗心的用戶是不會注意到地址的變化。
CryptoClippy 利用的是 SEO 攻擊,因此當一個人搜索 "WhatsApp Web" 時,搜索結果的前幾天就會顯示一個虛假結果。一旦進入該網頁,受害者就會被提示下載一個 .zip 文件,該文件包含一個由惡意腳本組成的 .lnk 文件。這些腳本引發了一系列安裝 CryptoClippy 的事件。各種 CryptoClippy 變體具有多種額外功能,可以幫助攻擊者完成他們的加密竊取活動。這包括能夠通過執行 RC4 加密的 PowerShell 腳本來建立遠程桌面協議(RDP)後門。
此腳本包含 Windows Management Instrumentation(WMI)、終端服務注冊表操作、icacls、net 命令和日志清除的元素。這些漏洞使攻擊者能夠在内存有效負載之外進行訪問。
此外,該變體還具有針對以太坊和比特币加密貨币錢包的功能。鑒于數字貨币在拉丁美洲越來越受歡迎,這并不奇怪。
撰寫本文時,攻擊者控制的比特币地址顯示收到 0.039954 比特币,大緻相當于 982.83 美元,以太坊(ETH)地址也顯示了收到資金,其中 0.110915556631181819 ETH(約等于 186.32 美元)是從三個不同的 ETH 地址發送的。
此活動中的攻擊者采用了多階段的方法,試圖繞過基于簽名和啓發式的安全防護。這種方法包括使用模糊化的 PowerShell 腳本和編碼的有效負載來逃避檢測,目前似乎隻有少數安全程序可以在 VirusTotal 中檢測到這種惡意軟件。
攻擊流程
攻擊會從傳播一個 .zip 文件開始,該文件包含一個模糊化的 PowerShell 命令行腳本組成的 .lnk 文件。受害者雙擊 .lnk 文件後,就會執行 PowerShell 腳本,該腳本将下載第二階段和幾個模糊 / 加密的有效負載。當執行第二階段 PowerShell 腳本時,它會對 CryptoClippy 加載程序進行解混淆 / 解密并執行它。然後加載程序會将其竊取程序組件注入 svchost.exe 中。
CryptoClippy 将在剪貼闆 API 中設置基于用戶模式事件的挂鈎和回調函數,在将受害者的以太坊 / 比特币加密錢包複制到剪貼闆時,将其替換爲攻擊者的加密錢包。它還包含與 C2 服務器通信的功能。
CryptoClippy 攻擊流程如下所示:
通過 LNK 文件攻擊
受害者最初下載的 .zip 文件中的 .lnk 文件包含一個截取的命令,如下圖所示。雙擊該文件将執行一個模糊命令,該命令位于快捷方式的目标字段中,負責檢查攻擊者控制的域。
LNK 文件的目标字段包含要運行的命令
.lnk 文件使用了幾種不同的字符填充方法進行混淆,其中包括以下字符集:
^ !! :~
下圖顯示了如何在 .lnk 文件中使用這種方法。
LNK 字符混淆
反混淆後,LNK 得到以下 PowerShell 命令,該命令将通過 HTTP 協議将字符串 uiPX 上傳到攻擊者控制的域 tunneldrive [ . ] com。
PowerShell 命令将字符串上載到攻擊者域
需要注意的是,在目前觀察到的示例中,攻擊流程可以追溯到擴展名爲 .lnk 的文件。這些文件通常包含在 .zip 中。然而在分析中,研究人員觀察到另一種變化,其中初始有效負載是一個 .exe 文件,該文件出自前面提到的域 mydigitalreversion [ . ] com。
當 WhatsApp Web 的 .exe 文件一旦執行,它就會聯系前面提到的 tunneldrive [ . ] com 域。然後,它将釋放并執行一個 .bat 文件來自我删除。
這個 .bat 文件 ( 如下圖所示 ) 使用了一種模糊處理來構建其有效負載。
BAT 文件在第一階段被釋放
第一階段
第一個 PowerShell 腳本加載程序 Ricoly.ps1 由 Ricoly.bat 批處理文件啓動并執行。Ricoly.ps1 腳本的目的是解密同樣位于 C:Users\AppDataRoamingRicoly 中釋放的第二階段模糊 / 加密腳本 ps。
Ricoly.ps1 腳本使用的 XOR 密鑰大部分是靜态設置的硬編碼,而 XOR 密鑰的一部分是從計算機的處理器 ID 動态派生的。這将鎖定有效負載,如下圖所示。
第二階段
研究人員使用以下 CyberChef XOR 秘鑰來解密第二階段的有效負載:
CyberChef 用于解碼第二階段 PowerShell 腳本文件 ps 的内容
在第一階段下載時,會将名爲 sc 的加密 EXE 文件寫入文件系統。這個 EXE 文件将成爲第二階段 ps 腳本的目标。
第二階段 PowerShell 腳本 ps 的功能是充當反射 PE 加載程序。它使用 .NET 方法和 D/invoke 來處理 .NET 委托,以逃避檢測和動态解析。
ps 腳本将确定操作系統是 32 位還是 64 位。它還将确定 kernel32.dll 作爲反射加載程序所需的 API 功能,通過使用 GetDelegateForFunctionPointer 解析所需的 API(如 VirtualAlloc 和 CreateThread)來實現這一點。
然後,ps 腳本将對有效負載進行 XOR 解密,并調用 EXE 文件 sc。
使用 D/invoke 方法和 XOR 操作的第二階段 PowerShell 腳本
反射加載到内存中的 EXE 文件 sc 充當主加載程序,使用系統調用将代碼注入另一個新創建的進程。新創建的 svchost.exe 進程包含 CryptoClippy。
文件夾名稱和互斥字符串生成器
竊取程序的前幾個函數将首先映射出文件系統,以創建要使用的文件夾。這是通過使用 API GetWindowsDirectoryA、GetVolumeInformationA 和 SHGetFolderPathA 來實現的。
竊取程序包含一個函數,它将創建字母數字字符串。此字符串生成器用于主程序中的多個位置。它首先用于在 AppData 路徑下創建一個唯一的文件夾名稱。爲此,使用一個常量值作爲字符串生成器的參數。
在本示例中,常量是 0x79FE6D,它将在字符串生成器函數中使用,并映射到格式字符串 %08x-%08x。
常量引用和函數字母數字生成器的 xref
字符串生成函數将使用提供給函數的常數值和從受害者系統查詢的卷序列号。它将創建以下字符串作爲示例:079fe6d-de786dd1。
常量值和卷序列号連接成格式字符串
該算法将按每個字符拆分,以此來打亂字符串 079fe6d-de786dd1。第一個操作将是由字符串的第一個字符執行的對 FFFFFFFF 值的異或。
然後,所得到的運算将被右移 1,并被常數 0x82F63B78 異或。結果異或操作将遵循相同的操作集,在 16 個字符示例字符串 079fe6d-de786dd1 中,每個字符總共執行 8 次。
算法完成後,返回要添加到 AppData 目錄的文件夾名稱。本例中的文件夾名稱爲 55abf82d,完整路徑爲 C:UsersxxxAppDataRoaming55abf82d。這将根據作爲輸入提供的常量和卷序列号而變化,以創建唯一的字母加數字字符串。
使用的算法的結果,即要創建的文件夾名稱
互斥鎖
攻擊者的互斥鎖的創建也使用字符串生成器函數,該函數作爲參數提供了一個不同的常量值。在本例中,值爲 0x24F2D5。
用于創建帶有卷序列号的互斥鎖的常量值
用戶模式事件挂鈎設置
爲了便于竊取者剪切剪貼闆的加密錢包地址,并将其替換爲二進制文件中包含的硬編碼錢包,它将首先調用 API SetWinEventHook 來設置事件挂鈎,以便在觸發特定事件時調用負責與剪貼闆數據交互的函數。
EVENT_OBJECT_FOCUS EVENT_OBJECT_VALUECHANGE EVENT_SYSTEM_FOREGROUND
事件挂鈎設置将具有一個從所有進程以及所有現有線程接收事件的進程範圍,然後跳過連接負責創建挂鈎的所屬進程。在設置事件挂鈎之後,創建一個 Windows 事件對象。它通過調用用于同步的 Windows API CreateEventA 來實現這一點,當特定事件發生并完成時,它将向線程發出信号。
windows 事件鈎子和注冊類的反編譯視圖
創建 Windows 對象事件之後,竊取程序将使用 API RegisterClassExA。此 API 提供了一個指向 WNDCLASSEX 結構的指針,該結構包含 wcbClass 和各種結構字段。
在此之後,調用 CreateWindowExA,它将創建一個具有前面 API 所指向的結構的窗口。在這個結構中,我們分析的重要字段是 lpfnWndProc 字段,它指向惡意軟件開發者的剪貼闆函數。
後門
在 CryptoClippy 執行期間,此威脅将解密并寫入文件 Tozzia.bat 和 Tozzia.ps1 到文件系統,這些文件系統嵌入到文件系統中。執行批處理文件 Tozzia.bat,然後執行 Tozzia.ps1。
Tozzia.bat 文件内容
下圖顯示了 Tozzia.ps1 被寫入文件系統并執行,從而進行持久性攻擊。
Tozzia.ps1 内容
下圖顯示了 Tozzia.ps1 通過創建計劃任務來獲得持久性。
執行 Tozzia.bat 的計劃任務
在 Tozzia 腳本解密後,另外兩個腳本 Giddia 和 Knowledgeprojects 也被解密,但沒有被執行或寫入文件系統。從内存中提取 Giddia 和 Knowledgeprojects 這兩個腳本,可以看到幾百行額外的腳本代碼。
Giddia 腳本包含執行與終端服務相關的注冊表屬性值的功能,目的是削弱它們。它還包含網絡命令和本地帳戶相關操作的功能。
PowerShell 腳本名 Giddia
Giddia 功能
名爲 Knowledgeprojects 的 PowerShell 腳本
Knowledgeprojects 腳本包含使用 PowerShell 清除日志的功能。
通過惡意廣告(Malvertising)傳播
研究人員觀察到這種利用谷歌廣告和 TDS 的惡意軟件活動。當用戶搜索 "WhatsApp 網絡 " 時,攻擊者使用了出現在搜索結果中的谷歌搜索廣告。這使他們能夠誘騙受害者打開并下載他們的惡意壓縮 .zip 文件。在 2022 年初收到這一攻擊的警報後,谷歌實施了額外的保護措施,并表示,其系統在檢測和防止再次攻擊方面有所改進。
此外,攻擊者使用 TDS 過濾惡意登錄頁面上的真正用戶和機器人。TDS 過濾器通過使用各種标準來确定客戶端設備是否是真實用戶以及葡語使用者,從而排除機器人和互聯網爬蟲。
首先,TDS 檢查連接設備是否來自虛拟專用網絡(VPN)IP 地址。使用 VPN 會使攻擊者難以确定受害者設備的位置和特征,也會使其更難傳播惡意内容。
接下來,TDS 進行用戶代理檢查。用戶代理是網絡浏覽器發送到網站以識别其自身及其功能的文本字符串。通過檢查客戶端設備的用戶代理,TDS 通過檢查接受語言 ( Accept-Language ) 标頭來确定首選浏覽器語言是否爲葡語。TDS 還可以檢查其他信息,如設備類型、操作系統、浏覽器版本和地理位置。
最後,TDS 遵循超文本傳輸協議(HTTP)GET 标頭标準。HTTP GET 标頭是由 web 浏覽器發送到服務器以檢索資源的請求消息。标頭可以包含各種信息,例如請求的 URL、用戶代理、Accept-Language 标頭和 referer 标頭。檢查 HTTP GET 标頭中的條件是 TDS 确定浏覽器的首選語言是否爲葡語的另一種方法。
如果 TDS 确定連接不符合上述标準,受害者将被重定向到另一個登錄頁(如下圖所示),并被提示點擊 " 繼續到 WhatsApp Web"。這将重定向到合法的 WhatsApp Web 域,而不會有任何進一步的惡意活動,有效地逃避了受害者和安全軟件的檢測。
惡意域名的内容
但是,如果 TDS 确定該連接滿足上述條件,受害者将被重定向到惡意登錄頁面,并提示他們下載惡意的 .zip 文件
受害者的浏覽曆史
這個網站僞裝成 WhatsApp 的官方網站,提供 WhatsApp 桌面。從 mydigitalrevival [ . ] com 下載此文件就會下載所謂的 WhatsApp.zip。
mydigitalrevival [ . ] com 網站
研究人員發現的屬于本次活動的其他域名還有 preflightdesign [ . ] com 和 pickconferences [ . ] com,它們的葡語版本也有同樣的内容。
當受害者成功加載惡意網頁并下載所提供的 .zip 文件時,其中包含一個 .lnk 文件,如下圖所示。
初始 ZIP 文件中包含 LNK 文件
在執行 .lnk 文件後,研究人員觀察到下載到 C:Users\AppDataRoamingRicoly 中的以下文件:
Ricoly.bat;
Ricoly.ps1;
兩個混淆的加密文件(ps,sc);
一個混淆的加密輔助配置文件(pf);
第一個 PowerShell 腳本加載程序 Ricoly.ps1 由 Ricoly.bat 批處理文件啓動并執行。Ricoly.ps1 腳本的目的是解密第二階段的模糊化 / 加密的腳本 ps。
第二階段 PowerShell 腳本 ps 的功能是充當反射 PE 載入程序。ps 文件将以寫入文件系統的名爲 sc 的加密 EXE 文件爲目标。sc 文件是反射加載的,最終用作 CryptoClippy 的載入程序。
主要可執行文件
在執行 .lnk 文件和兩個後續的 PowerShell 腳本之後,CryptoClippy 操作由一個可執行載入程序和主要可執行文件組成。CryptoClippy 的載入程序是一個 64 位的 EXE 文件,其中主竊取程序 EXE 文件嵌入在 .data 部分中。載入程序使用系統調用,在執行時似乎與 SysWhispers2 實現重疊。
SysWhispers2 是一個更隐蔽的代碼執行實現,用于繞過對用戶模式 API 的檢查。這種繞過是可能的,因爲用戶模式 API 通常由應用程序使用,包括 AV/EDR 産品通過用戶模式挂鈎進行内省。
CryptoClippy 的主要可執行文件是用 C 編寫的,它是用傳輸層安全性(TLS)庫 Mbed-TLS 靜态編譯的。可執行文件的主要功能包括它自己的名稱生成算法即文件路徑、互斥對象和事件對象。主可執行文件還廣泛使用了一個名爲 pf 的本地輔助文件,該文件包含一個加密的證書。CryptoClippy 使用它自己的算法從輔助文件中消除字符查找表的混淆,從而從查找表中指向值的指針構建明文證書。
該威脅還使用兩個不同的 RC4 密鑰進行各種字符串解密。字符串解密例程将使用内存中内置的結構,用于結構中的索引位置、字符串偏移量和字符串大小。這些字符串與對象名稱、域、加密錢包和持久性腳本有關。
RC4 Key: 1b43233d5a054808061c190336320e46 RC4 Key: 4646070B47445451604F291809444703
竊取加密貨币
CryptoClippy 的主要目标是識别正在複制到剪貼闆中的加密錢包字符串。CryptoClippy 設置用戶模式事件挂鈎,并使用回調函數執行将複制到 Windows 剪貼闆中的以太坊或基于比特币的錢包替換爲攻擊者擁有的硬編碼錢包值。下圖顯示了捕獲剪貼闆輸入的窗口。根據載入程序的執行流程,這個特定的應用程序通常是不可見的。
竊取剪貼闆裏的内容
CryptoClippy 剪貼闆函數的反編譯視圖(如下圖所示)顯示,攻擊者使用的錢包地址将被 RC4 解密,以便稍後在任何加密錢包的替換中使用。
CryptoClippy 将對被填入剪貼闆的數據執行字符串檢查。它将檢查與以太坊或比特币相關錢包相關的常見前導字符。複制到剪貼闆中的字符串将循環确定字符數。在下圖的第 27 行,從總字符數中減去 25 并進行比較,看看它是否小于或等于 9。
CryptoClippy 剪貼闆函數的反編譯視圖
此字符串檢查操作适用于以 1 開頭的比特币地址。否則,代碼路徑将被跳過,下圖所示的調試視圖顯示了 API GetClipboardData 和 API 的返回值,其中包含複制的以太坊錢包地址。
以太坊錢包地址 0xdB055877e6c13b6A6B25aBcAA29B393777dD0a73
一旦獲得剪貼闆數據,将執行上面反編譯視圖中指出的字符串檢查,查找使用的特定加密錢包類字符。下圖就是一個以太坊錢包,随後檢查起始字符值 0x。
使用的以太坊錢包 0xB49eae711FBa241f657dA46A998833A6591848b
負責操作剪貼闆的函數将使用 API SetClipboardData 将用戶以太坊錢包地址替換爲 0xB49aeae711FBa241f657dA46A998833A6591848b。
上圖是錢包地址的一小部分。下表包含用戶提供的值,這些值被之後就會被攻擊者發現并被替換。
複制錢包和替換錢包的示例
爲了保持對受害者計算機的訪問,CryptoClippy 将 Ricoly.link 添加到 Startup 文件夾(AppDataRoamingMicrosoftWindowsStart MenuProgramsStartupRicoly.lnk)來獲得持久性。Ricoly.nk 将在用戶登錄時啓動,它将執行 Ricoly.bat 腳本,然後執行 Ricoly.ps1。
維護訪問權限的其他工作包含在 rc4 加密的 PowerShell 腳本 Tozzia.ps1 中,注入 svchost.exe 的 CryptoClippy 有效負載提取 Tozzia.bat 和 Tozzia.ps1 文件。Tozzia.ps1 腳本包含與終端服務的注冊表修改、本地帳戶創建、網絡命令和事件日志清除相關的各種功能。
總結
過去幾年,竊取加密貨币的攻擊越來越多。大概的攻擊手段有:
· 使用 TDS;
· 針對特定目标範圍;
· 将有效負載與環境相匹配;
· 采用更複雜和更隐蔽的技術來隐藏加載程序和剪輯功能;
· 創建操作所需的自定義算法;
我們經常看到傳播這種威脅的兩種特殊方法,一是使用僵屍網絡(如 Laplas Clipper 和 Smokeloader),二是可能存在底層惡意軟件即服務(MaaS)功能(如 Eternity Clipper)。