作者:啟明星辰ADLab
公眾號:https://mp.weixin.qq.com/s/2KVWemeMrFIkzIH7b-FtFg

1、概 述

近日,啟明星辰ADLab捕獲到了“俠盜”病毒最新變種,該病毒的版本號為V5.3,編譯時間為4月14日,距離其上一個版本V5.2在中國肆虐僅僅一個多月。“俠盜”V5.2開始肆虐中國的時間為3月11日,并已感染了我國上千臺政府、企業和相關科研機構的計算機。湖北省宜昌市夷陵區政府、中國科學院金屬研究所、云南師范大學以及大連市公安局等機構均在其官網發布了防范病毒攻擊的公告。

“俠盜”病毒的第一個版本誕生于2018年1月,目前為止,已經更新迭代了5個大的版本、20幾個小版本。其主要目的是通過加密受害用戶的計算機文件來對受害用戶進行勒索。“GandCrab”勒索病毒之所以被人稱為“俠盜”,是因為其曾經“人道地”為無力支付“贖金”的敘利亞父親解密了其在戰爭中喪生的兒子的照片,并放出了部分敘利亞地區之前版本的解密密鑰,還將敘利亞以及其他戰亂地區加進感染區域“白名單”。

“俠盜”會將用戶文件加密后添加上勒索后綴名,然后再更換感染系統的桌面為勒索圖片,勒索圖片上的文字提示受害用戶閱讀其勒索手冊文本文件,在勒索手冊文本文件中進一步引導受害用戶贖回用戶文件。在5.2之前的版本中,勒索手冊文件引導受害用戶通過Tor網絡贖回文件,贖金支持達世幣和比特幣支付;而在最新的5.3版本中,勒索手冊中只給出了黑客的郵箱,要求受害者郵件聯系他們,除了這一點變化,“俠盜”5.3還更新了黑客公鑰。目前尚不清楚Gandcrab5.3勒索病毒可能會要求解密者支付多少錢,但之前的版本要求在比特幣或達世幣上支付500美元至4000美元不等。

2、病毒傳播

“俠盜”病毒傳播途徑主要有RDP、VNC途徑進行暴力破解和入侵、定向魚叉釣魚郵件投放、捆綁惡意軟件和網頁掛馬攻擊、僵尸網絡以及漏洞利用傳播等。

目前在暗網中,“俠盜”幕后團隊采用“勒索即服務”(“ransomware as-a-service” )的方式,向黑客大肆售賣V5.3版本病毒,即由“俠盜”團隊提供病毒,黑客在全球選擇目標進行攻擊勒索,攻擊成功后 “俠盜”團隊再從中抽取30%-40%的利潤。“垃圾郵件制造者們,你們現在可以與網絡專家進行合作,不要錯失獲取美好生活的門票,我們在等你。”是“俠盜”團隊在暗網中打出的“招商廣告”。

“俠盜”是目前第一個勒索達世幣的勒索病毒,后來才加了比特幣,要價500美元至4000美元不等。據“俠盜”團隊2018年12月公布的數據,其總計收入比特幣以及達世幣合計已高達285萬美元。

3、破解歷史

像大部分勒索文件一樣,“俠盜”使用了RSA加密算法,除非拿到黑客持有的RSA-2048私鑰,才能夠對感染文件進行解密,否則無法解密。

因為“俠盜”事件,攻擊者放出了勒索病毒部分早期版本的解密密鑰,多個安全廠商隨后相繼發布了解密工具。從18年10月到今年2月,Bitdefender先后發布了“俠盜”多個版本的解密工具,最新的解密工具下載地址為:https://labs.bitdefender.com/wp-content/uploads/downloads/gandcrab-removal-tool-v1-v4-v5/,該工具可以解密的版本如表1所示。其解密原理是通過在線向Bitdefender服務器提交加密ID,來獲取可用的解密私鑰( RSA-2048)來進行解密。用戶可以根據表中的加密文件后綴或勒索說明文本文件的開始來核對病毒版本。

表1 可以解密的版本(“([A-Z]+)”表示5-10位隨機字母)

然而,道高一尺魔高一丈, “俠盜”現在又相繼發布了版本V5.2和V5.3,至今都無法破解。

4、加密原理分析

“俠盜”V5.3用到的核心算法主要有Salsa20和RSA-2048。Salsa20算法用于加密用戶文件和加密用戶的本地RSA-2048私鑰。RSA-2048算法用于加密Salsa20密鑰和IV。如下圖1所示:

