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