以僵尸网络进行投递的BitPaymer勒索病毒

2019-11-20   

威胁等级:★★★★
BitPaymer勒索病毒针对企业用户,以Dridex僵尸网络进行投递,利用系统system32目录下的服务进程执行加密勒索,被加密文件后缀名为“.0riz0n”,同时该病毒采用AES_256加密算法加密文件(.exe和.dll后缀名文件除外),RSA公钥加密密钥,在没有私钥的情况下,暂时不能解密文件。

背景介绍

BitPaymer勒索病毒针对企业用户,以Dridex僵尸网络进行投递,利用系统system32目录下的服务进程执行加密勒索,被加密文件后缀名为“.0riz0n”,同时该病毒采用AES_256加密算法加密文件(.exe和.dll后缀名文件除外),RSA公钥加密密钥,在没有私钥的情况下,暂时不能解密文件。

图:勒索信结构

病毒MD5:34441B7389336A401F4A9ACB79172E40

威胁等级:★★★★

病毒演示视频

技术分析

1.样本进程

将样本进程内存替换为傀儡进程内存

图:内存替换

跳转到OEP处执行傀儡进程

图:内存执行傀儡进程

2. 傀儡进程

傀儡进程总共被创建3次:

第1次:由样本进程启动傀儡进程1,通过内存加载

第2次:由傀儡进程1启动傀儡进程2,通过将自身复制到备用流文件‘C:\Users\用户名\AppData\Roming\5到10个随机字符:bin’中并启动文件

第3次:由傀儡进程2启动傀儡进程3,在‘C:\system32’目录下找一个可控的空闲服务进程,保存原服务进程到备用流文件,将自身复制到服务进程,通过启动服务来启动傀儡进程3

2.1 虚拟机检测

首先查找指定文件‘C:\\aaa_TouchMeNot_.txt’是否存在, 判断当前运行环境是否在Windows Defender虚拟机中 ,从而绕过Windows Defender的检测 :

图:检测虚拟机

2.2 防止静态分析

2.2.1、字符串加密存储

病毒作者为了防止静态分析程序,将所有用到字符串采用RC4算法加密,密钥被逆序后和加密数据一起存放在.rdata段,密钥长度为40个字节:

图:.rdata段被加密数据
图:RC4解密数据
图:解密出的字符串

2.2.2、API函数动态获取

查看导入表,发现只有两个导入函数:

图:导入表信息

其余所有要使用的函数均采用动态获取,模块名和函数名均采用CRC32哈希算法:

图:动态获取API
图:CRC32算法
图:Hash对比

2.3、进程操作

启动’vssadmin.exe‘删除卷影

图:删除卷影

2.4、执行ADS流

傀儡进程1在‘C:\Users\用户名\AppData\Roming目录下创建一个空文件,文件名为:‘5到10个随机字符‘,再给该文件创建一个备用流文件:bin,将自身复制到该备用流文件,并执行ADS流(即傀儡进程2)。

图:创建ADS流
图:执行ADS流

2.5、启动服务

傀儡进程2通过遍历注册表,选择一个可以控制的C:\windows\system32目录下的服务进程,将此进程文件保存在其ADC流文件’原文件:0’,并将自身拷贝到服务进程文件中,并启动该服务。

枚举服务,选择一个可控的空闲服务作为傀儡服务进程:

图:枚举查找服务

拷贝自身到该服务文件,并启动服务:

图:启动服务

删除原始病毒文件

图:删除原始样本

2.6、文件操作

遍历磁盘

图:遍历磁盘

遍历文件时跳过以下目录:'C:\\programData'、'C:\\Windows'、'C:\\Usera\\用户名\\AppData\\Local\Temp'、'C:\\Usera\\用户名\\AppData\\Roaming'

图:选择目录

选择加密文件时跳过以下后缀名:‘.0riz0n’、‘.0riz0n_readme’、‘.dll’、‘.exe’

图:选择文件

加密文件时,会加密文件的所有数据,并且文件修改时间保持不变。

在读取文件前首先将文件大小与0xA00000做取模运算,其运算结果作为循环次数,每次循环时判断剩余文件大小是否大于等于0xA00000字节,大于时就读取0xA00000,否则就读取实际大小。

图:加密文件

每个被加密文件下会生成一个勒索信息文件,文件名和被加密文件一直,后缀名为:‘.0riz0n_readme’,每个勒索文件信息包含三个部分:

第1部分:勒索信基本信息

第2部分:TAIL:文件数据被AES加密后的padding数值,然后转换成Base64编码

第3部分:KEY:被加密密钥——AES密钥被RSA公钥加密,然后转换成Base64编码

图:勒索信息

2.7、加密算法分析

文件加密采用AES—256算法加密文件,加密密钥通过RSA公钥加密,RSA公钥采用RC4算法加密,大小为0x39C个字节存放在.rdata数据段,RC4密钥以逆序方式存放在被加密数据头部,大小为40个字节。

图:RC4密钥和加密的RSA公钥

RC4算法解密:

图:RC4算法解密

解密后的RSA公钥:

图:RSA公钥

使用API函数 CryptAcquireContextW 创建密钥容器:

图:创建RSA_AES密钥容器

导入RSA公钥:

图:导入RSA公钥

使用API函数 CryptGenKey 生成密钥,从参数可以看出,密钥算法为:AES_256:

图:生成AES密钥

导出AES_256密钥时,使用RSA公钥加密密钥:

图:导出密钥

使用API函数 CryptEncrypt 加密文件:

图:加密文件

3.解密思路

在有RSA私钥的情况下,可以按照以下顺序来解密文件:

第1步:读取要解密文件的‘..0riz0n_readme’的后缀名文件,获取被加密密钥和padding数据;

第2步:将获取的AES密钥和padding进行Base64编码转换;

第3步:用RSA私钥解密AES密钥;

第4步:通过AES_256加密算法解密文件:

4.1 获取文件大小,首先将文件大小与0xA00000做取模运算

4.2 根据取模结果作为循环次数,每次循环时判断剩余文件

大小与0xA00000,大于0xA00000字节数据时,读取0xA00000字节数据,否则全部读取。

预防措施

  1. 提高上网安全意识, 做好重要数据定期备份
  2. 及更新系统, 修补漏洞补丁
  3. 不使用弱口令账号密码
  4. 安装杀毒软件计时更新病毒库
  5. 安装防勒索软件, 防御未知病毒加密文件
编辑:瑞瑞 阅读: