很久前手里的一个样本,之前因为技术不够一直没有详细分析,最近心血来潮尽我所能详细分析一下。
首先双击运行,等待40s左右(一会的分析就能告诉你为什么它这么慢)弹出勒索文档,大概就告诉你:“你的电脑被我加密啦,我用的RSA-2048”,它还贴心的给你放上了维基百科。总之就是你的重要文档都被强加密,不交钱的话休想复原了(后续我们来解决这件事)。
大概查看一下发现各个文件夹下都产生了这两个勒索文档,同时被加密的文件会以“加密串.CRYPTOSHIELD”格式显示:
同时里面的内容也被加密的无法判断出这是一个什么类型的文件:
接下来我们查看一下样本都有哪些行为,火绒剑记录的行为很多,这里我只贴一下主要的行为。首先病毒将自身移动到系统文件夹并将自身伪装为SmartScreen软件:
之后创建了注册表自启动项,便于后续持久化攻击:
各处创建勒索文档:
这部分访问了加密相关的注册表值应该是使用CSP加密库进行加密了,同时也能看到文件名被修改了:
接着病毒又删除了备份文件,停止与备份相关的服务防止用户进行数据恢复(这里程序名称不同,因为这是我提取到的子进程,后续会说到)。
接下来我们从静态分析和动态分析上来搞明白这个程序到底是如何运行的,以及尝试看看我们是否有挽救数据的机会。
查看导入表发现几乎找不到与病毒行为相关的函数,这里猜测此程序应该只是一个加载器,实际程序应该是隐藏在程序某个段中,待此程序加载到内存中进行释放并执行真正的病毒:
将程序拖入IDA,定位到主函数查看一下主要流程实际上就是先将数据进行解密,解密后再加载至内存运行,专业上讲这叫做:“病毒文件不落地”hhh。实际上也是躲避杀软检测的手法之一:
接下来我们主要分析一下病毒数据是如何解密并加载到内存中的。这里看到实际上病毒数据是存储在了资源段中,程序读取名为“FSKLJDHFUISDOJGOISDHGIOKDSHUGIJSDOI”的资源并加载到0x7E00大小的内存中(实际上这就是病毒文件的大小,为我们后续解密资源提供了帮助),加载后经过分析发现这段数据是被RC4算法加密了,程序先对数据进行RC4解密,之后将病毒进行分段加载到内存中:
RC4算法特征是具有一个256的SBOX,这里就不贴了。我们简单看下它的加载函数。实际上这就是一个简易的PE加载器,先将病毒程序分段加载到内存中,然后依次修复重定位表,导入表:
因为主要内容不在这个程序中,这里我们只粗略地分析了过程,接下来我们手动将病毒程序提取出来。
由于我们在上文看到了程序先将资源文件读入到内存中对数据进行解密后再进行加载的,那实际上我们断点断在解密后的位置就能顺利的提取出病毒数据,下图红框中便是病毒文件:
写一个简单的IDC脚本将内存dump出来即可提取到病毒文件。
用到了CryptoAPi相关函数、注册表相关函数、Socket相关函数。确定了这就是勒索软件本体,另外这里还用到了很多次网络连接相关的函数(行为分析没有查看到应该是我断网运行的原因= =),猜测会与C2服务器进行通信:
由于病毒涉及到很多流程,为了能分析得更加具有条理性这里我先将病毒大概的运行过程贴一下,方便后续一步一步的分析:
获取电脑第一个盘的序号作为第一个部分,获取用户名并对用户名数组进行简单的异或和移位操作得到第二部分。这两部分共同组成互斥锁ID避免勒索软件重复加密:
接下来程序检测是否存在名为“1FAAXB2.tmp”的文件并且文件内容是否为“AFEE16BC"。第一次运行是不会产生这个文件的,这实际上可以看做一个病毒存档的文件,一旦用户电脑中有这种特征就证明已被感染,所以为了让它闭嘴我们其实也可以手动创建个这个文件【滑稽】:
对于第一次运行的电脑,程序会伪装到系统目录同时创建自启动项便于持久化攻击:
注册表情况,这里多了两个启动项都是病毒文件:
上述几部分准备工作完成后接下来开始尝试对文件进行加密。程序在不同地方多次出现这一部分操作,这其实是程序生成的密钥文件,主要目的是通过检测它是否生成来判断用户是通过哪种方式加密的(单机情况不会生成这个文件):
开始检测系统网络连通性,程序尝试与C2服务器进行连接:
如果连接成功程序会随机导出一个密钥,接着将密钥进行RC4加密后存入下面这个文件中:
如果存在密钥文件就将密钥文件进行上传,上传的参数有三个分别为:唯一序列号、密钥、用户代理:
上传完成后到达了这一步。这一步是为了获取密钥明文形式。如果存在密钥文件那就直接读取并进行RC4解密得到key,如果不存在那就对准备好的机器码解密也能得到key:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2021-7-30 10:58
被ISh_LLL编辑
,原因: