Potato 发表于 2021-5-26 16:09

GandCrab勒索病毒样本分析

一、        样本信息

样本名:OuuoE.exe
MD5:1802fb5ebe7dc8f93fb8c32e6a6ecfc9
SHA1:5dbbcb795be637d63b2667b12fa117f1d73943aa
二、        恶意行为
    样本运行之后释放一个exe到内存,并自身装载运行。恶意行为由放出的exe文件完成:
    获取当前机器的信息,根据磁盘的卷序列号生成ransom_id,各种信息拼接之后进行rc4加密,并base64编码生成PC DATA。收集过程中,病毒会检测当前系统使用的语言,如果检测到指定的语言,退出执行。
    检测是否由互斥进程,有即退出。完成后关闭指定进程,防止在加密文件时受限。之后生成一对RSA密钥对,再生成32字节的随机密钥和8字节的随机初始向量,以salsa20算法加密私钥,之后使用程序自带的黑客RSA私钥加密随机密钥和初始向量,最终获取所有密钥处理之后的数据,base64编码之后即为GanCrab Key。
    每加密一个文件时,重新生成用于salsa20加密的随机密钥和随机IV,利用在用户机器上生成的RSA公钥加密密钥和IV,而密钥和IV加密文件。最后被加密的KEY和IV置于完成被加密的文件数据后面,再在文件尾部8字节设置一个“已被加密”标志数值0x93892918和0x38281。
结束文件加密之后,创建一个bmp图片,写入勒索提示信息,并设置为桌面。
三、        代码分析

OuuoE.exe
    隐藏Console。

    将处理过的代码以字节为单位放入栈中,然后解码。

    修改解码代码所在栈空间的属性为可运行,可读写;然后压入部分字符串作为参数,调用解码出来的shellcode。




    Shellcode将会释放一个exe文件到新分配的内存中,然后创建一个新进程执行释放的exe文件。


1.exe
    程序执行后会记录系统相关信息,包括pc_user(当前登录用户名)、pc_name(计算机名)、pc_group(用户组)、av(检测到的杀软相关进程)、pc_lang(系统语言)、pc_keyb(是否检测到俄罗斯语言)、os_major(操作系统版本)、os_bit(操作系统位数)、ransom_id(勒索id)、hdd(硬盘的存储情况)、ip。
    Ransom_id是16位16进制数,计算方式是:获取的C盘卷序列号的有符号整数值和当前系统的处理器名字字符串拼接之后在初值为0x29a条件下计算拼接得到的unicode字符串的CRC32值,再与之前的卷序列号16进制值连接成32字节的16进制数

    接着病毒会将收集的信息连接,然后使用密钥“.oj=294~!z3)9n-1,8^)o((q22)lb$”对信息的UNICODE串进行rc4的加密。

    然后程序会检测系统的语言,首先检测注册表输入法项中是否有值“419”,也就是Russain俄罗斯。

    如果匹配到语言列表中的语言代码,删除病毒程序结束进程;否则,获取本地用户语言和系统语言,与指定的语言代码进行匹配。
    然后检查是否有互斥量“AversSucksForever”,如果已存在相同进程,同样跳转,删除原病毒文件退出进程。

    结束指定的进程,应该是因为这些进程可能正在使用某些文件,避免加密失败。

    调用Windows CSP生成密钥并递归遍历加密磁盘中的指定类型文件。

    生成5-10个随机字母最为此次加密的文件后缀和勒索信息名前缀。之后会解密一个2048位的黑客加密之后写入病毒的RSA公钥,解密过程是通过指定初始变量和密钥的salsa20算法对程序携带的已加密文本解密获取。
Salsa20作为输入的64字节字符串,包含密钥和初始变量IV:
expa@hashbreaker Dannd 3@hashbr.........2-byiel J. Bernstei.te k。

    解出的RSA公钥:

    设置临界资源,准备开始加密系统中的文件。先使用Windows CSP在用户机器上生成一对1024位的RSA公私钥。

    生成用户机器上的公私钥对后,申请空间buff,写入buff首部四个字节为私钥的大小;然后生成32字节的随机密钥和8字节的随机初始向量,作为salsa20的输入对私钥进行加密,被加密的用户私钥存储到buff偏移0x516处。
    然后导入之前解出的RSA公钥,加密随机密钥为256字节大小存放到偏移4处;同样加密随机初始向量为256字节大小存放到偏移0x104处。

    最终buff的大小为0x698字节,将buff中的加密密钥信息和之前所收集的系统信息分别进行base64编码,各自作为GandCrab Key和PC Data部分内容写入勒索信息文件中。


    勒索病毒程序创建一个线程遍历枚举机器上的网络资源,并进行加密。

    并且会寻找当前机器上可被加密的磁盘,包括可移动磁盘、软盘、本地磁盘、网络磁盘等。对每一个寻找到的可被加密的磁盘,创建线程开始遍历磁盘下的所有目录和其子目录中的文件,使用密钥进行加密,并在被加密的目录下创建勒索信息。

    在加密时,程序会判断文件的后缀名,当文件后缀名为指定避过的文件后缀名时不进行加密。

不被加密的文件后缀包括:
.ani、.cab、.cpl、.cur、.diagcab、.diagpkg、.dll、.drv、.lock、.hlp、.ldf、.icl、.icns、.ico、.ics、.lnk、.key、.idx、.mod、.mpa、.msc、.msp、.msstyles、.msu、.nomedia、.ocx、.prf、.rom、.rtp、.scr、.shs、.spl、.sys、.theme、.themepack、.exe、.bat、.cmd、.gandcrab、.KRAB、.CRAB、.zerophage_i_like_your_pictures

    同时还有部分被避过加密的文件名通过执行时rc4解密获取,以避过检测。这些文件包括desktop.ini、autorun.inf、ntuser.dat、iconcache.db、bootsect.bak、boot.ini、ntuser.dat.log、thumbs.db、ntldr、NTDETECT.COM、Bootfont.bin等系统文件,以及自身产生的勒索信息文件,-MANUAL.txt后缀。
    加密时,程序首先从文件的尾部读取540字节的数据。判断读取的数据偏移532处数值和536处的数值是否为0x93892918和0x38281;如果是,说明程序被加密过,退出加密。
    如果文件未被加密,则生成32字节的随机密钥和8字节的随机初始向量,分别放入读取的数据空间的首部和字节偏移256处。并且使用之前生成的用户公钥进行加密,加密结果为256字节,放回原位,总共512字节;余下的部分,在偏移字节528处,设置数值0x100000,作为之后每次读取文件进行salsa20加密的大小,以及偏移532和536处的被加密标记;其余部分置0。
    而如果文件小于540字节,不进行加密。

    之后文件指针移至首部,每次读取1M数据,使用生成的随机密钥和随机初始向量进行加密。

    最后指针移至尾部,将被加密的540字节数据写入,这540字节中包括被加密的用于当前文件加密的密钥和初始向量,以及文件已被加密的标志。

    所有加密完成之后,释放临界资源。下一步是删除卷影备份文件,使被加密文件无法恢复。

    创建一个bmp图片,作为桌面背景;最后遍历指定的域名,根据当前时间随机拼接出有效的URL,访问并建立连接,然后将勒索信息中的PC DATA上传。





页: [1]
查看完整版本: GandCrab勒索病毒样本分析