因为得到的样本没有病毒母体,所以只能手动复现病毒现场,手动复现病毒现场需要两个文件,一个是伪装成txt的病毒dll文件,另一个是写入注册表的payload
首先将md.reg导入进注册表,再将病毒dll加载起来,打开火绒剑监控,可以看到如下行为
可见,病毒将自身加到了服务中,用服务进行自启动。
后续病毒过程会在详细分析中体现。
重启电脑后(记得一定要断网),再继续监控行为
可以看到病毒利用svchost不断的进行DNS请求和RDP爆破
分析过程主要分为两个部分,一个是cache.txt文件用作loader的部分,另一个是真正在解密到内存中执行恶意代码的payload部分。
用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部分,首先判断当前运行的进程是否是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进程,结束掉它,再进行删除操作