GandCrab5.0.9样本详细分析

?前言:
?WannaCry利用永恒之蓝漏洞爆发以后,病毒安全的前沿对抗最频繁种类则是勒索病毒了,17年初或者更早就有人捕获了GandCrab家族的勒索病毒,直到18年已经更新迭代到了5.0版本,18年进入尾声的时候,安全研究人员发现了GandCrab勒索病毒的V5.1最新版变种。
?对于勒索个人看法:当第一次听说勒索病毒的时候,就感觉一定是无法抗拒的利益驱动,才会让某一群人去迭代、维护、研发勒索病毒。这道理就像开了一家公司一样,能把病毒走向全世界,已经是很成功了,看似简单,其实背后的关联复杂。除了加密算法的复杂程度之外,勒索的潜伏与隐蔽(字符串混淆加密)也是比较到位。
?其实不管怎样,那些API还是那些API,即使自己实现相仿得函数,时间足够也能从函数功能与汇编,加以逻辑去推理过程,从而实现、还原。

?
1、预热(收集系统信息、提权、注册表操作、兼容匹配、加密解密关键字符串等)
2、枚举扫描(网络共享、资源枚举,遍历扫描文件)
3、加密文件(过滤、匹配的文件以不同方式进行加密)
4、收尾工作(发送勒索信息、删除病毒、销毁进程等)
?基本所分析的病毒大多数都会这样干,因为他既要保证你系统的稳定性,也要保证自己的安全与功能的实现,这样才能勒索到钱......

?????????????????????????????  ps:文章最后附思维导图
?
?预热分析:
1、线上分析:

????????????????????图片一:线上分析

????????????????????图片二:样本信息
?
2、工具分析:

????????????????????图片三:exeinfo pe
?
?详细分析:
①拉入IDA也许你会看到花指令混淆,如下所示:


????????????????????图片四:花指令混淆
?②如上图所示,GandCrab.00426F7A函数会标志勒索病毒要开始了,当你发现桌面弹窗"我们很快就会回来",恭喜已经中了GandCrab勒索病毒,如下所示:

????????????????????图片五:MessageBox
?③GandCrab.00405FF7函数先是创建快照,遍历进程,怕加密文件的时候影响加密效果,如文件被占用等问题,如下所示:

????????????????????图片六:初始化字符串

????????????????????图片七:遍历对比进程

????????????????????图片八:匹配进程结束
?④如图三中GandCrab.00405944是最为核心的函数,先来看看获取windows版本信息,获取SID也就是说当前的权限等级,如下所示:

????????????????????图片九:Windows版本信息

????????????????????图片十:当前权限级别
?⑤GandCrab.004054BA函数对注册表中键盘布局键值获取,获取当前用户和系统的默认安装语言,比对如果匹配到419(俄罗斯),422(乌克兰) ,423(比利时)等等,那么将执行删除文本且结束进程,这意味着不进行勒索......,如下所示:

????????????????????图片十一:键值循环


????????????????????图片十二:匹配成功
?⑥继续线性跟踪,GandCrab.00405016函数负责获取系统信息,检索了磁盘目录关联的文件系统和卷的信息,然后用磁盘的数据hash获取随机字符串,创建.lock互斥体:


????????????????????图片十三:创建互斥体
⑦GandCrab.0040586C函数,加密与异或字符串获取公钥1,如下所示:


????????????????????图片十四:获取RSA1
⑧参数入栈,安全进程扫描,关键系统数据异或解密,如下所示:

????????????????????图片十五:入栈参数

????????????????????图片十六:示意图


????????????????????图片十七:系统数据拼接

????????????????????图片十八:安全服务遍历

????????????????????图片十九:拼接后数据

????????????????????图片二十:解密
⑨系统不显示critical-error-handler消息框,异常不显示,初始化临界区,如下所示:

????????????????????图片二十一:SetErrorMode

?⑩如上图所示,GandCrab.00404DC5函数是GandCrab勒索的核心函数,先是利用微软提供的CSP函数获取随机数,如下所示:

????????????????????图片二十二:GetModuleHandleA
?解密字符串,解密后发现是文件名的后缀,如下所示:

????????????????????图片二十三:文件后缀名
?随机生成密钥,且导出公钥,私钥,如下所示:




????????????????????图片二十四:导出Key
?接着创建了注册表ex_data\data,并且设置了随机字符,如下所示:


????????????????????图片二十五:设置注册表
?导入公钥,加密了数据:

????????????????????图片二十六:硬编码公钥导入

?创建了key_datas\datas,设置了public=公钥,private=硬编码加密后私钥(还加了随机数等数据)



????????????????????图片二十七:注册表设置
?有意思的赋值方式,push入栈,pop弹出给寄存器,赋值给内存变量,如下所示:

????????????????????图片二十八:赋值方式
?使用了Base64加密了之前的密钥,然后拼接勒索警告字符串与获取的pc数据,如下所示:



????????????????????图片二十九:勒索警告
??下面压入了文件后缀格式,应该准备枚举网络资源,遍历文件,加密文件了,如下所示:

????????????????????图片三十:GandCrab.00403D8E
?内部创建了两个线程,线程分析一,如下所示:

????????????????????图片三十一:回调函数

????????????????????图片三十二:局域网枚举

????????????????????图片三十四:遍历局域网下文件目录与磁盘

????????????????????图片三十五:递归扫描



