
動態(tài)專區(qū)
九維團隊-青隊(處置)| Revil勒索軟件樣本行為分析
一、樣本基本信息
|
文件名稱:agent.bak
文件大小:83.0KB
最后修改日期:2022年8月10日,0:07:43
MD5:
2608d32524e17332eae79afa78f215eb
SHA1:
887bd34d8eae7de8fe24c6ee890f5196c1ed99f5
SHA256:
ffc9e9505eb0a71352c0421784577153617c970f3f9c27b3c0399db454fd9bdd
是否加殼:有
殼類型:無
開發(fā)語言:VS2015
標簽:勒索軟件、REvil家族
二、樣本行為分析
01
注冊表監(jiān)控
|
02
文件監(jiān)控
創(chuàng)建勒索文件,加密文件并改名:
|
三、詳細分析
程序查詢不出任何API,沒有什么重要內(nèi)容的字符串,惡意行為被隱藏起來。需要病毒樣本動態(tài)進行解密恢復(fù)IAT。
IDA分析
加載完成后,可以看到入口點有四個函數(shù)調(diào)用:
我們發(fā)現(xiàn)sub_407682函數(shù),首先傳入數(shù)組的4字節(jié)數(shù)據(jù)給sub_4074F9函數(shù),然后將運算結(jié)果(eax)的值重新回填給數(shù)組,一共循環(huán)了780次,計算了3120個字節(jié)。這與我們熟知的動態(tài)解析IAT方法很相似,加上我們之前分析病毒抹去了IAT可以合理猜測該處在做回填I(lǐng)AT表的操作。
進去查看sub_4074F9函數(shù),疑似switch/case的判斷。根據(jù)傳進來不同的數(shù)據(jù)進行執(zhí)行不同流程中的函數(shù)地址賦值,然后跳轉(zhuǎn)到LABEL_33。根據(jù)動態(tài)鏈接庫的加載經(jīng)驗,第一件事一般是動態(tài)獲取目標模塊的基地址,然后根據(jù)基地址解析對應(yīng)導(dǎo)出函數(shù)的位置。所以猜測這里的switch/case語句是在做獲取dll基址的操作。
驗證函數(shù)是否正確:
01
sub_406C8E? - 解密字符串
匯編形式表現(xiàn)如下。
注:如果逆向時突然出現(xiàn)兩次循環(huán)且每次循環(huán)次數(shù)都為256,后續(xù)存在異或操作基本可以猜測為rc4解密算法,這種特性為rc4算法特征。
下面可以發(fā)現(xiàn)字節(jié)異或算法,可以基本確認是rc4算法了。
根據(jù)RC4的特性可以分析出函數(shù)的功能:
02
動態(tài)修復(fù)IAT
所謂動態(tài)修復(fù)IAT類似動態(tài)脫殼,原理是利用病毒自身攜帶的解密程序,在病毒自動修復(fù)完成后中斷。將內(nèi)存狀態(tài)Dump出來保存。在sub_407682步過:
|
使用Scylla就可以發(fā)現(xiàn)此時IAT可以修復(fù)完成了,dump出來就可以進行下一步的分析:
03
病毒行為分析
可以看到修復(fù)之后的邏輯了,首先動態(tài)獲取API后再加載ole32模塊獲取創(chuàng)建COM組件所需的接口。
退回到函數(shù)主邏輯,可以看到病毒先是修復(fù)了IAT表來保證程序正常運行:
Sub_405F61 函數(shù)
設(shè)置錯誤模式獲取錯誤信息并創(chuàng)建名為Global\72F38129-220D-3C80-4D03-DC9E69CA4394的全局互斥體保證進程唯一性。
Sub_402043 函數(shù)
創(chuàng)建內(nèi)存空間解密配置勒索信息:
解密出來可以看出是一種網(wǎng)絡(luò)腳本語言JSON語法的配置文件:
在nbody字段和img字段存在base64的特征,通過base64解密可以解密出勒索信的內(nèi)容:
|
勒索信存在填充內(nèi)容,猜測后續(xù)會有收集系統(tǒng)信息的操作:
接著分析,病毒收集卷序列號以及CPU信息生成一個hash值:
獲取并設(shè)置新的注冊表鍵值信息:
獲取當前用戶:
獲取計算機的 NetBIOS 名稱:
獲取domain鍵值:
獲取本地系統(tǒng)語言:
獲取Windows版本信息:
判斷系統(tǒng)位數(shù):
之后在sub_402930將字符串進行拼接并加密,并設(shè)置為注冊表里的值:
樣本函數(shù)的主邏輯
我們可以分析出病毒設(shè)置了程序/線程的優(yōu)先級和防止系統(tǒng)休眠。還有一個sub_408012的函數(shù),利用RtlAdJustPrivilege進行提權(quán)。
接下來病毒創(chuàng)建了兩個個通信線程執(zhí)行不同的功能。
Thread sub_404532
使用WMI檢測異步創(chuàng)建進程:
Thread sub_4047F1
使用WMI檢測是否有ShadowCopy文件:
sub_403AA0函數(shù)
遍歷進程服務(wù),殺死ServicesActive配置字段中的服務(wù)進程:
殺死列表中服務(wù)進程:
sub_405EE1函數(shù)
病毒創(chuàng)建了一個進程快照通過循環(huán)對當前內(nèi)存中進程信息塊進行遍歷,并將獲取到的進程名傳入函數(shù)指針,調(diào)用函數(shù)指針指向的地址。
不是.exe就終止進程:
根據(jù)進程ID殺死進程:
文件加密是通過API暴力遍歷所有盤符,滿足類型后遍歷加密盤符:
遍歷盤符目錄:
遍歷共享網(wǎng)絡(luò)盤符:
勒索病毒配置文件下的加密白名單,其中包括exe,com等。
寫入勒索信函數(shù):
04
加密部分
病毒作者為了追求加密時的高效快速,利用了I/O完全端口。這種技術(shù)可以實現(xiàn)異步多線程,為線程并發(fā)提供有效支持。
調(diào)用CreateIoCompletionPort函數(shù)創(chuàng)建一個I/O完成端口對象,并創(chuàng)建一個函數(shù)循環(huán)創(chuàng)建與IOCP對象交互的線程。
病毒的加密分為了四個步驟,被封裝到一個switch語句里進行調(diào)用。
加密算法我們可以使用ida的插件findcrypt幫我們識別算法的特征。
RijnDael_AES算法
Salsa20算法
橢圓曲線密碼系統(tǒng)(ECC)
在引用AES算法之前的sub_409F32函數(shù)里發(fā)現(xiàn)121665常量。
四、總結(jié)
綜上所述,agent.exe樣本屬于REvil家族的一款勒索病毒,樣本的最后編譯為2022年8月10號。
Sodinokibi,也稱為 REvil,是一種自 2019 年 4 月起活躍的勒索軟件。Sodinokibi 是一種“勒索軟件即服務(wù)”,這意味著開發(fā)人員不是進行攻擊的人。相反,他們維護管理/支付基礎(chǔ)設(shè)施并向客戶提供或出售惡意軟件。這些客戶是傳播惡意軟件的人。對于支付的每一筆贖金,開發(fā)人員都會獲得一定的百分比。
這種方式有很多優(yōu)點:感染源成倍增加,開發(fā)人員可以專注于代碼和維護,而客戶可以專注于攻擊和感染目標。
樣本使用了-t參數(shù)來判斷樣本是否要釋放出病毒,在靜態(tài)分析的時候病毒使用了IAT混淆和字符串加密,病毒會在執(zhí)行過程中解析IAT表,然后創(chuàng)建全局唯一變量互斥體保證程序單獨運行。
程序使用了RtlAdjustPrivilege進行提取,然后,它將停止其配置中列出的服務(wù)和進程。這些進程通常是防病毒、數(shù)據(jù)庫、備份或快照解決方案等。病毒使用 I/O 完成端口并行文件加密,并使其盡可能快。
文件使用 Salsa20 算法加密,每個文件都有一個唯一的加密密鑰。加密密鑰由復(fù)雜的密鑰系統(tǒng)保護,防止在沒有攻擊者擁有的私鑰的情況下解密文件。樣本并沒有做持續(xù)化的動作,避免留下更多的痕跡。
五、防護措施
1、規(guī)范上網(wǎng)行為,不下載安裝未知的軟件,不點開來歷不明的文檔、圖片、音頻視頻等。
2、定期更換域控、數(shù)據(jù)庫、服務(wù)器上的管理員密碼。
3、定期更新病毒庫,定時組織內(nèi)網(wǎng)進行全盤掃描。
4、定期更新補丁,修復(fù)漏洞。
5、定期檢查防火墻及安全軟件的防護日志,及時發(fā)現(xiàn)異常并解決。
6、定期離線備份或異地備份重要數(shù)據(jù)。
7、修改數(shù)據(jù)庫默認端口,防止被掃描器爆破。
8、進行嚴格的隔離,有關(guān)系統(tǒng)、服務(wù)盡量不開放到互聯(lián)網(wǎng)上,內(nèi)網(wǎng)中的系統(tǒng)也要通過防火墻、VLAN或網(wǎng)閘等進行隔離。