首页
社区
课程
招聘
[原创] Radamant勒索病毒分析
2019-12-8 20:39 6293

[原创] Radamant勒索病毒分析

2019-12-8 20:39
6293

1.    概述

       从Github上获取的一个Radmnant勒索样本, 样本具有早期勒索病毒的主要特征,比较典型 。虽然勒索病毒现在都不这么玩了,但还是可以学习其功能实现的思路和方法。 因为还在学习这方面的内容,所以分析过程尽可能比较详细地列出来,分析结果可能存在一些遗漏或错误,也请大家指教。图片从word拷贝过来比较模糊,所以把idb文件放在附件了,病毒文件来源于Github上的theZoo项目。

2.    样本信息


 样本名  Radamant.exe.ViR
 样本大小   53,248 bytes
 修改日期   2016/1/27 8:00
 MD5   6152709e741c4d5a5d793d35817b4c3d
 SHA1   05ae9c76f8f85ad2247c06d26a88bbbcfff4d62e
 SHA256   2c4c8066a1a7dfdf42c57ff4f9016f1b a05bcb004ff8b0ffc0989165d2ad30e2

3.    实验环境

 实验平台 Windows 7、Windows XP、Kali虚拟机
 分析工具 IDA Pro 6.8,OllyDbg1.1
 其他 PEiD,ResHacker,UPX等

4.    基础静态分析

4.1检测加壳

       首先,使用PEiD检测该勒索病毒是否加壳。虽然PEiD显示“Nothing found”,但EP Section显示了“UPX1”节区(应该只进行了壳的特征值处理)。显然,这是使用了常见的UPX压缩壳对病毒进行了加壳。


4.2  UPX脱壳

      前面分析得知病毒已使用了upx进行压缩,所以使用upx命令行工具进行脱壳,脱壳过程显示如下:

       成功获得了脱壳后的Radmant.exe病毒文件。

4.3  导入表分析

使用PEid分析病毒的导入表,发现有7个模块被导入。下面分析一些主要模块的导入函数,可以得到其中的一些关键信息。

1.      kernel32.dll:除了一些病毒必须的函数外,该模块还导入了GetLogicalDrives、GetFileSize等函数,估计与文件加密部分有关。

2.      advapi32.dll:勒索病毒中常见导入模块,与密钥生成、注册表写入有关。

3.      dnsapi.dll和ws2_32.dll:发现了诸如socket、connect、DnsQuery_A等函数,与病毒的网络行为有关,且很有可能和消息通信相关。

4.      SHELL32.dll:该模块导入了两个关键的函数SHGetFolderPathA和ShellExecuteA, 表明病毒除运行本身外还运行了其他外部程序(也可以是病毒释放的程序)。

4.4 资源段分析

       使用Resource Hacker查看病毒的资源段,如下图所示:

       发现了一个资源ID为1033的自定义资源,且该资源未被加密。分析似乎与文件信息有关,文件名为“DirectX”。暂时没有什么头绪,待后续分析。

5.    详细分析

WinMain()

       从模块入口定位到该函数,经过分析,发现这个函数是病毒的主函数,且没有使用任何的混淆反调试等保护手段。以下是对主函数逻辑的分析:

       下面,按顺序和层次一一分析其中的关键函数。

check_my_path() 检查文件路径

       这个函数获取了病毒文件当前的路径名和文件名,然后检查该病毒程序是否按照指定的路径和名称在运行:

copyMeToWin() 拷贝自身到指定路径

       上一个函数检查文件路径,若不在指定目录以指定名称运行,则将自身拷贝到一个指定的目录下,重命名为DirectX.exe,文件属性设置为隐藏,然后运行拷贝后的病毒程序:

       如下图所示,病毒样本拷贝到对应目录下:

       拷贝完成,调用Delself()函数新建一个批处理文件aaa.bat,删除原病毒样本:

checkARun() 注册表查询

       这个函数检查注册表是否写入了该病毒程序。

UACME() 创建互斥体

       这个函数创建了一个名为“radamantv2.1”的互斥体,防止双开;没有异常,则使用WMI命令行,启动病毒进程:

SetARun() 注册表写入

       这个函数在注册表写入病毒文件位置。

       如下图,为注册表的写入验证:

getID() 计算MD5值作为ID

       这个函数,根据系统信息、计算机名、硬件信息等多种信息,计算出一个MD5值,并将这个MD5值作为标识ID用于后面功能的实现:

       如下图,在虚拟机上得到的ID:

decrypt_domain() 解密密文得到域名

       这个函数的参数是一个加密了域名,使用AES算法和解密密钥,计算最终可以得到未加密的域名:

       如下图,解密得到的服务器域名为“tangotango.com”, 这是一级控制服务器的域名:

GetIP() 域名解析并发送请求

       这个函数,首先向域名“checkup.dyndns.org”发送一个GET请求,该域名会返回宿主机的外网地址:

