首页
社区
课程
招聘
[原创]GandCrabV2.0勒索病毒分析
发表于: 2022-4-7 08:57 7616

[原创]GandCrabV2.0勒索病毒分析

2022-4-7 08:57
7616

首先对原本样本hmieuy.exe查壳,没有发现壳。

再使用pe工具查看原始样本:

发现EnumResourceNamesA、FindFirstFIleA、MoveFileW、GetProcAddress等函数,同时原本资源节中还含有内容;初步猜测样本可能会搜索资源节中数据并进行某种操作。

IDA打开原始样本hmieuy.exe分析,在wWinMain函数函数入口发现代码混淆:

寻找关键点,发现分配堆空间函数GlobalAlloc函数的调用,并且分配的起始地址为StarAddress:

向下分析发现样本使用EnumResourceNamesA函数来枚举hmieuy.exe中的资源并将资源节中的内容,也就是shellcode复制到刚刚申请的堆空间中:

继续向下分析,发现在复制完shellcode之后,样本通过使用VirtualProtect函数将申请的堆空间提升为可执行状态;并且在调用shellcode之前(StarAddress())调用了sub_401014函数:

跟进sub_401014函数分析发现了大量的逻辑指令,推测该函数为解密函数,将复制到堆空间的shellcode进行解密:

在IDA中确定刚才分析的关键函数的地址,在OD中下断动态调试分析:

在调用sub_401014解密函数之前,shellcode已经被复制到堆空间中:

调用解密函数之后:

将解密后的shellcode dump下来重命名为shellcode.txt,dump所需大小在pe工具已知为000181B8。

Shellcode存在部分反调试技术,但是通过Windows Shellcode开发还是可以推测恶意代码行为。IDA中静态分析shellcode.txt:

跟进 sub_2F449A函数分析:

该函数同之前写过的Windows Shellcode开发[3]几乎一致:通过PTE结构下的关键字段定位kernel32.dll,根据PE结构遍历kernel32.dll导出表获取GetProcAddress、LoadLibrary函数。 

跟进sub_2F3C9C函数分析,可知sub_2F3C9C函数获取其他API函数的地址:

在获取其他API结束后,再次申请空间并将数据解密:

将解密后的PE文件加载到内存中:

对于加密后的PE文件,不需要再像之前一样获取kernel32.dll基址及API地址,PE文件中包含导入表,只需修复即可:

OD中查看解密后的PE文件部分:

将此时的PE文件数据dump下名为为PE1.exe。在上面的过程中PE文件并没有在磁盘“落地”,可以避免杀毒软件的文件检测。

反射式DLL注入不同于普通的DLL注入关键点是:不再使用LoadLibrary函数完成DLL装载,而是通过使用ReflectiveLoader来实现装载自身。如此一来便避免了文件“落地”,同时它没有通过LoadLibrary等API来完成DLL的装载,DLL并没有在操作系统中”注册”自己,因此更容易通过杀软的行为检测。https://bbs.pediy.com/thread-224143.htm,这里描述了反射式DLL注入的原理和实现。

分析PE1.exe发现病毒通过ReflectiveLoader函数装载解密出的恶意代码,将含有恶意功能的dll数据到自身进程,实现dll不落地即可执行其功能躲避杀软查杀。

经过上面的分析,病毒文件在加载并执行shellcode是会使用VirtualProtect函数来改变页面执行状态。所在在OD中分析PE1.exe时在VirtualProtect函数处下断分析,可知在0x0040114c对分配的内存空间(0x004120c0处为起始地址)执行权限进行修改;将此时的内存dump下来命名为PE2.dll,在0x00401156处PE1.exe释放PE2.dll:

在shellcode分析中,原始样本在将shellcode加载到内存后还存在一个解密过程;这里也是一样,我们已知分配的内存起始地址为0x004120c0,并且该区域内存放的是一个PE(dll)文件,OD中在0x004120c0处设置硬件写入断点后重新运行查找解密DLL的部分,发现下图中选中部分即为解密DLL部分:

随后进行查找ReflectiveLoader函数、修改内存保护属性为可读可写可执行。之后即进行dll文件的IAT修复、重定位等反射式注入操作。

分析至此也就到了病毒的主体部分:毒螃蟹自身。

病毒主要动作可分为三个部分:初始化部分、网络部分和文件加密部分。

在DllEntryPoint中创建一个新线程来执行代码,主线程会挂起:

新线程起始地址为函数sub_10004B20,跟进sub_10004B20函数(新线程)分析: 

 (1) GetInfo_CreateMutex部分: 

在GetInfo_CreateMutex函数中获取系统信息,如:主机名、用户名、处理器类型、IP地址和系统语言等

随后通过系统信息来命名创建互斥体,若互斥体名存在则结束进程,防止多开:

之后病毒创建线程,起始地址为Find_Antivirus,跟进该函数分析。

(2) Find_Antivirus部分:

病毒首先单独寻找kl1.sys驱动,对于kl1.sys谷歌的描述:

正版kl1.sys文件是Kaspersky Lab的Kaspersky Anti-Virus的软件组件。Kaspersky Antivirus 的网络驱动程序,此文件允许您的操作系统与网络硬件进行通信,并使防病毒软件能够监控恶意软件的流量。Kaspersky Antivirus 最初于 2006 年发布,因其在检测和消除间谍软件、病毒和其他恶意程序方面的成功率而赢得了无数奖项和赞誉。

所以可知病毒这是在查找杀毒软件。

除了卡巴斯基驱动,病毒还会寻找其他杀软驱动:

 检测杀软之后,病毒将自身释放到系统目录并设置开机自启动:

(3) Enum_TerminateEXE部分:

由于是勒索软件,需要将需加密的程序结束,以防文件被占用无法加密,跟进Enum_TerminateEXE函数:

可知病毒匹配并终止图1中进程以便加密。 

(4) CSP_Generate_RSA部分:

CSP,全名“加密服务提供者(Cryptographic Service Provider)”, 是微软定义的一套密码服务API,主要存在于Advapi32.dll中,利用CSP可以非常方便的实现AES、RSA、MD5、SHA1等常用加密算法。

病毒使用了CSP容器来进行加解密,主要分为以下几个部分:

1. 创建CSP容器

连接CSP,获得指定CSP的密钥容器的句柄:

2. 生成密钥


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2022-4-7 08:57 被Sin hx编辑 ,原因:
收藏
免费 2
支持
分享
最新回复 (2)
雪    币: 29182
活跃值: (63621)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
2
很多图片不见了,文章是CSDN复制过来的?
2022-4-7 20:15
0
雪    币: 421
活跃值: (111)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我拍拍,跟csdn也写了一版
2022-4-7 20:27
0
游客
登录 | 注册 方可回帖
返回
//