在過去的幾年中,勒索軟件的攻擊態勢已逐漸發生變化。從2017年的大規模爆發(如WannaCry,NotPetya和Bad Rabbit)起,許多勒索軟件攻擊者已轉向隱祕但利潤豐厚的“高回報攻擊”策略。勒索軟件導致某些全球性公司的服務中斷的新聞現在變得司空見慣。

在某些情況下,這種全球趨勢只是攻擊持續生命週期的反映:舊的勒索軟件家族關閉而新的勒索軟件家族出現並追求新的目標。但是,有時一個勒索軟件家族已從大規模運營演變爲針對性很強的攻擊,而這一切都發生在兩年之內。在這篇文章中,我們想談談一個名爲JSWorm的勒索軟件家庭的演變。

JSWorm勒索軟件於2019年被發現,從那以後,出現了諸如Nemty、nefilem、Offwhite等不同的變種。

每個“重命名”變種的一部分都發布了多個版本,這些變種更改了代碼、重命名的文件擴展名、加密方案和加密密鑰等。

在下圖中,我們介紹了該木馬使用的一些名稱,以及相應的變種在野外(ITW)主動傳播的日期(不是它第一次遇到的日期)。我們應該注意,該列表並不全面,但代表了JSWorm演進的主要節點。

除了名稱更改外,該勒索軟件的開發人員還一直在重新編寫代碼,並嘗試使用不同的傳播方法。

在2020年的某個時候,開發人員甚至將編程語言從C ++更改爲Golang,從頭開始完全重寫代碼。但是,加密方案、贖金通知和使用相同的數據泄漏網站地址的相似性使我們相信這是同一活動。

該惡意軟件的原始版本以及隨後的某些“更名”,例如Nemty,是由地下論壇上的用戶使用jsworm用戶名發佈的。

早期JSWorm變種的論壇廣告

傳播方式

從2019年創建到2020年上半年,JSWorm作爲公共RaaS提供,並通過以下方式傳播:

RIG開發套件;

Trik殭屍網絡;

僞造支付網站;

垃圾郵件活動;

從2020年上半年開始,公共RaaS已關閉,運營商開始對攻擊目標進行了調整,有跡象表明,最初通過利用易受攻擊的服務器端軟件(Citrix ADC)和不安全的RDP訪問發起的第一次攻擊。

技術細節

我們將描述該惡意軟件歷史發展中遇到的JSWorm家族的一些著名變種。我們不會嘗試涵蓋所有發現的這種惡意軟件變種,因爲它們太多了。這些日期表示觀察到ITW相應變種的大概時間。

2019年5月:JSWorm

MD5:a20156344fc4832ecc1b914f7de1a922

該樣本是JSWorm勒索軟件最早發現的變種之一,與後續版本不同的是,它不包含內部版本號。該樣本使用C ++開發,並在MS Visual Studio中進行編譯。

除文件加密外,它還執行諸如停止大量正在運行的進程和服務之類的操作,以最大化可用於加密的文件數量。此外,它刪除所有系統備份、卷影副本、禁用系統恢復模式並清除事件日誌。

加密方案

使用帶有256位密鑰的Blowfish密碼的自定義修改對文件進行加密。密鑰是在程序執行開始時根據字符串的串聯生成的:用戶名,設備MAC地址和卷序列號(註釋中的樣本值)。

密鑰生成過程

然後,生成由贖金通知稱爲“JSWORM PUBLIC KEY”的字符串。實際上,這裏不使用非對稱密碼學,在這種情況下,使用“public”一詞是沒有意義的。勒索軟件開發人員所謂的“ JSWORM PUBLIC KEY”實際上是上述的Blowfish密鑰與字符串“KCQKCQKCQKCQ”進行XOR運算,並以Base64編碼。

與“KCQKCQKCQKCQ”鍵進行異或

以下是密鑰計算的樣本,其中選擇了序列號和MAC地址值用於說明目的:

異或後的公鑰: “5xpi~tfxvb\x05\x14q\x06\x15qsaq\x07\x14q\x02\x17qsa>049”;

轉換爲Base64後的公鑰: “NXhwaX50Znh2Yn8FFHEGFXFzYXEHFHECF3FzYT4wNDk=”;

自定義版本的Blowfish用於加密每個受害者文件的內容,最多可以加密100000個字節,這可能會加快大文件的加密速度,加密的數據將覆蓋原始數據。

開發人員更改了Blowfish密碼的內部實現,這導致它與標準實現不兼容,可能是爲了使研究人員更難解密。

加密缺陷

該惡意軟件實質上將可用於解密的密鑰保存在贖金通知中。使用Base64解碼和解除異或處理非常簡單,受害者的數據可以在不支付贖金的情況下保存。即使贖金通知單由於某種原因丟失了,密鑰也可以很容易地在受感染的設備上重新生成。

2019年7月:JSWorm 4.0.3

JSWorm的改進和更新版本,試圖修復以前版本中發現的漏洞。

此樣本包含對受感染設備的語言檢查。這很可能是爲了防止使用以下語言的系統上的數據加密:RU(俄語),BE(白俄羅斯語),UZ(烏茲別克語),KY(吉爾吉斯語),TG(塔吉克語),TK(土庫曼語),KK(哈薩克斯坦語),UK(烏克蘭語)。

確定用戶的語言

然而,可能是由於開發時出現的錯誤,此版本的勒索軟件僅在系統語言爲俄語時才加密文件。如果我們仔細觀察上述條件,可以看到第一個條件是“!=”(“不等於”)。這使木馬執行的代碼分支在語言不是俄語的系統系統上無需加密即可退出。如果條件爲“==”,則將採用另一個分支,從而導致可能是該木馬最初預期的行爲。

