GandCrab v2.0 勒索病毒分析
1. 原始样本分析
首先对原本样本hmieuy.exe查壳,没有发现壳。
再使用pe工具查看原始样本:
发现EnumResourceNamesA、FindFirstFIleA、MoveFileW、GetProcAddress等函数,同时原本资源节中还含有内容;初步猜测样本可能会搜索资源节中数据并进行某种操作。
1.1 代码分析
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。
2. Shellcode分析
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文件并没有在磁盘“落地”,可以避免杀毒软件的文件检测。
3. 反射式DLL注入分析
反射式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修复、重定位等反射式注入操作。
4. PE2.dll分析
分析至此也就到了病毒的主体部分:毒螃蟹自身。
病毒主要动作可分为三个部分:初始化部分、网络部分和文件加密部分。
4.1 初始化部分
在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. 生成密钥
生成密钥有两种方式,CryptGenKey(生成随机密钥)和CryptImportKey(导入密钥),病毒使用了CryptGenKey方式。
3. 导出密钥
OD中跟踪查看导出的公钥数据:
OD中跟踪查看导出的私钥数据:
初始化部分分析至此,接下来分析网络部分。
4.2 网络部分
(1) 遍历杀软进程
填充勒索信息:
(2) 生成请求包字符串
病毒检查杀软后,会将之前生成的RSA公私钥通过CryptBinaryToStringA转换为base64编码,之后将编码结果加入到要发送的GET请求字符串中:
OD中跟踪查看密钥加密后的数据:
病毒会将搜索到的各种系统信息和公私钥信息整合在一起,加上协议包头部等信息发送到服务器:
准备完成后伪装成火狐浏览器进行网络链接:
(3) 通过管道创建nslookup.exe子进程
管道通信:
管道是一种用于在进程间共享数据的机制,其实质是一段共享内存,病毒利用了管道进行父子进程的通信,这样子进程就可以直接影响父进程内存。
为实现父子进程间通信,需要对子进程的管道进行重定向: 创建子进程函数 CreateProcess中有一个参数STARUIINFO,默认情况下子进程的输入输出管道是标准输入输出流。
OD中查看CreateProcessW的lpCommandLine参数:
nslookup politiaromana.bit ns1.virmach.ru;从su后缀猜测为俄罗斯黑客。
(4) HTTP协议发送信息
信息发送是通过HTTP协议进行的:
如果出现网络连接错误或者服务器异常,则代码会进入循环,直到找到可用的服务器为止;然后重新查询客户端IP,再次运行nslookup,解析IP地址。
0x10004C3F处判断HTTP请求检查是否成功,只有成功时才会跳出右侧循环。
4.3 加密部分
已知病毒使用了RSA算法,但病毒加密前还会对特殊文件、文件路径和后缀进行过滤处理。
(1) 创建加密线程
过滤磁盘,只对固定磁盘和网络磁盘加密,且每个磁盘创建一个线程:
0 DRIVE_UNKNOWN 未知的磁盘类型
1 DRIVE_NO_ROOT_DIR 说明lpRootPathName是无效的
2 DRIVE_REMOVABLE 可移动磁盘
3 DRIVE_FIXED 固定磁盘
4 DRIVE_REMOTE 网络磁盘
5DRIVE_CDROM 光驱
6 DRIVE_RAMDISK 为RAM
(2) 过滤文件和路径
如果病毒处于以下文件路径时,会过滤并跳过,防止关键目录被加密系统无法运行:
关键目录:
ProgramData
IETldCache
Boot
Program Files
Tor Browser(洋葱浏览器)
Ransomware
All Users
Local Settings
Windows
其它系统特殊文件夹(SHGetSpecialFolderPathW查找,如C:\Program Files)跳过指定文件:
.sql
desktop.ini
autorun.inf
ntuser.dat
iconcache.db
bootsect.bak
boot.ini
ntuser.dat .log
thumbs.db
GDCB-DECRYPT.txt
(3) 文件加密分析
CSP加密基本函数:
1. CryptImportKey将密钥从BLOB转换到CSP中
2. CryptGetKeyParam获取密钥的一些参数
3. CryptEncrypt加密文件
5 总结
这是我分析的第二个病毒样本,还是花了一段时间的。对于自己的分析下来之后做一些总结:
1. 样本在分析时候,尤其是原始样本分析时带出表和代码中的API函数很少,以此怀疑会释放shellcode或PE文件;
2. 抓住代码执行流程,不要过于抠细节,知道莫个函数的功能就可;
3. 内存中释放的文件要及时dump下来。
GandCrab v2.0 勒索病毒分析相关推荐
- WannaCry勒索病毒分析 **下**
WannaCry勒索病毒分析 下 在WannaCry.exe的分析实战 上 里面我已经拿到了WannaCry.exe在资源文件中的PE文件,并且给它提了个名WannaCry_PE.exe文件.但在Wa ...
- WannaCry勒索病毒分析过程**中**
WannaCry勒索病毒分析 中 为了分析WannaCry.exe有着什么样的行为,以及它是如何释放WannaCry_PE.exe程序的,在IDA中打开WannaCry.exe 我们可以发现它的头是W ...
- 病毒分析之撒旦(Satan)勒索病毒分析解密(AES256 ECB算法)
病毒分析之撒旦(Satan)勒索病毒分析解密(AES256 ECB算法) 0x0病毒概况 撒旦勒索病毒主要是针对企业服务器用户进行感染加密其服务器上的文件并勒索用户的一种病毒. 撒旦病毒通过大量漏洞利 ...
- WannaCry勒索病毒分析过程**上**
WannaCry勒索如何分析实战 上 我的第一篇博客文章 作为一名大四的网络工程应届毕业生,发自内心的感谢网上的每一位博主,感谢网上的每一位大佬愿意分享自己的经验.我才可以在网上学到如此多的知识.我在 ...
- WannaCry勒索病毒分析过程**中**(注)
WannaCry勒索病毒分析 中(注) 我犯了一个很大的错误,就是在做分析的时候没有确定函数的作用,在分析过程中有捉不到重点的毛病. 在WannaCry.exe的分析中,它在判断打开它的URL后,如果 ...
- 如何恢复GANDCRAB V5.2勒索病毒文件http://gandcrabmfe6mnef.oni
GANDCRAB V5.2勒索病毒是GANDCRAB V5.1的升级版本,由于5.1版本的泄露问题,GANDCRAB V5.2版本更有危害性,解密更复杂. 深圳某客户中了后缀是GANDCRAB V5. ...
- 流行勒索病毒分析总结
一.概述 信息安全 (Information Security) ,意为保护信息及信息系统不受侵害.主要保护计算机硬件.软件.数据不因偶然的或恶意的原因而遭到破坏.更改.显露.从层面的概念来看,计算机 ...
- BadRabbit勒索病毒分析
目录 0x00 简介 0x01 样本概况 特征信息 0x02 样本行为 病毒危害 创建恶意文件 加密文件 注册表 端口通信 修改MBR 0x03 详细分析 0x00 简介 勒索病毒"Bad ...
- [系统安全] 二十六.WannaCry勒索病毒分析 (2)MS17-010漏洞利用及蠕虫解析
您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...
最新文章
- js、jquery相关的操作
- 一个C#读写Dxf的类库DXFLibrary
- rs232读取智能电表_三相电表怎么看度数 怎么计算总电量
- 日常撕逼:React和Vue到底谁更牛?
- Burpsuite Web渗透-扫描工具(中间攻击,渗透大牛都用来修改包和监视包)
- LeetCode28.实现strStr() JavaScript
- 解决 vs2003 无法启动调试 没有正确安装调试器
- java实现,连接数据库的账号密码库,实现登录案例
- 百度文库的所有内容都可以不用财富值下载
- Wangle源码分析:EventBaseHandler、AsyncSocketHandler
- 新鲜出炉2010笑话集锦,我竟然一个都没听过
- 人工神经网络:径向基函数神经网络
- 清空RMON统计的数据
- 证券公司信息化——8
- Greenplum 实时数据仓库实践(8)——事实表技术
- Oracle入门(学习整理)
- part01.03 委托与 Lambda 表达式(三):Lambda 表达式
- “天成云”品牌发布——Tungsten Fabric助力开源开放生态发展
- Centos下数据写入MySQL数据库汉字是????
- 君正JZ4775芯片处理器介绍