本帖最后由 Potato 于 2022-8-9 12:06 编辑
相关阅读
SafeSound勒索病毒家族详情
SafeSound是一款通过要求微信支付赎金的勒索软件,经过分析可知样本由易语言编写,在样本对文件加密完成后将文件后缀名修改为 .SafeSound,并弹出窗口要求支付赎金。
第一阶段加载器
加载器运行后主要通过命令行的形式启动第二阶段勒索病毒的主程序:
然后再通过服务管理器注册服务进程 SafeSound
获取时间并记录到文件trigger
SafeSound服务进程(08F28E3BD9E47B15661DC3B1AF842974),首先通过判断 %TEMP% 目录下是否存在trigger文件,如果不存在,则获取当前时间,然后对日期中的day+3再写入trigger文件,并将文件设置为系统文件和隐藏属性。
之后再次获取当前时间,并做了浮点数运算,与预定值1.0e-7进行比较:
这里结合用户的反馈可以推测样本应该是注册3天之后正式运行勒索加密的操作,这么做可以有效做到反沙箱、加大取证溯源的难度。
生成加密密钥及Key.data内容
通过srand初始化,并生成长度为0x40的随机数序列
在生成随机数序列后,接着生成Key.data中的内容,Key.data中的内容主要用于解密,其生成过程主要进行四个步骤:
- 首先是使用一个2-256之间的随机数rand_num对获取的毫秒数TickCount按字节进行异或运算得到TickCount_xor。
- 使用TickCount_xor对.data段处的0x63个数据进行单个字节异或得到fix_data。
- 对于长度为0x40密钥的每个字节进行如下操作得到key_xor:
1. 对于每个字节,使用fix_data对该字节进行0x63次异或。
2. 将异或后的字节再与TickCount异或一次
- 将rand_num取反得到rand_num_not,并与TickCount_xor进行异或操作,得到新的rand_num_xor。
最后,取出该过程中的rand_num_xor、TickCount_xor和key_xor组成Key.data的内容,并且写入到 %TEMP%\Key.data中
获取磁盘驱动器名称并开始加密
首先通过获取磁盘驱动名称,并写入分配的内存中,然后遍历所有磁盘驱动开始加密过程,在文件加密函数中通过来遍历文件和文件夹:
如果为文件夹,则会通过排除一些白名单文件夹(tmp、temp、rtl、program)来跳过加密,否则递归调用文件加密函数来进行加密:
如果为文件,则通过获取文件后缀名来排除不需要加密的文件类型:
其中在白名单里的后缀名包括:
.bat | .bin | .com | .cfg | .client | .dat | .dll | .exe |
.gif | .icon | .ico | .ini | .info | .json | .jar | .clas |
.flv | .krc | .lnk | .lib | .log | .lrc | .pak | .tmp |
.xml | .ocx | .obj | .swf | .sf | .sh | .sys | .rc | .rll |
.rom | .rsa | .rtf | .rs
如果不在白名单中,则继续检查后缀名是否为.SafeSound,如果是则证明已经加密过。若不是还会继续通过获取文件属性来判断是否为系统文件,如果不是系统文件则开始文件加密:
设置文件属性并实施文件加密
首先将文件统一标记为归档属性,并生成一个添加.SafeSound后缀的文件路径:
接着判断文件大小是否为0,并读入文件内容实施加密操作:
文件内容使用RC4加密算法,主要分为两个步骤:
- 通过传入长度为0x40的密钥来初始化S盒。
- 通过密钥流与文件内容进行异或运算进行加密。
-
在对文件内容加密之后,再将以下信息按顺序写入加密文件:
- 加密内容长度(4 bytes)
- 加密内容(n bytes)
- 原文件路径(n bytes)
- 可能是文件属性(4 bytes)
- 原文件大小(8 bytes)
- 加密循环次数(4 bytes)
在将这些信息写入新文件后,接着就会删除原文件。
写入hash文件并释放窗口勒索程序
完成所有文件的加密后,向 %TEMP% 目录下先写入SafeSound.hash用做帐户名。再写入Antidote.exe勒索窗口程序,并复制安全属性,最后启动勒索窗口程序:
勒索窗口程序运行后会提升到管理员权限,并在桌面释放Antidote快捷文件:
该程序负责绘制窗口,统计加密文件,验证输入的密码,解密加密的文件等功能:
解密脚本
通过对加密程序的分析不难发现,该勒索软件使用的是对称加密中的RC4,所以只要解出初始化之前的密钥,再通过RC4算法即可对程序实现解密。只要电脑上的 %TEMP%\Key.data文件没有删除,通过密钥生成Key.data的过程再进行反向运算,即可解密得到加密密钥Key:
将解密后的Key传入作为RC4的初始密钥来对文件进行解密,以写有123456六个字符的文本文件123.txt为例,该文件的内容大小为6 bytes:
加密后的文件123.txt.SafeSound如下所示:
最终使用解密脚本可以实现文件内容的解密:
|
|
|
|
评论
直达楼层