CryptON勒索病毒分析

阅读量247301

|评论1

|

发布时间 : 2020-08-17 10:30:39

 

0x00 前言

前些天刚刚学完常见对称加密算法原理,故找来一勒索病毒练手。其中如有不当之处,望读者指正,笔者感激不尽。

 

0x01 样本分析

病毒使用到所有函数名称均加密存储,用以抵抗静态分析,其加密方式使用的是替换式密码,具体替换规则如下图所示:

图片1 替换式密码

知道替换规则之后,通过一脚本将病毒使用到的函数名称解密如下:

图片2 kernel32.dll

图片3 文件操作相关

图片4 wininet.dll

图片5 kernel32.dll & user32.dll

图片6 注册表操作相关

图片7 shell32.dll

图片8 ntdll.dll

图片9 mpr.dll

图片10 crypt.dll & advapi32.dll

图片11 诸多API

若某一函数地址获取失败,则直接调用ExitProcess退出当前进程:

图片12 退出当前进程


判断Country Code是否为以下四个国家:

图片13 判断国家

具体对应如下:

图片14 ISO Country Code

如果是这四个国家之一,同样是直接调用ExitProcess退出当前进程。


接下来将内存区域中如下字符串以0x00分割,并逐一复制到分配的堆块中:

图片15 字符串

其流程如下所示(部分函数没有截图):

图片16 复制到堆块


判断主机是否接入互联网:

图片17 InetIsOffline

检查当前用户是否是管理员组的成员:

图片18 IsUserAnAdmin

通过vssadmin删除卷影副本:

图片19 vssadmin

在调用ShellExecuteEx()之前由下列函数为其设置SHELLEXECUTEINFO结构中字段的值:

图片20 设置SHELLEXECUTEINFO结构字段值

之后通过bcdedit禁用自动修复:

图片21 bcdedit

图片22 bcdedit


将之前复制的字符串(如下所示)以;分割:

图片23 字符串

图片24 以;分割

创建名为LozhYNgbDQij5tYp的互斥对象:

图片25 创建互斥对象

创建0x32个线程(加密线程,此处先不作展开,详见下文):

图片26 创建线程

之后创建加密准备线程:

图片27 加密准备线程

首先获取主机名、用户名及临时目录路径:

图片28 GetEnvironmentVariable

获取卷信息:

图片29 GetVolumeInformation

将0xD6FDFBEF转换为十进制(3,606,969,327),用于后续生成用户标识:

图片30 转换为十进制

通过CRC32算法计算出用户标识:

图片31 CRC32

其后开始生成密钥:

图片32 生成密钥

共生成4组密钥,其大小如下所示:

图片33 4组密钥

于临时目录下创建一名为用户标识的文件:

图片34 CreateFile

根据用户标识生成加密文件扩展名:

图片35 生成扩展名

获取操作系统位数、版本:

图片36 获取信息

将如下内容拼接在一起,其形式是”report||用户标识||用户标识十六进制表示_密钥1_密钥2_密钥3_密钥4||ComputerName||版本||位数||语言”:

图片37 拼接内容

于勒索病毒目录下创建一名为temp000000.txt的文本文档,并将上述拼接内容写入文件:

图片38 创建文本文档

图片39 写入内容

接下来创建勒索文本并写入内容如下:

图片40 勒索文本

遍历网络资源:

图片41 遍历网络资源

将遍历到的文件夹与下列字符串逐一比较,避免加密重要文件夹:

图片42 指定目录

图片43 比较

遍历网络资源中的目录:

图片44 遍历目录

将勒索文本复制到每一文件目录下:

图片45 复制勒索文本

加密线程使用的加密算法首先是AES加密,其算法原理不再赘述(可参阅密码学基础:AES加密算法):

图片46 AES加密

根据其密钥扩展算法亦可识别:

图片47 密钥扩展

接下来将密文再次通过RC4算法进行加密:

图片48 RC4

 

0x02 参考链接

本文由ERFZE原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/213890

安全KER - 有思想的安全新媒体

分享到:微信
+10赞
收藏
ERFZE
分享到:微信

发表评论

Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全KER All Rights Reserved 京ICP备08010314号-66