img

圖1 GandCrab5.3 加密原理圖

圖1的中間,黑客利用微軟“advapi32”庫函數本地生成RSA-2048的一對公私玥對,私鑰會被Salsa20加密,公鑰用于加密“加密用戶文件”的key和IV。我們分別將這一對公私玥記為locPrikey和locPubkey。

圖1的左半部分,locPrikey被Salsa20加密生成data3;Salsa20的SalsaKey(32bytes隨機數)和IV1(8bytes隨機數)被黑客的公鑰hackerPubkey分別加密生成data1和data2;locPrikey長度0x00000494、data1、data2和data3被base64加密后保存在“-MANUAL.txt”文件中用于贖回后文件解密(表示大寫的加密文件后綴名)。

圖1的右半部分,locPubkey用于加密Salsa20的密鑰SalsaFileKey(32bytes隨機數)和IV2(8bytes隨機數),加密后分別生成密文data5和data6;用戶文件被Salsa20算法加密生成data4;這些加密過的數據加上用戶文件長度和固定字節,最后拼接成密文文件finalFile。

5、行為分析

我們分析后發現,同“俠盜”5.2版本一樣,GandCrab5.3也加入了花指令混淆(如圖2)來對抗靜態分析。我們結合動、靜態分析技術,對“俠盜”5.3進行了詳細深入的分析。“俠盜”病毒在成功感染用戶設備后,會檢測感染設備使用的操作系統語言,以確保其不會感染“俄羅斯”、“烏克蘭”、“烏茲別克斯坦”等東歐和西亞國家的用戶。“俠盜”會嘗試終止感染設備上的相關安全軟件以防止自身被查殺。并且還會終止感染設備上運行的Office套件進程和SQLServer等數據庫進程,防止因用戶文件被占用而漏掉需要加密的文件。“俠盜”在加密用戶文件之前會首先排除特定的系統相關目錄和文件,以保證操作系統的正常運行。在完成文件加密操作后,“俠盜”會替換用戶桌面,警示受害用戶文件已經被加密,讓受害用戶到病毒生成的“Manual”文件中按照提示贖回文件。

最后,“俠盜”會將收集到的感染設備操作系統類型、用戶名等信息加密發送到遠程服務器。另外,“俠盜”還刪除了感染設備的卷影拷貝,目的是防止用戶利用Windows Recovery對文件進行恢復,這也是勒索病毒的常規操作。

img

圖2 花指令混淆

5.1 排除部分國家

“俠盜”在“作惡”之前,會獲取感染計算機操作系統語言版本,如果攻擊目標是圖3這些語言區域標志符的操作系統,則不進行加密,退出程序。我們將相關的區域標志符和對應語言(國家)列到表2中。從表2中我們可以看到,這些國家大部分位于東歐和西亞的戰亂地區,攻擊者對這些國家“網開一面”大概是“得益于”“俠盜”事件,但對俄語系的操作系統也如此垂愛,很容易讓人聯想到“俠盜”背后的黑客或許來自俄語系國家。

img

圖3 語言區域標志符

表2 排除的語言(國家)

5.2 終止安全軟件

“俠盜”遍歷感染設備系統進程,如果發現感染設備有運行卡巴斯基、諾頓等安全軟件,就強制結束掉目標進程,防止自己被殺毒軟件查殺。相關的安全軟件如下圖4所示。

img

圖4 相關安全軟件進程

5.3 終止特定程序

“俠盜”會遍歷感染設備系統當前進程列表,如果匹配到指定的進程則結束該進程,以防止遺漏掉因用戶文件被占用而不能被加密的用戶文件。如Word、Excel、PowerPoint、Onenote、Visio、Oracle、SQLserver、MySQL等常見應用進程,詳細目標進程如圖5所示:

img

圖5 終止的目標進程

5.4 確定加密文件類型

5.4.1 文件后綴白名單

為了排除掉沒有價值的勒索數據文件,“俠盜”內置了一份文件后綴白名單,如圖6所示。我們將其列到表3中,其中包括的文件有可執行文件、系統動態調用庫文件、系統驅動文件和“俠盜”相關的文件等。

img

圖6 不加密的文件類型

表3 后綴白名單

5.4.2 系統白名單

