介紹
惡意軟件作者在編寫新的惡意軟件時通常會重用自己寫過的代碼,因此在做惡意軟件的關(guān)聯(lián)分析時,常通過代碼段的對比來作為判別標(biāo)準(zhǔn),但需要注意的是,這類代碼需要具有強烈的標(biāo)識性,能將其歸因到具體的組織或個人。隨著新型攻擊組織和惡意軟件的不斷涌現(xiàn),“老酒裝新瓶”現(xiàn)象也時常發(fā)生,例如GandCrab運營團隊在2019年5月間宣布將停止勒索軟件活動,但不久后又出現(xiàn)了一種名為REvil(也被稱為Sodinokibi)的新型勒索軟件,兩者的代碼具有很強的相似性,表明當(dāng)GandCrab勒索軟件關(guān)停期間,其作者用GandCrab的部分代碼又開發(fā)出了一款新的勒索軟件。
本文將分析勒索軟件SunCrypt和QNAPCrypt之間的聯(lián)系,QNAPCrypt在2019年被用于攻擊群暉科技(Synology)、威聯(lián)通(QNAP)等NAS品牌設(shè)備。這兩款勒索軟件在代碼重用和技術(shù)方面存在很強的關(guān)聯(lián)性,目前由不同的團體在操作。雖然這兩款軟件可能是同一人編寫,但不同的操作者可能會使用不同的戰(zhàn)術(shù)、技術(shù)和程序(TTPs),或是使用新的逃避技術(shù),防御者必須保持警惕。
技術(shù)關(guān)聯(lián)
SunCrypt是一種勒索軟件即服務(wù)(RaaS),對其溯源可到2019年10月,此版本的SunCrypt由Go語言編寫,針對Windows機器,此時檢測到的攻擊次數(shù)并不多,一直到2020年中期,出現(xiàn)了C/C++編寫的新版,攻擊數(shù)量也開始增加。當(dāng)其他威脅組織開始將惡意軟件從C/C++改為Go版本時,它卻逆其道而行之。
SunCrypt與QNAPCrypt(也稱為eCh0raix)勒索軟件在代碼上高度關(guān)聯(lián),可以肯定的是,兩者的代碼是從相同的源代碼編譯而來。
SunCrypt 2020和SunCrypt 2019
SunCrypt 2020年的新變種由C編寫,與2019年的早期版本沒有共同代碼。除了功能相似外,有其他信息幫助我們將其歸類:
SunCrypt竊取并加密了受感染機器上的文件后,會向用戶顯示勒索記錄,如下圖1所示。
圖1:SunCrypt的贖金頁面。左側(cè)顯示2019年版本,右側(cè)顯示當(dāng)前版本,兩者具有相同的單詞和語法錯誤。當(dāng)前的勒索頁面公布了指向展示私人信息的鏈接,而老版頁面沒有。
2020年變種的勒索頁面,有英語、德語、法語、西班牙語和日語版本,并帶有一個輸入框,當(dāng)用戶輸入唯一ID時,會向用戶發(fā)送聊天界面。2019年款的贖金頁面具有類似的文本,主要區(qū)別在于背景顏色以及未支付贖金情況下脅迫話語。
SunCrypt與QNAPCrypt的關(guān)聯(lián)
2021版本可能是beta版本,PDB路徑中顯示的版本名為“0.1”,如圖2所示。該圖顯示了redress(一款分析Go二進(jìn)制文件的工具)處理后的部分輸出,可以看到一個名為“aes.go”的文件,其中包含兩個函數(shù),其中一個函數(shù)的名稱中有一個錯字,應(yīng)該是“EncAES”而不是“EncEAS”。
這個錯誤也曾出現(xiàn)在QNAPCrypt版本2的兩個樣本中(8dd59345cc034317630b2ac2ee19b362和516291d10b370c7be3863335cf5d57eb)。圖3中顯示了QNAPCrypt樣本之一的redress輸出。在搜索了我們的惡意軟件數(shù)據(jù)集和VirusTotal后,只有這三個樣本具有兩個函數(shù)名。由此可以得出結(jié)論,錯別字是唯一的,兩個勒索軟件之間可能共享代碼。
圖2:SunCrypt 2019變種的部分redress輸出。
圖3:QNAPCrypt版本的redress輸出,具有相同拼寫錯誤。
對函數(shù)的進(jìn)一步分析表明,它們來源相同。“EncFile”的流程圖如圖4所示,“EncEAS”的流程圖如圖5所示。SunCrypt勒索軟件:eCh0raix新型衍生變種
圖4:EncFile函數(shù)的流程圖,兩者一致。
上述樣本是針對不同的操作系統(tǒng)和架構(gòu)使用不同版本的Go編譯器編譯的,導(dǎo)致所生成的匯編代碼略有不同。EncFile函數(shù)為要加密的文件啟動文件處理程序,它使用Go的標(biāo)準(zhǔn)庫提供的“stat”函數(shù)來確定文件大小,根據(jù)文件大小將其分為兩類。
對于SunCrypt,文件大小的分類標(biāo)準(zhǔn)是100 MB,而QNAPCrypt使用10 MB的閾值。在大文件類中,SunCrypt使用標(biāo)準(zhǔn)庫“io”包的“ReadAtLeast”函數(shù)讀取前100 MB,QNAPCrypt執(zhí)行的也是相同的操作,只是在前10 MB中執(zhí)行。
對于較小的文件,兩個軟件都使用都使用來自“io”包的“ReadFile”函數(shù),讀取的數(shù)據(jù)被傳遞給加密數(shù)據(jù)的“EncEAS”函數(shù)。最后,在刪除原始文件時,將EncEAS輸出內(nèi)容作為新文件寫入磁盤,并附加相應(yīng)擴展名。除了大小限制之外,兩款軟件的函數(shù)邏輯是相同的。SunCrypt勒索軟件:eCh0raix新型衍生變種
圖5:SunCrypt與QNAPCrypt的“EncEAS”函數(shù)流程圖比較。
其他相似之處
兩款勒索軟件除了文件加密函數(shù)代碼雷同外,還具有其他相似之處,QNAPCrypt中的函數(shù)與SunCrypt中的函數(shù)的相似之處。
圖6:QNAPCrypt和SunCrypt之間具有相似功能的函數(shù)。文件加密邏輯相同,而密鑰生成和密鑰加密又非常相似,且均通過計算機的語言環(huán)境和GeoIP來確定計算機的位置。
兩種勒索軟件都設(shè)計為不能在某些獨立國家聯(lián)合體(CIS)上運行,如果QNAPCrypt認(rèn)為文件在白俄羅斯語,俄語或烏克蘭語的計算機上運行,則不會對其進(jìn)行任何加密,SunCrypt也有類似處理,名單中包含吉爾吉斯斯坦和敘利亞。
在確定計算機用戶國籍這一點上,兩款勒索軟件采用的方式非常相似——使用了兩個信息源。一是計算機的語言環(huán)境,由于QNAPCrypt針對Linux機器,而SunCrypt針對Windows機器,因此獲取此信息的方式也有所不同;第二個是根據(jù)機器的外部IP地址通過地理位置進(jìn)行,兩種勒索軟件都與外部服務(wù)聯(lián)系以獲取此信息,SunCrypt使用“ip-api.com”,QNAPCrypt使用“ipapi.co”。
兩款軟件都在CFB模式下使用AES對文件進(jìn)行加密,均生成唯一的32個字符的密碼,生成的過程邏輯也非常相似。如圖7所示,密碼中的字符是從有效字符列表中隨機選擇的,包括所有英文字母的大小寫以及數(shù)字0到9,由標(biāo)準(zhǔn)庫中的math包中的rand實現(xiàn),在隨機性上是不加密的。以當(dāng)前時間為隨機種子,每次調(diào)用負(fù)責(zé)生成密碼的函數(shù)時,SunCrypt都會重置種子,而QNAPCrypt會在初始化期間設(shè)置種子,SunCrypt還使用該函數(shù)生成受害者標(biāo)識符。
圖7:生成加密密碼。該函數(shù)循環(huán)32次,并使用“rand.Intn”從有效字符列表中選擇一個隨機字符,循環(huán)完成后,字符的字節(jié)片將轉(zhuǎn)換為字符串。
加密密碼是用二進(jìn)制文件中的公鑰RSA加密的。這段代碼的邏輯于圖8所示,代碼使用“EncryptPKCS1v15”函數(shù),屬于“crypto/rsa”包。
圖8:使用二進(jìn)制文件中包含的公共密鑰對密碼進(jìn)行加密。
兩款勒索軟件都有作為Tor隱藏服務(wù)托管的C2設(shè)施。QNAPCrypt的第一個版本通過C2獲取贖金票據(jù)的信息和比特幣錢包,SunCrypt發(fā)送活動信息并將竊取文件上傳到C2服務(wù)器。為了訪問隱藏的服務(wù),兩者都使用公共可用的SocksV5代理,QNAPCrypt直接連接到一個IP地址(192.99.206[.]61),而SunCrypt使用的代理通過域vie8hoos[.]xyz訪問。
勒索軟件加密的文件類型也相似,都有一個文件擴展名列表,用于確定是否加密文件。SunCrypt具有589個文件擴展名的列表,如果將SunCrypt列表與QNAPCrypt的第一個版本使用的列表進(jìn)行比較,可以看到SunCrypt的列表添加了四個新條目,并刪除了19個條目。列表未進(jìn)行任何排序,因此提取列表的順序與惡意軟件中出現(xiàn)的順序完全相同。下面的代碼片段顯示了兩個列表的“diff”。
$diff suncrypt_ext.lst qnap_ext_20190705.lst
460d459
<.mp4
562,564d560
<.java
<.swift
<;.go
589a586,604
>.gcode
>.ngc
>.sldprt
>.sldasm
>.x_t
>;.step
>;.fits
>;.cat
>;.ctlg
>;.fit
>;.rsn
>.eml
>.vhdx
>.cfg
>.plist
>.bckup
>.far
>.tbz
>.abf
將SunCrypt的列表與同一年8月的QNAPCrypt第二版使用的列表進(jìn)行比較,重疊部分會更多,不同的是SunCrypt增加了三個條目,刪除了兩個。整體上看,字符串相似度為0.991,這是一個很強的相似度。“diff”輸出如下所示。
$diff suncrypt-files.lst qnap_ext_20190801.lst
562,564d561
<.java
<.swift
<.go
589a587,588
>.gcode
>;.ngc
總結(jié)
盡管兩款勒索軟件在代碼上相似,但其幕后的操作者在暗網(wǎng)論壇上的宣傳方式、攻擊目標(biāo)等的選取上卻截然不同,eCh0raix和SunCrypt很可能由兩個不同的運營團隊在操縱。安全人員應(yīng)考慮到這一點,不能因為一個惡意軟件家族是另一個惡意軟件家族的迭代,就把它們的運營團隊劃上等號,如果被其他攻擊者接手,操作方式、功能和規(guī)避技術(shù)上可能都會有所改變。防御者必須保持警惕。
本文翻譯自:https://www.intezer.com/blog/malware-analysis/when-viruses-mutate-did-suncrypt-ransomware-evolve-from-qnapcrypt/