????????????????????图片三十六:加密过滤




????????????????????图片三十七:加密过程


????????????????????图片三十八:硬编码公钥加密文件
?线程分析二,如下所示:

?
????????????????????图片三十九:本地文件加密且退出进程
最后调用了函数GandCrab.00405252执行了 ShellExecute,执行了如下指令:

?
??样本中关于利用CVE漏洞提权代码没有分析,因为在测试环境下没有匹配0x1000,跳过了提权函数,上述有很多分析点不够精准,但是还原了样本的整体逻辑。
?关于硬编码公钥加密研究,使用的是CSP又称"加密服务提供者(Cryptographic Service Provider)",微软提供的一套API,后续有机会一起实现与深入研究一番。

?
思维导图:

原文地址:https://blog.51cto.com/13352079/2355303

时间: 2024-10-08 10:32:24

GandCrab5.0.9样本详细分析的相关文章

android 6.0权限全面详细分析和解决方案

原文: http://www.2cto.com/kf/201512/455888.html http://blog.csdn.net/yangqingqo/article/details/48371123 http://inthecheesefactory.com/blog/things-you-need-to-know-about-Android-m-permission-developer-edition/en 一.Marshmallow版本权限简介 android的权限系统一直是首要的安全

熊猫烧香_汇编级_超详细分析

1.样本概况 1.1 应用程序信息 文件: C:\Windows\System32\drivers\spo0lsv.exe 大小: 30001 bytes 修改时间: 2007年1月17日, 12:18:40 MD5: 512301C535C88255C9A252FDF70B7A03 SHA1: CA3A1070CFF311C0BA40AB60A8FE3266CFEFE870 CRC32: E334747C 简单功能介绍: \1. 自启动 \2. 删除gho文件 \3. 全盘感染指定类型文件 \

10.hibernate缓存机制详细分析(转自xiaoluo501395377)

hibernate缓存机制详细分析 在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session级别).二级缓存(sessionFactory级别)以及查询缓存,当然还要讨论下我们的N+1的问题. 随笔虽长,但我相信看完的朋友绝对能对hibernate的 N+1问题以及缓存有更深的了解. 一.N+1问题 首先我们来探讨一下N+1的问题,我们先通过一个例子来看一下,什么是N+1问题: list()获得对象: 1 /** 2 * 此时会发出一条sql,将30个学生全部查询出来

关于Delphi中的字符串的详细分析

关于Delphi中的字符串的详细分析 只是浅浅的解析下,让大家可以快速的理解字符串. 其中的所有代码均在Delphi7下测试通过. Delphi 4,5,6,7中有字符串类型包括了: 短字符串(Short String) 长字符串(Long String) 宽字符串(Wide String) 零结尾字符串(Null-Terminated String).PChar和字符数组 1.短字符串(Short String) 固 定长度,最大字符数个数为255,短字符串也成为长度字节(Length-byt

MVC之前的那点事儿系列(5):HttpPipeline详细分析(下)(转载)

MVC之前的那点事儿系列(5):HttpPipeline详细分析(下) 文章内容 接上面的章节,我们这篇要讲解的是Pipeline是执行的各种事件,我们知道,在自定义的HttpModule的Init方法里,我们可以添加自己的事件,比如如下代码: public class Test : IHttpModule { public void Init(HttpApplication context) { context.BeginRequest += new EventHandler(context_

hostapd wpa_supplicant madwifi详细分析(十四)——完结篇

注:这篇文章不谈技术 查看了一下<hostapd wpa_supplicant madwifi详细分析>系列文章,断断续续更新到现在,发现中间的持续时间都快要两年了.记得那时候刚毕业到公司,组长叫我看项目的无线部分代码,自己稀里糊涂的看了一个月,组长问我: vap是怎么创建的?sta和AP是怎么建立连接的?wds是怎么工作的?WPS中PIN和PUSHBUTTON的区别是什么?我们DUT中几种加密方式是怎么实现的?hostapd是用来干什么的? 这些问题把我问的瞠目结舌,十分羞愧,感觉自己花了一

MVC之前的那点事儿系列(4):HttpPipeline详细分析(上)(转载)

MVC之前的那点事儿系列(4):HttpPipeline详细分析(上) 文章内容 继续上一章节的内容,通过HttpApplicationFactory的GetApplicationInstance静态方法获取实例,然后执行该实例的BeginProcessRequest方法进行执行余下的Http Pipeline 操作,代码如下: // Get application instance IHttpHandler app = HttpApplicationFactory.GetApplication

Yarn之ResourceManager详细分析笔记(一)待续

一.概述     本文将介绍ResourceManager在Yarn中的功能作用,从更细的粒度分析RM内部组成的各个组件功能和他们相互的交互方式. 二.ResourceManager的交互协议与基本职能 1.ResourceManager交互协议 在整个Yarn框架中主要涉及到7个协议,分别是ApplicationClientProtocol.MRClientProtocol.ContainerManagementProtocol.ApplicationMasterProtocol.Resour

MVC之前的那点事儿系列(4):Http Pipeline详细分析(上)

文章内容 继续上一章节的内容,通过HttpApplicationFactory的GetApplicationInstance静态方法获取实例,然后执行该实例的BeginProcessRequest方法进行执行余下的Http Pipeline 操作,代码如下: // Get application instance IHttpHandler app = HttpApplicationFactory.GetApplicationInstance(context); 那GetApplicationIn