GlobeImposter勒索软件详细分析报告 – 作者:江民安全实验室

近日勒索病毒GlobeImposter众多变种开始在国内进行传播,各个变种加密文件后修改的文件后缀名也各不相同,包括.crypted!,.doc,.dream,.TRUE,.CHAK等,其主要是通过垃圾邮件进行传播。

GlobeImposter家族首次出现的时间为2017年5月,在2017年11月也有过一次疫情爆发。本次截获的病毒样本加密文件后缀名为.doc,其真实有效荷载为2017年11月爆发的变种之一。江民杀毒软件在当时已经具备查杀能力,且查杀病毒名为Trojan.Purgen.ct,文件MD5值为:B47124F61A6CAE40691C8F5A69306757,但此次截获样本与11月查杀样本有所改变,其主要是利用NSIS(Nullsoft Scriptable Install System)技术进行变种,使得病毒文件在运行时才会解压尝试运行,利用释放的system.dll文件将包含恶意shellcode的二进制文件LGU映射到内存进行执行。

该shellcode进行7层自我解密,每一层均使用不同的解密key,最终执行真实代码将GlobeImposter在内存中采用AES256算法进行解密,解密完成后又利用了Process Hollowing手法将GlobeImposter的恶意代码嵌入创建的合法进程中,且为了逃避安全类软件对Process Hollowing技术的检测,使用了过去Rootkit常用的SSDT Hook的手法。

在经过一系列的初始化后便执行GlobeImposter的真实代码开始加密文件并提示用户进行付费解密操作。感染该勒索病毒后,全盘除了特定的系统使用的文件夹之外的所有文件均会被加密,系统卷影副本会被删除,用户系统将无法正常工作,用户需及时安装杀毒软件预防此类攻击,江民杀毒能及时有效查杀此类病毒。

样本详细分析报告:

检查病毒文件发现是由NSIS(Nullsoft Scriptable Install System)制作的程序,一般采用这种技术的恶意软件会在运行时会解压真正的恶意程序并加载至内存运行。

 GlobeImposter勒索软件详细分析报告

图1 查看PE文件信息

在系统%temp%目录下创建名称随机,后缀名为.tmp的二进制文件。

 GlobeImposter勒索软件详细分析报告

图2 在%temp%目录下释放.tmp二进制文件

在系统%temp%目录下创建与上一步骤生成文件的同名的目录,并在其文件夹下释放名为system.dll的PE文件。

 GlobeImposter勒索软件详细分析报告

图3 在%temp%\***.tmp\目录下释放System.dll文件

在系统%temp%目录下释放名为LGU的二进制文件。

 GlobeImposter勒索软件详细分析报告

图4 在%temp%目录下释放加密二进制文件LGU

加载释放的System.dll文件到内存空间,该dll文件具备导出函数Call,用于执行后续的关键函数。

 GlobeImposter勒索软件详细分析报告

图5.1 加载释放的System.dll文件到当前进程空间

GlobeImposter勒索软件详细分析报告 

图5.2 System.dll文件导出关键函数Call

使用System.dll导出的Call函数调用关键函数,函数名称及其相关参数使用wsprintf函数拼接完成,最终调用NtCreateSection,NtMapViewOfSection和ReadFile这三个函数完成了将释放的二进制文件LGU的内容映射到内存的任务。

 GlobeImposter勒索软件详细分析报告

 图6.1 System::Call调用CreateFile函数打开LGU二进制文件

 GlobeImposter勒索软件详细分析报告

 图6.2 System::Call调用wsprintf拼接NtCreateSection函数名及其参数

GlobeImposter勒索软件详细分析报告

 图6.3 System::Call调用ZwCreateSection函数

GlobeImposter勒索软件详细分析报告

图6.4 System::Call调用wsprintf拼接NtMapViewOfSection函数及其参数

GlobeImposter勒索软件详细分析报告 

图6.5 System::Call调用ZwMapViewOfSection函数

GlobeImposter勒索软件详细分析报告

图6.6 System::Call调用ReadFile将LGU二进制读取到内存中

