本帖最后由 Potato 于 2020-1-13 18:18 编辑
相关 阅读:
1.Clop勒索病毒家族详情
2.Cl0p勒索病毒样本分析
Cl0p(也称Clop)勒索病毒是CryptoMix勒索病毒家族的一个变种,该变种于2019年2月份开始出现。国内在今年11月开始出现了其新变种,该变种相比之前版本进行了多项优化,比如会优先加密2019年的文件,改用RC4算法提升加密速度,使用自定义算法来产生随机数等,而且在结束进程方面,结束的进程列表量高达663个。更为重要的是,该勒索病毒传播者会针对特定企业定向攻击渗透,每个被攻击企业被植入的病毒都是定制化的,从在受害者机器上留下的勒索提示信息也可以看出,勒索信息中不包括用户id信息(攻击者清楚每一家被他们攻击的企业)。在赎金方面,该勒索病毒要价均在百万美元之上,下面将对该勒索病毒的最新变种进行分析。
Cl0p勒索提示信息
样本信息:
名称:swaqp.exe
MD5:AE5CB860F043CAA84BF4E11CEC758616
签名信息(已经被吊销):
Datamingo Limited
admin@datamingo.co.uk
文件编译时间:2017年10月25日
该勒索病毒的签名已经被吊销
过程分析:
病毒程序使用了加密壳来保护其不会杀毒引擎轻易检测到,以及用来对抗一些分析攻击,其执行过程如下。
1. 内存解码代码执行
原始样本启动后,会做一些环境检查,通过后,内存解密代码执行。
2. 提权
检查是否为服务,如果不是服务就退出进程
3. 创建互斥体
此次病毒采用了新的互斥体FFRRTTOOOTTPPWWZZZLLSS^_-,意味着与之前版本的病毒理论上可同时运行,不再互斥。
4. 清场
循环结束进程(此处在新变种中进行了调整扩充):
- 程序会启动一个线程,300秒循环一次。分别执行以下操作:
- 根据一个70多个hash组成的表,查找进程名结束进程。
- 根据一个约677的进程名称表,寻找并结束进程,这个动作会执行3次。
其中通过hash储存被结束进程名的,hash算法如下:
通过明文的进程名比对的,进程名如下:
5. 加密文件
开始文件加密过程。此时共启动了三个类加密流程,分别是:
A. 枚举磁盘A-Z,每个磁盘启动一个线程,递归加密文件。
B. 枚举网络资源,递归加密文件
C. 启动一个针对C盘的加密,等待3小时后开始执行
A. 对本地磁盘加密过程
首先读取并导入RSA的密钥
加密函数被调用了两次,第一次调用,参数6为TRUE,表示只加密2019年的文件(优先加密2019年的文件,也是新变种的一个特性),第二次调用时,加密全部年份的文件。
在文件加密前,会排除一些特定的文件名,以hash标记,约有34个,还会排除用户桌面(仅限Desktop),之后会单独排除勒索信息文档Cl0pReadMe.txt以及以下15个扩展名的文件
bat,cmd,ttf,lng,hlf,chm,msi,ini,ico,LNK,SYS,EXE,DLL,OCX,CL0P不进行加密
加密时会根据设备数进行一定运算后,来决定启用的线程数:
在完成当前加密之后,从资源中读取解码勒索信息文件,释放到当前目录,之后继续递归寻找下一层目录进行加密。
最后,留下的勒索信息文档如下:
B. 对网络磁盘加密过程
在枚举完成网络磁盘之后,导入公钥,开始加密文件,和加密本地磁盘类似,也区分了2019和非2019年的文件。
在文件加密前,同样会排除一些特定的文件名,以hash标记,约有34个,之后会单独排除勒索文档信息Cl0pReadMe.txt以及以下15个扩展名的文件
bat,cmd,ttf,lng,hlf,chm,msi,ini,ico,LNK,SYS,EXE,DLL,OCX,CL0P
在对文件进行加密时,会根据之前枚举到的资源数,经过一定计算来确定启动多少线程:
C. 单独启动的C盘加密过程
与前两种加密模式不同,这个模式下,在导入公钥后,程序会等到3小时后才会继续执行,而加密过程中,也不在对2019年的文件优先加密。从加密参数看,只对C盘文件进行加密:
之后的加密流程与前两种类似,不在累诉。
密钥、算法与文件结构
程序使用RSA(公钥长度1024)结合RC4(密钥长度177字节)加密文件,加密前会判断文件大小。如果小于1GB(1000000000Byte)的文件。加密文件头部1000000Byte,也就是不到1MB的内容,如果文件大于1GB(1000000000 Byte),加密文件头部10000000 Byte,也就是约10MB的内容。
下面是判断文件大小的过程,文件的读写操作是通过Mapping文件到内存中来实现的。(此处也是新变种的一个优化点,与之前版本不同)
1. 随机数生成
程序对每个被加密文件,都生成一个随机数做为文件加密密钥。该随机数长为117字节(该勒索病毒之前版本也是117字节的加密密钥,但生成方式不同):
首先程序会通过GetTickCount生成一个时间序数,并进行记录
如果这个数值发生了变动,就根据这个数值,来更新Tick数组的数据:
之后,根据Tick数组数据来计算产生一个DWORD的数值,在产生这个数值时Tick数组的内容也会发生更改。
之后,将产生的这个DWORD的数据,进行一些运算,得到一个0~256的数据
最后一步,根据产生的这个数据,在RandTable中取到对应的一个字节的数据,RandTable内容如下:
之后程序会有一个检测,如果产生的密钥,第1,2,3,4,6位都为0,那么会使用一个内置的密钥进行代替。
内置的密钥如下:
2. 加密算法
在产生密钥之后,首先根据RC4算法,对密钥进行初始化(之前版本使用的AES加密算法):
之后对数据进行加密:
3. 文件结构
在完成文件加密之后,程序会在文件结尾写入标记:Cl0p^_-,之后将文件加密密钥,通过之前导入的RSA公钥进行加密,RSA加密过程,调用的CSP的API:CryptEncrypt完成。加密之后的密钥文本,也被写入文件末尾。
至此,文件加密过程完成,最后通过MoveFileExW对文件进行重命名,添加扩展名:.Cl0p
被加密后的文件结构示意图:
被加密的文件结尾部分内容:
其它信息
1. 结束的进程列表
processlist.txt
(13.44 KB)
2. 留下的勒索信息文档
Cl0pReadMe.txt
(1.17 KB)
3. 病毒内嵌公钥
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCHnOovrJ0VD/RSJlV+8tRv7bvcQR6Lp+zI1wEUoSHAWR0VvwplDKAVK9bntcmPWmgOHnEDTJc0sO5+bonJarVRDrzJ+4HMnufPBJkEt3PwR88mSSK4/1UaUPnv6zDObrNwzpBB25pp3VVnkGU0avN17xJJOzH+R3dxH+WTzBaohQIDAQAB
-----END PUBLIC KEY-----
4. 公钥指数及模数信息
key长度 | 1024 | 模数 | 879CEA2FAC9D150FF45226557EF2D46FEDBBDC411E8BA7ECC8D70114A121C0591D15BF0A650CA0152BD6E7B5C98F5A680E1E71034C9734B0EE7
E6E89C96AB5510EBCC9FB81CC9EE7CF049904B773F047CF264922B8FF551A50F9EFEB30CE6EB370CE9041DB9A69DD55679065346AF375EF12493B
31FE4777711FE593CC16A885 | 指数 | 65537 (0x10001) |
|
|
|
|
评论
直达楼层