Morto蠕虫病毒分析报告

样本信息

名称:cache.txt
SHA1:a5f83e3baae0df2cdcf5b7e9e862705aeb2caedb

病毒现场复现

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

在这里插入图片描述

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

在这里插入图片描述

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

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

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

在这里插入图片描述在这里插入图片描述

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

分析过程

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

Loader部分

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

在这里插入图片描述

利用PEB结构查找kernel32的基址

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

judge_current_process_name函数

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

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

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

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

Payload部分

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

在这里插入图片描述

当进程非svchost时

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

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

在这里插入图片描述

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

在这里插入图片描述

获取svchost键值

在这里插入图片描述

创建名称为的服务

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

在temp目录下创建文件

在这里插入图片描述

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

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

当进程为svchost时

首先会创建一个线程

在这里插入图片描述

关键的一个大循环

在这里插入图片描述

查询安全软件

在这里插入图片描述

在这里插入图片描述

dns请求

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

创建cache.txt文件

在这里插入图片描述

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

在这里插入图片描述

病毒查杀

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

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

猜你喜欢

转载自blog.csdn.net/weixin_44001905/article/details/102847014