九维团队-青队(处置)| 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或网闸等进行隔离。