getDomainsFromReg() 注册表获取域名

       这个函数比较直观,从注册表中获取一个域名列表。第一次运行,查询不到域名,所以先执行后面的函数。

SendDataToServer() 发送数据到服务器

       上一个函数判断了注册表中是否有域名列表。若没有,就执行这个函数。该函数向服务器的IP地址发送了一个POST请求,并从返回的数据中获取指定的值(根据下一个函数判断,这个值为域名):

       动态调试这个函数,显示向一级域名发送请求二级域名的消息:

       这里设置一级域名服务器“tangotango.com”为另一个虚拟机地址,POST的消息如下:

setDomains() 注册表写入域名

       这个函数同样比较直观,将上一个函数获得的域名,写入注册表中。

       在虚拟机中,执行这个函数在虚拟机中写入了一个注册表键值:键为宿主机id;值为一个二级域名(实际控制域名)。由于服务器失效,这里的为自己构造的域名和指向另一个虚拟机的IP地址:

dowork() 病毒主线程

       这个函数是病毒的主线程,实现了病毒的主要功能。这个函数首先把宿主机的id(先前计算得到的)与IP地址发送到domain_list[]中存储的域名地址,然后接收服务器传回来的命令,通过exec_command()函数执行命令。

       如下图,将宿主机IP和id发送到注册表中的二级域名:

exec_command() 命令执行

       这个函数是dowork()病毒主线程调用的命令执行函数。这个函数,可执行的命令包括:

删除自身命令;命令更新命令;发送宿主机信息命令;加密文件命令;解密文件命令;显示勒索信息;显示解密信息。具体显示如下:


DelSelf() 删除自身

       这个函数执行批处理文件删除自身进程、文件等。

update_me() 命令更新

       这个函数,从服务器下载build.exe文件并更新指令集。

       由于服务器失效,所以不能下载目标文件。

SendMyInfo() 发送宿主信息

       这个函数将宿主机系统信息和密钥发送到服务器。

       如下图,为发送的宿主机信息及其生成的RSA密钥对(公钥和私钥):

encrypt_PC 加密文件

       这个函数是宿主机的加密函数,实现了获取RSA加密公钥和寻找并加密文件的功能:

FindAndCryprFiles() 寻找并加密文件

       这个函数在加密文件命令的函数下调用。其主要功能就是获取磁盘信息,使用一个递归函数搜索文件,并加密所有文件。

Search() 递归搜索文件,加密文件

       这个函数由上一个函数FindAndCryprFiles调用。主要实现了两部分的内容:递归搜索文件;AES算法加密或解密文件。

       解密部分:

       加密部分:

       在加密时,先从服务器获取本机id的RSA私钥,用来加密接下来生成的AES密钥。然后用AES密钥加密文件(如服务器未指定加密的文件类型,则默认加密所以类型的文件)。

       如下图,为加密test.txt的过程:

       加密完成显示如下(原文件之后会删除):

decrypt_PC() 解密文件

       解密部分功能与加密部分相似,递归查找后缀“.RADAMANT”的文件,然后调用Search函数解密文件。

       首先,从服务器获取解密的RSA私钥:

       然后,利用RSA私钥开始解密文件,过程如下:

       之后,得到解密出来的原文件。

MessageBoxA() 显示信息

       最后exec_command()函数多次调用MessageBoxA函数显示勒索、解密消息,如下图所示:

       例如,弹出开始解密的消息框:

6.    病毒行为总结

     最后总结下,病毒的行为特征主要如下:

       与域名相关的通信行为如下:



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
点赞3
打赏
分享
最新回复 (6)
雪    币: 777
活跃值: (1066)
能力值: ( LV5,RANK:78 )
在线值:
发帖
回帖
粉丝
bambooqj 2019-12-9 10:32
2
0
老板是真的有耐心
雪    币: 11
活跃值: (96)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
snappyjack 2020-1-8 23:07
3
0

 .

最后于 2020-12-24 15:37 被snappyjack编辑 ,原因:
雪    币: 2843
活跃值: (331)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
kumqu 1 2020-1-9 11:08
4
0
zhangzycn 弱弱的问下,lz做一次这种病毒分析,要大概多久
看病毒类型难度吧,几天到几周都有可能
雪    币: 228
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
山森 2020-1-30 16:48
5
0
楼主我下了the zoo,找到了样本压缩包,但是需要密码才能解压,那个密码要怎么获取呢?
最后于 2020-1-31 16:57 被山森编辑 ,原因: 问题更新
雪    币: 2843
活跃值: (331)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
kumqu 1 2020-2-2 01:32
6
1
山森 楼主我下了the zoo,找到了样本压缩包,但是需要密码才能解压,那个密码要怎么获取呢?
记得好像是“infected”
雪    币:
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
推理能手 2020-4-16 11:33
7
0
楼主怎么弄的,为什么在xp下边加密不了,
游客
登录 | 注册 方可回帖
返回