此變種中的贖金通知被實現爲一個名爲-DECRYPT.hta的HTA文件,其中是惡意軟件傳播的唯一受害者ID。HTA文件在文件加密完成後啓動,並通過註冊表添加到自動運行中:

reg添加HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v “zapiska” /d “C:\Users\user\JSWRM-DECRYPT.hta”;

JSWorm 4.0.3的贖金說明

加密方案

此版本的JSWorm使用RSA的WinAPI實現和AES的自定義實現來加密文件。JSWorm生成兩個128位(IV)和256位(密鑰)的隨機值,這些值僅限於以下字符:a…z,A…Z和0…9。RSA公鑰被嵌入到勒索軟件中:

JSWorm 4.0.3中使用的RSA公鑰

使用此密鑰,JSWorm加密AES密鑰和初始化向量(IV)並將其編碼爲Base64:

JSWorm 4.0.3中的WinAPI RSA加密

然後,該值被添加到勒索軟件註釋-DECRYPT.hta中,但是該值本身並未以視覺方式顯示,因爲它作爲HTML註釋位於文件內部。

.hta贖金通知文件中的值

爲了使解密嘗試對研究人員更加困難,惡意軟件開發者實現了一個自定義的AES分組密碼的變種,它與標準算法不兼容。受害者的文件內容通過上述密鑰和IV的密碼進行加密。

加密缺陷

在JSWorm的這個變種中,開發人員試圖修復研究人員在以前版本中發現的缺陷。然而,仍然可以進行不付費的解密。用於生成密鑰和IV的僞隨機數生成器在密碼上並不安全,它允許研究人員通過攻擊生成算法來恢復密鑰和IV。知道了這些值,他們就可以解密受害者的數據。

2019年8月:Nemty 1.4

MD5:1780f3a86beceb242aa81afecf6d1c01

JSWorm和Nemty之間的代碼更改非常重要。根據我們的分析,惡意軟件開發人員可能已經從頭開始重寫了他們的木馬程序,可能是爲了防止成功的解密嘗試,該嘗試使JSWorm的多個早期變種的受害者可以不支付任何費用來恢復其數據。

該樣本也用C ++開發,並在MS Visual Studio中編譯。它實現了一個由字符串混淆算法組成的較小的反分析技巧。字符串(例如,贖金通知名稱和內容,RSA公鑰,付款URL等)由RC4流密碼使用硬編碼的密鑰“fuckav”進行加密,並在Base64中進行編碼。

Nemty 1.4贖金通知

啓動後,該樣本將收集有關連接到受感染計算機的存儲設備的信息,通過對http://api.ipify.org的HTTP請求獲取其外部IP地址,並通過從http://api.db-ip.com/v2/free/請求數據生成一對RSA-2048會話加密密鑰,並將所有收集的信息合併爲JSON結構,來確定受害人所在的國家/地區。然後,該結構通過攻擊者的公共RSA密鑰進行加密,並在贖金通知的末尾以“NEMTY DECRYPTION KEY”結尾。

在通過RSA加密之前收集的信息

此結構中有一些特別之處需要注意:

isRU:指定由外部IP地址確定的受害國是否爲以下國家之一:俄羅斯,白俄羅斯,哈薩克斯坦,塔吉克斯坦,烏克蘭;

版本:木馬的內部版本;

CompID:受感染設備的唯一ID;

FileID:每次惡意軟件啓動時生成的感染ID;

UserID:附屬機構的ID,在木馬樣本中進行硬編碼;

密鑰:用於文件加密的base64編碼密鑰(稍後將討論);

pr_key:base64編碼的私有會話RSA-2048密鑰(稍後將討論);

加密方案

該木馬樣本包含攻擊執行者的硬編碼RSA-8192公鑰,我們將其稱爲主RSA公鑰。

在受害者計算機上執行該木馬程序後,它還會生成一對會話RSA-2048密鑰,並將上面提到的私鑰稱爲pr_key。除此之外,它還會生成一個256位密鑰,該密鑰將與基於AES的自定義分組密碼一起使用。

256位密鑰和pr_key由主RSA公鑰加密,並保存在贖金說明中。

在對每個受害者的文件進行加密時,Nemty 1.4將生成一個128位的IV,並使用帶有該IV的256位密鑰通過基於AES的自定義密碼對文件內容進行加密。IV由會話公共RSA密鑰加密,,並附加在加密後的文件中。

每個加密的文件都會被重命名,從而獲得一個額外的擴展名”。_NEMTY__ ",其中被跳過的部分是上面提到的感染ID FileID。

加密缺陷

像JSWorm的某些早期變種一樣,Nemty 1.4中加密方案的實現也不是完美無缺的。利用兩個漏洞就可以對受害者的文件進行解密:

1.密鑰生成的PRNG是不安全的;

2.RSA會話密鑰沒有從系統存儲中刪除;

通過使用第一個漏洞,可以恢復256位密鑰,而使用第二個漏洞可以恢復pr_key。知道pr_key後,受害者就可以解密IV,然後使用256位密鑰和IV解密受害者的文件內容。

C&C溝通

該樣本從https://dist.torproject.org/torbrowser/8.5.4/tor-win32-0.4.0.5.zip下載TOR客戶端,將其提取並在受感染的計算機上啓動。等待30秒(惡意軟件開發人員顯然認爲足夠長的時間才能連接到TOR網絡)後,木馬將有關感染的信息發送到樣本中經過硬編碼的C&C服務器:

zjoxyw5mkacojk5ptn2iprkivg5clow72mjkyk5ttubzxprjjnwapkad.onion

使用含有 URI /public/gate?data=的HTTP GET發送到服務器的信息與每個贖金通知中保存的信息相同,本質上是上述JSON結構的加密版本。

參考及來源:https://securelist.com/evolution-of-jsworm-ransomware/102428/

相關文章