Go 語言憑借其高效的并發(fā)處理能力和強大的標準庫支持等特點,在開發(fā)效率和性能上具有一定的優(yōu)勢,備受軟件開發(fā)者青睞。然而,這種優(yōu)勢也吸引了部分初學(xué)者以及勒索組織的目光,他們利用 Go 語言編寫勒索病毒并進行傳播,催生了各種基于 Go 語言的勒索實驗樣本和勒索組織樣本。
近期,火絨工程師在日常關(guān)注安全動態(tài)時發(fā)現(xiàn)一個基于 Go 語言的勒索樣本。分析發(fā)現(xiàn),該樣本會利用 AES 進行數(shù)據(jù)加密,并將加密秘鑰發(fā)送至 youtube.com ,導(dǎo)致被加密文件完全無法恢復(fù)。推測該樣本屬于基于 Go 語言勒索樣本中的實驗樣本。隨后對基于 Go 語言的勒索樣本進行調(diào)查分析發(fā)現(xiàn),實驗樣本在該類勒索樣本中較為常見,而勒索組織樣本除了勒索步驟比較完善,使用的技術(shù)手段與實驗樣本仍有一定相似。火絨安全產(chǎn)品可對上述勒索木馬進行攔截查殺,請廣大用戶及時更新病毒庫以提高防御能力。
查殺圖
勒索病毒通常是黑客攻擊鏈的最后一個環(huán)節(jié),屬于直接可以獲利的病毒。在前期攻擊中,黑客已將目標環(huán)境改造成可以執(zhí)行任意程序而不被檢測的狀態(tài)。因此, 基于 Go 語言的勒索病毒無需采用免殺等特殊技術(shù)手段,便能直接進行加密和上傳操作。本文將主要對勒索實驗樣本以及勒索組織樣本分別進行簡要分析?;?Go 語言的勒索樣本進行勒索的步驟概括流程圖如下:
基于 Go 語言的勒索樣本進行勒索的步驟概括
樣本分析
基于 Go 語言的勒索樣本經(jīng)常利用到的庫函數(shù)按照使用先后順序排列,有以下幾種:
crypto/rand.Read:獲取隨機數(shù)
path/filepath.Walk:遍歷文件
crypto/aes.NewCipher:初始化 AES 加密器
os.WriteFile:寫勒索信或者將加密數(shù)據(jù)寫入原文件
encoding/json.Marshal:轉(zhuǎn)化為 JSON 字符串
net/http.Get/Post:接收或發(fā)送數(shù)據(jù)
os/exec.Run:打開勒索信
勒索實驗樣本
一些初學(xué)者或第一次開發(fā)勒索病毒的作者可能會制作出實驗樣本,這類樣本的特點為勒索步驟不完整,例如缺少勒索信、勒索信無意義,或在對稱加密過程中未能上傳必要的數(shù)據(jù)等,最終導(dǎo)致受害者的數(shù)據(jù)無法被恢復(fù),除非能夠在內(nèi)存中及時捕獲密鑰或在用戶界面中獲取相應(yīng)密鑰。而對于采用 RSA 非對稱加密的樣本,只有在私鑰被保存至本地的情況下,才有可能實現(xiàn)數(shù)據(jù)恢復(fù)。
此次發(fā)現(xiàn)的勒索樣本(下稱 A 樣本)即為實驗樣本,由于該樣本最終將秘鑰和用戶標識符等數(shù)據(jù)發(fā)送至 youtube.com ,使得被加密文件無法恢復(fù)。此外,本文還將對同類型樣本 B 和 C 進行簡要闡述,展示實驗樣本的大致步驟和勒索信的無意義。
A 樣本
A 樣本調(diào)用 crypto/rand.Read 函數(shù)生成 1 字節(jié)的隨機數(shù),并通過計算從 a-z、A-Z 和 0-9 的字符集中選取一個字符,循環(huán)此操作九次,生成一個長度為 9 的 UserId 字符串,用于識別用戶。
獲取隨機 UserId 字符串
隨后,使用一個 32 字節(jié)的隨機密鑰和 AES 加密算法,對 C:\Users 文件夾下的所有文件進行加密。加密完成后,創(chuàng)建以 [源文件名].mtxv21 命名的加密文件,并刪除源文件。
加密 Users 目錄
還原后的加密算法如下。
AES 加密算法
接著,將 UserId 、加密目錄以及 32 位加密秘鑰通過 JSON 數(shù)據(jù)發(fā)送至 youtube.com 。這一操作使得勒索病毒的作者無法獲取加密密鑰,因此他們無法解密被加密的文件。即使受害者支付贖金也無法成功恢復(fù)數(shù)據(jù)。
發(fā)送 JSON 數(shù)據(jù)至 youtube.com
該 JSON 數(shù)據(jù)的內(nèi)容格式與 Discord Webhook 請求體完全一致。如果將目標 URL 替換為 Discord Webhook 鏈接,那么信息將直接被鏈接指向的頻道接收。在后續(xù)處理中,可以通過 ID 分辨用戶,并利用加密目錄和加密秘鑰對加密文件進行恢復(fù)。
JSON 數(shù)據(jù)
其中的部分 JSON 數(shù)據(jù)鍵說明如下:
avatar_url:Webhook 消息的頭像 URL
embeds:嵌入對象
fields:額外數(shù)據(jù)數(shù)組
在測試過程中存在桌面變黑的現(xiàn)象。分析發(fā)現(xiàn),在 Win10 系統(tǒng)中,桌面背景圖通常保存在
C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Themes\TranscodedWallpaper 路徑中,該路徑文件被加密則會導(dǎo)致桌面變黑的現(xiàn)象發(fā)生。
最后,該樣本會打開勒索信 README-NOW.txt ,其中顯示的 Your ID 即是 UserId。
勒索信
B 樣本
B 樣本首先獲取隨機 32 字符秘鑰和 16 字符初始化向量。隨后利用 AES 算法的 CFB 加密模式對文件進行加密,并且在該過程中并未保存秘鑰。加密完成后,將當前文件移動至臨時目錄中,同時打開名為 readme.txt 的勒索信,但該勒索信中的內(nèi)容并沒有意義。
獲取隨機秘鑰和初始化向量
AES 算法 CFB 加密模式加密
移動至臨時目錄
readme.txt
C 樣本
C 樣本首先獲取 Desktop、Documents、Pictures 目錄路徑。隨后獲取隨機秘鑰,同時利用 RC4 算法將獲取的目錄下的文件進行加密。在加密過程中,將生成的秘鑰保存至 C:\Users\Administrator 目錄下。加密完成后,將勒索信創(chuàng)建在用戶桌面上。
獲取目錄路徑
RC4 加密
秘鑰和勒索信
勒索組織樣本
與實驗樣本不同,勒索軟件組織樣本的勒索步驟完整,能夠?qū)崿F(xiàn)完整的勒索以及恢復(fù)的操作。除此之外,此類樣本還具有獲取系統(tǒng)信息、上傳文件以及持久化等操作,但其主體邏輯還是對文件進行加密。
LAPSUS$ 組織樣本
LAPSUS$ 組織樣本首先通過向 hexalockbeta.000webhostapp.com/index.php 發(fā)送 GET 請求以獲取用戶信息。獲取的信息如下:
computername:利用 os.Hostname 獲取電腦名。
hwid:利用 wmic csproduct get UUID 獲取計算機的唯一標識符。
ip:默認 192.168.1.1
method:默認 new
password:30 字符隨機秘鑰
發(fā)送 GET 請求
隨后進行數(shù)據(jù)上傳,并通過 Discord Webhook 將文件壓縮包發(fā)送至指定 URL https://discord.com/api/webhooks/1258768913898930306/rctIsQgwuuUEsHdFMdgzuCDXzgtpFv_yKz1aGVa6xKXzqJpTLz5Gv8DxuaSOK_z_Z-Eb 中。壓縮包內(nèi)包含 Desktop、Documents、Downloads、Pictures、Music、Video 等目錄下的文件。
壓縮文件夾
接著生成隨機秘鑰和鹽值,通過 pbkdf2 算法生成 32 個字符秘鑰后,利用 AES-GCM 模式對 C:\Users 目錄進行加密。最后打開勒索信。
加密
勒索信
GhostLocker 組織樣本
GhostLocker 組織樣本首先會將自身復(fù)制到開機自啟目錄中。
復(fù)制文件
接著,獲取隨機 32 字節(jié)秘鑰,并通過 POST 請求將 JSON 數(shù)據(jù)發(fā)送至 http://94.103.91.246/addInfectioncrypto/aes 。JSON 數(shù)據(jù)中的有效字段為 id 和 key,其中,id 用于識別被勒索的受害者,而 key 用于后續(xù)文件的解密。
發(fā)送 JSON 數(shù)據(jù)
隨后,通過 AES-GCM 模式以及隨機 32 字節(jié)秘鑰對 C:\ 目錄進行加密,在加密過程中會避開 Windows 文件夾。最后打開勒索信。
AES-GCM 模式加密
勒索信
同時我們發(fā)現(xiàn),近年來基于 Go語言的勒索樣本整體趨于工具化。其主體邏輯與加密器相似,主要通過基礎(chǔ)函數(shù)來實現(xiàn)文件的遍歷、加密、上傳以及展示勒索信等操作。后續(xù),我們將會持續(xù)關(guān)注基于 Go 語言勒索樣本的發(fā)展動態(tài),以應(yīng)對該類勒索病毒的各種變化,提高火絨安全產(chǎn)品的查殺率以及防護能力。