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