Morto蠕虫病毒分析报告

文章目录

  • 样本信息
  • 病毒现场复现
  • 分析过程
    • Loader部分
    • Payload部分
  • 病毒查杀

样本信息

名称:cache.txt
SHA1:a5f83e3baae0df2cdcf5b7e9e862705aeb2caedb

病毒现场复现

因为得到的样本没有病毒母体,所以只能手动复现病毒现场,手动复现病毒现场需要两个文件,一个是伪装成txt的病毒dll文件,另一个是写入注册表的payload

在这里插入图片描述

首先将md.reg导入进注册表,再将病毒dll加载起来,打开火绒剑监控,可以看到如下行为

Morto蠕虫病毒分析报告_第1张图片

可见,病毒将自身加到了服务中,用服务进行自启动。

后续病毒过程会在详细分析中体现。

重启电脑后(记得一定要断网),再继续监控行为

Morto蠕虫病毒分析报告_第2张图片Morto蠕虫病毒分析报告_第3张图片

可以看到病毒利用svchost不断的进行DNS请求和RDP爆破

分析过程

分析过程主要分为两个部分,一个是cache.txt文件用作loader的部分,另一个是真正在解密到内存中执行恶意代码的payload部分。

Loader部分

用IDA打开cache.txt文件,一共才十几个函数,看起来很简单,但是里面找函数和地址的方法还是很值的学习的

Morto蠕虫病毒分析报告_第4张图片

利用PEB结构查找kernel32的基址

Morto蠕虫病毒分析报告_第5张图片

根据传入的不同参数,查找kernel32.dll中不同函数的地址

Morto蠕虫病毒分析报告_第6张图片

get_func_addr_add_2函数中利用PE结构几个偏移查找函数地址

Morto蠕虫病毒分析报告_第7张图片

传入Advapi32,使用得到的LoadLibraryA地址进行调用继续获取其他函数地址

Morto蠕虫病毒分析报告_第8张图片

获取当前运行程序的绝对路径,然后进入judge_current_process_name函数进行比较

Morto蠕虫病毒分析报告_第9张图片

judge_current_process_name函数

Morto蠕虫病毒分析报告_第10张图片

使用od动态调试很明显的看到这一块是为了判断是否是rundll32.exe启动dll,判断不是rundll32.exe启动的dll后函数会直接返回。

Morto蠕虫病毒分析报告_第11张图片

如果是由rundll.exe启动,继续进行下面的操作

传入user32,获取Sleep和ExitWindowsEx的地址

Morto蠕虫病毒分析报告_第12张图片

拼接字符串\tsclient\a\moto,这应该是病毒母体释放的文件,但是我们是构建的病毒现场,所以不存在这个文件,打开文件会失败,会执行地址为10001827的跳转。

Morto蠕虫病毒分析报告_第13张图片

找不到文件就会Sleep一会,然后退出

Morto蠕虫病毒分析报告_第14张图片

如果不是由rundll.exe启动,函数会跳转回返回

根据前面填充出的字符串%SystemRoot%\system32\write.exe.%SystemRoot%\winhlp32.exe

使用ExpandEnvironmentStringsA函数获取完整路径,来判断系统中是否存在write.exe或winhlp32.exe文件,应该是检测运行环境是否为沙箱

Morto蠕虫病毒分析报告_第15张图片
Morto蠕虫病毒分析报告_第16张图片

打开注册表HKEY_LOCAL_MACHINE\SYSTEM\WPA,获取md键值

Morto蠕虫病毒分析报告_第17张图片

md的键值,是一大串十六进制数据。

Morto蠕虫病毒分析报告_第18张图片

decrypt_data_and_load_shellcode函数中,又包含了三个函数

Morto蠕虫病毒分析报告_第19张图片

在alloc_memory_and_decrypt_data函数中,将从注册表中获取的键值每个十六进制数据自减1,然后开辟内存空间,继续解密数据,将解密数据存放到申请的内存空间中

Morto蠕虫病毒分析报告_第20张图片
Morto蠕虫病毒分析报告_第21张图片

在get_some_dll_func_addr_and_save_alloc_memory函数中,会获取mfc42.dll中的一些函数,并将获取到的函数地址保存在申请的内存中

Morto蠕虫病毒分析报告_第22张图片

Morto蠕虫病毒分析报告_第23张图片

获取的函数地址在后面的使用

Morto蠕虫病毒分析报告_第24张图片

在find_shellcode_entry_point_and_call函数中,找到解密后的shellcode的初始化位置进行调用,这里调用的应该是一些初始化的操作,没发现一些关键操作

Morto蠕虫病毒分析报告_第25张图片

调用后,回到dllmain函数中,calc_shellcode_addr函数是计算再次进入解密shellcode的地址

地址10001710是调用开始执行恶意操作的函数

Morto蠕虫病毒分析报告_第26张图片

到此为止,loader部分分析完毕

Payload部分

进入payload部分,首先判断当前运行的进程是否是svchost去执行不同操作。

Morto蠕虫病毒分析报告_第27张图片

当进程非svchost时

会执行三个函数,然后进行退出

首先删除注册表键值为了清除历史运行记录

Morto蠕虫病毒分析报告_第28张图片

将system32目录下的wmi.dll文件复制到temp目录下并重命名为ntshrui.dll

Morto蠕虫病毒分析报告_第29张图片

获取svchost键值

Morto蠕虫病毒分析报告_第30张图片

创建名称为的服务

Morto蠕虫病毒分析报告_第31张图片

创建服务后注册表键值,利用svchost中的netsvcs服务组启动病毒dll

Morto蠕虫病毒分析报告_第32张图片

创建注册表项HKEY_LOCAL_MACHINE\SYSTEM\WPA\sn

Morto蠕虫病毒分析报告_第33张图片

设置注册表键值来注册服务

Morto蠕虫病毒分析报告_第34张图片

在temp目录下创建文件

Morto蠕虫病毒分析报告_第35张图片

最后从注册表读取键值比较是否设置正确

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2NqjWB5q-1572531034622)(D:\项目\病毒分析\Morto蠕虫病毒分析报告\pic\从注册表读取键值比较是否设置正确.png)]

当进程为svchost时

首先会创建一个线程

Morto蠕虫病毒分析报告_第36张图片

关键的一个大循环

Morto蠕虫病毒分析报告_第37张图片

查询安全软件

Morto蠕虫病毒分析报告_第38张图片

Morto蠕虫病毒分析报告_第39张图片

dns请求

Morto蠕虫病毒分析报告_第40张图片

Morto蠕虫病毒分析报告_第41张图片

遍历注册表项HELM\CurrentControlSet\Control\Sessin Manager\PendingFileRenameOperations,比较键值

Morto蠕虫病毒分析报告_第42张图片

注册表键值比较不上的话,在后续会设置键值\??\C:\Windows\offline web pages\cache.txt!\??\C:\Windows\temp\ntshrui.dll用来将cache.txt开机自动重命名为C:\Windows\Temp\ntshrui.dll

Morto蠕虫病毒分析报告_第43张图片

创建cache.txt文件

Morto蠕虫病毒分析报告_第44张图片

病毒还会进行RDP爆破,其中爆破弱口令如下

Morto蠕虫病毒分析报告_第45张图片

病毒查杀

直接删除C:\Windows\offline web pages\cache.txt或删除注册表项是没有用的,病毒会反复回写,造成清楚不掉的现象

需要先找到病毒利用启动的svchost,也就是不断3389爆破的svchost进程,结束掉它,再进行删除操作

你可能感兴趣的:(病毒分析)