以僵尸网络进行投递的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个字节:
2.2.2、API函数动态获取
查看导入表,发现只有两个导入函数:
其余所有要使用的函数均采用动态获取,模块名和函数名均采用CRC32哈希算法:
2.3、进程操作
启动’vssadmin.exe‘删除卷影
2.4、执行ADS流
傀儡进程1在‘C:\Users\用户名\AppData\Roming目录下创建一个空文件,文件名为:‘5到10个随机字符‘,再给该文件创建一个备用流文件:bin,将自身复制到该备用流文件,并执行ADS流(即傀儡进程2)。
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公钥:
使用API函数 CryptAcquireContextW 创建密钥容器:
导入RSA公钥:
使用API函数 CryptGenKey 生成密钥,从参数可以看出,密钥算法为:AES_256:
导出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字节数据,否则全部读取。
预防措施
- 提高上网安全意识, 做好重要数据定期备份
- 及更新系统, 修补漏洞补丁
- 不使用弱口令账号密码
- 安装杀毒软件计时更新病毒库
- 安装防勒索软件, 防御未知病毒加密文件