“俠盜”還內置了一份目錄白名單,以確保感染設備能夠“正常運行”。目錄白名單見表4。白名單目錄包括“Windows”、“Program Files”和“Tor Browser”等目錄,排除這些目錄,受害用戶就可以使用“正常運行”的感染設備向黑客贖回加密文件。

表4 系統目錄白名單

表5中的系統文件也不在加密目標之列:

表5 系統文件白名單

5.4.3 加密的文件后綴

“俠盜”目標要加密的文件后綴如圖7,我們將其整理到表6中。從表6中我們可以看到,“俠盜”要加密的文件后綴有多個,常見的有“dox”“xml”等Office套件文件,“tar”“zip”等壓縮文件。

img

圖7 加密的文件類型

表6 加密的文件后綴

5.5 加密用戶文件

“俠盜”會遍歷感染設備共享目錄和本地磁盤。采用RSA-2048+Salsa20算法加密感染設備文件。

加密共享目錄下的文件如圖8所示:

img

圖8 加密共享目錄下的文件

加密本地磁盤目錄下文件如圖9所示:

img

圖9 加密本地磁盤目錄下文件

5.6 生成MANUAL文件

“俠盜”先將勒索信息解密到內存中,在進行版本和后綴信息拼接后,將整個勒索信息寫入MANUAL文件中,如圖10和圖11所示:

img

圖10 創建MANUAL文件,寫入勒索信息

img

圖11 解密到內存中的勒索信息

最終的MANUAL文件由勒索信息、加密后的私鑰信息和加密后的感染設備信息組成。其中黑客特意強調受害用戶不要修改私鑰信息內容,因為一旦私鑰信息一旦被改變,就無法對文件進行解密。

5.7 替換感染設備桌面

創建勒索桌面壁紙到“C:\Documents and Settings[username]\LocalSettings\Temp\bxmeoengtf.bmp”,如圖12所示:

img

圖12 創建勒索圖片,設置勒索桌面

圖13中,勒索圖片上寫有“YOURFILES ARE UNDER STRONG PROTECTION BY OUR SOFTWARE. IN ORDER TO RESTORE IT YOUMUST BUY DECRYPTOR,For further stepsread %s-DECRYPT.%s that is located in every encrypted folder”,提示感染用戶閱讀Manual文件支付贖金。

img

圖13 勒索壁紙

5.8 刪除卷影拷貝

“俠盜”會刪除感染計算機卷影副本,這是勒索病毒的常規操作,這樣做的目的是防止受害用戶通過Windows Recovery對文件進行恢復,如圖14。

img

圖14 刪除卷影副本

如圖15,“俠盜”調用“shell32.ShellExecuteW”執行命令“/c vssadmin delete shadows /all /quiet”

img

圖15 執行刪除命令

5.9 連接C&C

“俠盜”會訪問指定域名的80和443端口,“俠盜”在連接黑客控制的遠程服務器(如http://www.kakaocorp.link)成功后,向遠程服務器發送感染設備信息,如圖16。

img

圖16 向遠程服務器發送感染設備信息

表7是部分遠程服務器域名:

表7 部分遠程服務器域名

6.算法分析

“俠盜”用到的主要加密算法有RSA-2048、Salsa20。Salsa20算法用于加密用戶文件和加密用戶的本地RSA-2048私鑰。RSA-2048算法用于加密Salsa20密鑰和IV,詳細的算法我們在下面分幾部分逐步介紹(變量命名參照圖1)。

6.1 收集系統信息

“俠盜”收集感染設備配置信息后,一方面保存在本地,一方面發送到C&C服務器。收集到的信息如圖17:

img

圖17 收集到的pcData

即:pc_user=Administrator&pc_name=ADMIN-62597FF55&pc_group=WORKGROUP&pc_keyb=0&os_major=MicrosoftWindowsXP&os_bit=x86&ransom_id=dfe92855cc97a801&hdd=C:FIXED_25757888512/3537391616&id=287&sub_id=1511&version=5.3&action=call

我們將其記為pcData,pcData在保存到本地之前和發送到C&C服務器之前,分別使用了rc4算法加密和base64加密。表示如下:

strPCdata  = base64encode(rc4(pcData,rc4key))

其中,rc4key為".oj=294~!z3)9n-1,8^)o((q22)lb$"

strPCdata保存在”-MANUAL.txt”文件中(表示大寫的加密文件后綴名),見圖18:

img

圖18 Base64存儲的PC相關密文信息

由于C&C失效,所有我們沒有抓到發送發送strPCdata的數據包。

6.2 解密pubkey

“俠盜”先生成64字節流input3(由Salsakey3(固定字節)和IV3(固定字節)和常量組成),如圖19:

img

圖19 生成的input3

“俠盜”在使用Salsa20算法解密黑客的RSA2048公鑰,我們將公鑰密文記為pubkeyEncrypted,將解密后的公鑰記為hackerPubkey,算法如下:

hackerPubkey=  Salse20(input3, pubkeyEncrypted)

hackerPubkeyEncrypted見圖20:

img

圖20 解密前的hackerPubkey

解密得到hackerPubkey見圖21,對比“俠盜”5.2的黑客公鑰(圖22),我們發現在5.3版本中黑客更新了其持有的公鑰。

img

圖21 GandCrab5.3解密后的公鑰

img

圖22 GandCrab5.2 黑客公鑰

6.3 本地生成RSA公私玥對

黑客利用微軟“advapi32”庫函數本地生成RSA-2048公私玥對,我們分別記為locPubkey和locPrikey,針對每個感染者本地公私玥對只生成一次。其中,locPubkey用于加密SalsaFileKey和IV2,而locPrikey使用Salsa20算法加密后最終保存到本地。

locPubkey(0x114字節)見圖23:

img

圖23 內存中的locPubkey

locPrikey(0x494字節)見下圖24:

img

圖24 內存中的locPrikey

6.4 加密本地私鑰

“俠盜”首先生成SalsaKey(32字節隨機數)和IV1(8字節隨機數),再和常量一起生成64字節輸入流,我們記為input1,然后,“俠盜”使用Salsa20算法加密locPrikey,算法如下:

data3  = Salsa20(input1,locPrikey)

SalsaKey(32字節隨機數)和IV1(8字節隨機數)分別被黑客的公鑰加密,如下:

data1= RSA2048(hackerPubkey, SalsaKey)

data2 = RSA2048(hackerPubkey, IV1)

最后,“俠盜”將“data1”、“data2”、“data3”base64加密后保存在本地,如下(其中0x00000494為locPrikey長度):

gandcrabKey=base64encode(0x00000494+ data1+  data2+ data3)

保存在“****-MANUAL.txt”文件中,如圖25:

img

圖25 Base64存儲的本地RSA-2048私鑰密文信息

6.5 加密感染者文件

“俠盜”第一步生成SalsaFileKey(32字節隨機數)、IV2(8字節隨機數)以及常量生成的64字節輸入流,我們記為input2,input2針對每一個用戶文件都唯一生成,然后“俠盜”使用Salsa20算法加密用戶文件,算法如下:

data4  = Salsa20(input2,userFile)

第二步用本地公鑰locPubkey加密SalsaFileKey(32字節隨機數)和IV2(8字節隨機數),算法如下:

data5 = RSA2048(locPubkey, SalsaFileKey)

data6 = RSA2048(locPubkey, IV2)

最后,“俠盜”將“data4”、“data5”、“data6”和固定的字節拼接成加密文件,如下(其中lenUserFile為用戶原始文件大小):

finalFile=data4 +data5+data6+lenUserFile+固定字節

加密后的文件結構如圖26:

img

圖26 加密的文件結構

7.總結與建議

因為大部分勒索病毒加密后的文件都無法解密,所以應對勒索病毒以預防和備份為主。建議用戶做好日常的防范措施:

  • 及時更新操作系統,及時給計算機打補丁。
  • 對重要的數據文件要進行異地備份。
  • 盡量關閉不必要的文件共享,或把共享磁盤設置為只讀屬性,不允許局域網用戶改寫文件。
  • 盡量關閉不必要的服務和端口。如:135,139,445端口,對于遠程桌面服務(3389),VNC服務需要進行白名單設置,僅允許白名單內的IP登陸。
  • 采用不少于10位的高強度密碼,并定期更換密碼,通過windows組策略配置賬戶鎖定策略,對短時間內連續登陸失敗的賬戶進行鎖定。
  • 安裝具備自保護功能的防病毒軟件,并及時更新病毒庫或軟件版本。
  • 加強員工安全意識培訓,不輕易打開陌生郵件或運行來源不明的程序,切斷勒索病毒的郵件傳播方式。

Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/911/