在释放的LGU文件中可以找到一段shellcode,通过这段解密代码寻找到真正恶意shellcode的开端,以0xDEADBEEF为标志进行查找,查找到标志后从0x00到0xFFFFFFFF范围之间查找解密key,该解密key与待解密的shellcode头四字节异或后与shellcode标志(0xDEAD8EEF)处偏移0x8的值相等,即key^0x0250BD34=0xEC8B5355,从而计算出解密shellcode的key=0xEEDBEE61,此后使用这个key解密后续shellcode,共计0x24CF(shellcode标志偏移0x4处的值)字节大小。

 GlobeImposter勒索软件详细分析报告

 图7.1 LGU文件中shellcode开头

GlobeImposter勒索软件详细分析报告

 图7.2 LGU文件中shellcode开头解密逻辑

解密shellcode代码后便使用jmp指令跳转到解密代码的开端开始执行其解密后的代码,由于解密是采用简单的异或进行,因此可以写个demo解密shellcode。

GlobeImposter勒索软件详细分析报告 

图8 用于解密shellcode的demo

Dump加密的二进制shellcode使用解密的key解密代码可以发现解密后的代码头部和之前解密shellcode的那段存根代码几乎是一样的,也是通过标志0xDEADBEEF查找下一段shellcode的开头,然后再次利用新的key解密后续的shellcode,实现恶意代码的多重打包,从而逃过杀毒软件的查杀,通过新的数字标志可以计算出第二次解密的key为0x551C1317,解密的shellcode长度为0x2458字节,使用之前的方法重复进行解密操作。后面将经过多次重复的解密操作,依次的解密key为0x4A889058,0xE5186EEE,0x5F628A33,0xE23FD5C3,0x7C4143F。

 GlobeImposter勒索软件详细分析报告

 图9.1 第一层解密后发现shellcode首部与之前相同

 GlobeImposter勒索软件详细分析报告

 图9.2 第二层待解密的shellcode开头

GlobeImposter勒索软件详细分析报告

图9.3 第三层待解密的shellcode开头

GlobeImposter勒索软件详细分析报告

图9.4 第四层待解密的shellcode开头

GlobeImposter勒索软件详细分析报告

图9.5 第五层待解密的shellcode开头

GlobeImposter勒索软件详细分析报告

图9.6 第六层待解密的shellcode开头

GlobeImposter勒索软件详细分析报告

 图9.7 第七层待解密的shellcode开头

 最终解密真实意图的代码,解密后的代码使用VirtualAlloc在内存中分配一个空间并写入加密过后的GlobeImposter文件,然后使用ASE256算法对加密的GlobeImposter文件进行解密操作,解密后可以发现在分配的内存中有个完整的PE文件,这就是加密文件的主体,文件MD5值:B47124F61A6CAE40691C8F5A69306757,也即是之前2017年11月开始传播的病毒样本,江民杀毒软件报的病毒名为Trojan.Purgen.ct。 

 GlobeImposter勒索软件详细分析报告

 图10.1 在内存中使用AES256解密真实荷载GlobeImposter

GlobeImposter勒索软件详细分析报告

图10.2 内存中解密后的GlobeImposter

GlobeImposter勒索软件详细分析报告

图10.3 再内存中解密的PE文件信息

调用CreateProcess函数创建与当前同名的进程,参数fdwCreate被设置为CREATE_NO_WINDOW|CREATE_SUSPENDED,就这样创建了一个同名且处于挂起状态的进程,之后尝试获取当前线程上下文并读取远程进程内存空间检查是否运行环境是否正常。

 GlobeImposter勒索软件详细分析报告

图11.1 创建同名挂起状态的进程 

GlobeImposter勒索软件详细分析报告

图11.2 创建进程成功

使用IsWow64Process函数判断当前系统版本,并依照系统版本后续进行不同的系统调用方式,32bit系统将直接调用sysenter指令完成函数调用,64bit系统将调用syscall完成函数调用,该样本通过自定义hash在Ntdll.dll模块中搜索所需要调用的导出函数,然后将其调用编号存入eax寄存器,最终完成函数调用,这是过去Rookit病毒常用来做SSDT Hook操作的方法。

GlobeImposter勒索软件详细分析报告 

图12.1 判断当前系统为32位还是64位 

GlobeImposter勒索软件详细分析报告

图12.2 32位系统直接使用sysenter进行系统调用

所有用于Process hollowing操作的可疑函数(NtUnmapViewOfSection,NtCreateSection,NtMapViewOfSection,NtWriteVirtualMemory和NtResumeThread)均通过上述方式直接调用syscall/sysenter完成操作,从而使得任意用户态的HOOK和调试函数断点都是无用的,使得系统很难监测到有Process hollowing的恶意行为。

GlobeImposter勒索软件详细分析报告 

图13 直接使用syscall/sysenter执行可疑函数

待这段shellcode代码完成了Process hollowing操作后便会调用看似正常的进程内部便开始执行GlobeImposter勒索软件的代码,开始执行遍历磁盘加密文件操作,此次实际进行加密文件操作的文件是2017年11月开始传播的GlobeImposter变种之一,江民杀毒软件报毒名称为Trojan.Purgen.ct,勒索软件的逻辑比较简单,基本分为两个步骤:初始化和加密文件。

初始化过程中,检查是否具有%appdata%环境变量,如果存在则拷贝当前运行的病毒文件至%appdata%目录下,并设置注册表实现开机启动,在相应的注册表下新建BrowserUpdateCheck子键并设置值为拷贝到%appdata%目录下的病毒文件路径从而使得主机每次开机便会自动运行勒索软件。

GlobeImposter勒索软件详细分析报告 

图15.1 拷贝自身到指定路径

GlobeImposter勒索软件详细分析报告 

图15.2 设置注册表项实现开机自启动

设置好开机启动后便生成RSA私钥并使用硬编码公钥加密,完成操作后将密钥信息以文件形式保存在%public%或者%ALLUSERSPROFILE%目录下,保存格式示例如下图。

 GlobeImposter勒索软件详细分析报告

图16.1 生成私钥并用硬编码公钥加密

GlobeImposter勒索软件详细分析报告

图16.2 保存的密钥和机器码信息

遍历当前进程,查找包含某些字符串的进程并结束,防止因为这些程序正在运行而导致加密文件过程出错,这些字符串以明文形式编码在PE文件中。

 GlobeImposter勒索软件详细分析报告

图17.1 遍历进程结束指定进程

GlobeImposter勒索软件详细分析报告

 图17.2 检查的进程名中含有如下字符串将被结束

遍历磁盘文件,排除样本中不加密的文件列表后使用随机生成的公钥加密所有文件,并将之前生成的唯一标识的机器码写入文件末尾。

GlobeImposter勒索软件详细分析报告

图18.1 在加密文件内容末尾加上机器码ASCII值

GlobeImposter勒索软件详细分析报告

图18.2 被加密的文件将添加后缀.doc

18_1.png 

 图18.2 加密文件的代码 

加密文件操作完成后会删除卷影副本,防止用户自行恢复文件,同时删除远程桌面相关配置,防止用户通过远程获取安全厂商的协助。

 GlobeImposter勒索软件详细分析报告

图19 删除卷影副本和远程桌面配置

加密后在每个文件夹下生成名为Read___ME.html的网页文件,用于引导用户进行付费解密操作。

GlobeImposter勒索软件详细分析报告 

图20 提示用户进行付费解密操作

小结

GlobeImposter是一个变种繁多的勒索病毒家族,用户在感染该家族样本后文件会被恶意加密,由于其加密强度较高通常没有很好的还原文件的方法,因此建议用户保持良好的上网习惯,安装杀毒软件(如江民杀毒软件等)预防此类型病毒的感染。

*本文作者:江民安全实验室,转载请注明来自 FreeBuf.COM。

来源:freebuf.com 2018-03-05 14:00:03 by: 江民安全实验室

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论