rmnet蠕虫病毒样本分析

目录

文章目录

  • 目录
  • 0x00基本信息
  • 0x01 概述
  • 0x02流程图
  • 0x03 技术细节详细分析
    • 第一层壳
      • 解密出PE文件
    • 第二层壳
      • 检查环境
      • 准备注入iexplore.exe
      • 注入Iexplore.exe
      • 恶意六线程
        • 线程1: 7ACA 自启动
        • 线程2: 7626 测试网络连通性
        • 线程3: 781F 记录连通时差
        • 线程4: 790C 发送本机信息接收返回指令
        • 线程5: 6EA8 感染exe/dll/html/htm文件
          • 感染exe/dll
          • 感染html/htm
        • 线程6: 6EC2 感染可移动磁盘,传播
  • 0x04 样本溯源 & 作者溯源
  • 0x05 查杀,防御技术方案
    • 0xA 杀死iexplore.exe进程
    • 0xB 删除恶意样本
    • 0xC 恢复被感染的文件
      • 恢复exe/dll文件
      • 恢复html/htm文件
    • 0xD 恢复被感染的磁盘
  • 0x06 总结

0x00基本信息

样本名称 ff5e1f27193ce51eec318714ef038bef_ff5e1f27193ce51eec318714ef038bef.vir
文件大小 56320 byte
是否加壳 3层UPX
样本类型 感染型蠕虫病毒
MD5 ff5e1f27193ce51eec318714ef038bef

0x01 概述

1 2
木马病毒特点 感染传播
攻击人群 移动磁盘用户和网络用户
活跃地区 全国各地
传播方式 通过浏览器访问被感染的html,移动磁盘自启动

0x02流程图

0x03 技术细节详细分析

第一层壳

解密出PE文件

常规UPX壳,ESP定律常规脱壳

第二层壳

第二层壳,看着像是将文件解密出来,本质还是个壳

偷了个技术,直接在脱第一层壳的时候,利用硬件断点还在一直F9,(前提我们知道他除了第一层壳还有壳)

直到再次看到popad

找到popad


等一个大跳就到了第二个壳之后的OEP:

脱完第二个壳发现图标都变化了:
左边是没脱壳的

这时,就能看到比较正确的程序代码了:

检查环境

首先,程序通过
HKEY_CLASSES_ROOT\http\shell\open\command
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppPaths\IEXPLORE.EXE"
两个注册表项
以及扩展环境变量
"%ProgramFiles%\Internet Explorer\iexplore.exe" 的值来检测iexplore.exe 是否存在


如果存在iexplore.exe等与http协议关联的浏览器程序 才会继续进行下面的操作:
注意:这里指存在是指路径存在并且有值,但不一定非是IE浏览器,进行判断的通过条件只要是找到了HTTP协议关联的程序就能继续进行操作。

检测互斥量 KyUffThOkYwRRtgPP 是否存在

如果互斥量不存在 那就返回创建的KyUffThOkYwRRtgPP互斥量的句柄
如果互斥量已经存在,就释放掉当前互斥量,并返回0。

只有互斥量不存在时,才会执行重新设置互斥量hMute=HANDLE_FLAG_INHERIT, 程序代码也才会正常执行:


检测完互斥量,接下来检测自身是否在固定磁盘下运行,并且名称是否是DesktopLayer.exe。

如果不同时满足上面两个判断条件,则程序会按顺序遍历下面的系统环境的目录,直到找到一个可以创建Micsoftware文件夹的目录 便不再遍历。

然后返回完整目录路径+DesktopLayor.exe的路径

下面是该函数的备选路径:

%ProgramFiles%
%CommonProgramFiles%
%HOMEDRIVE%%HOMEPATH%
%APPDATA%
SystemDirectory
WindowsDirectory
TempPath

然后将自身文件拷贝到返回的完整路径中并运行,然后退出当前进程

准备注入iexplore.exe

获取一些ntdll.dll的导出函数地址,并保存在全局变量中。


hook ZwWriteVirtualMemory 由于用CreateProcess创建iexplore.exe的进程的时候,会调用ZwWriteVirtualMemory API 所以利用 hook ZwWriteVirtualMemory函数的方式去注入iexplore.exe

首先,先对ZwWriteVirtualMemory函数地址所在的空间,修改访问权限而使得可以进行修改。

然后对ZwWriteVirtualMemory函数前五个字节进行处理。以方便接下来进行填充 jmp addr

流程图:

emmm 就是上图那样 hook了ZwWrite…函数

代码实现:

为什么要使用ZwWriteVirtualMemory函数,而不是别的函数?

hook ZwWriteVirtualMemory函数:
首先修改需要hook的函数地址前五个字节的访问权限,
修改为jmp 到自己想要的函数。
本次样本 hook 到了402a59函数地址

hook后的ZwWriteVirtualMemory函数:

对应的反汇编:

注入Iexplore.exe

hook ZwWritevirtualMemory函数成功之后,调用CreateProcess 函数创建一个iexplore.exe进程,并触发被hook的ZwWriteVirtualMemory

现在来看看hook ZwWriteVirtualMemory之后,hook到的函数都做了些什么事情

首先需要先把原先ZwWriteVirtualMemory函数该做的事情做了,就像上面hook流程图中的call 0x1116

代码:

sub_402002 是主要注入函数

该函数在当前进程中 申请了和要远程注入的相同基址20010000 ,避免了要频繁计算地址差值和重定向数据的一些麻烦,然后把dll在当前内存中展开,然后注入到iexplore.exe

此外,为了dll在进程中完整顺利运行,还将

1.初始化导入表的代码,
2.修改页保护的代码,
3.修复IAT表并启用2,3步写入的代码以及调用dll文件 的代码,
4,一些运行所需的数据以及调用启动3步代码的 代码

都注入了iexplore.exe

恶意六线程

在启用六个恶意线程之前,会先进行socket的初始化和系统信息获取:

本地磁盘信息
磁盘序列号信息
系统版本信息
语言环境信息

获取系统信息


初始化Socket服务

线程1: 7ACA 自启动

每一秒都读取一次注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon,并判断Userinit的值是否有样本文件目录c:\programfiles\microsoft\Desktoplayer.exe 是否在键值中,如果不在就将样本文件目录加到该注册表项的键值中,从而达到开机自启的目的。

代码

线程2: 7626 测试网络连通性

测试与 google.com ,bing.com , yahoo.com 这三个主机80端口的访问,一旦有一个可以访问,就停止测试,并保存两次能够连通的时间差多少秒

线程3: 781F 记录连通时差

每一分钟都向**“C:\Program Files\Internet Explorer\dmlconf.dat”**文件中写入一个16字节的数据,前八个字节是获取的系统时间,接着4个是联通网站的时间差,后四个是0.

线程4: 790C 发送本机信息接收返回指令

每十分钟向“fget-career.com”服务器发送当前系统时间以及本机信息,并接受服务器返回的指令 。端口:443

线程5: 6EA8 感染exe/dll/html/htm文件

每30秒遍历固定磁盘DRIVE_FIXED和移动磁盘DRIVE_REMOVABLE



先过滤掉文件的白名单:"." ,"…" ,“RMNetwork” 如果是这三个文件或文件夹不进行遍历
.是当前文件夹的意思, …是上层目录,RMNetWork 可能是作者自己存储信息用的文件夹。


如果这些都不是,并且是个文件而不是文件夹的话,进行判断是exe文件还是html文件,用不同的方法进行加密:

感染exe/dll

如果是exe/dll 则对文件继续进行判断,判断该文件能不能够被加密:

文件大小是否大于64字节
文件PE格式是否正确
文件大小足够有NT头
文件Machine的值为Intel 386
文件是32位文件
文件没签名
文件不是通过C#和.Net编译的

继续判断2,通过判断是否有rmnet节表,来判断是否已经被加密过


继续判断3, 遍历导入表查看是否有LoadLibrary和GetProcAddress函数。


继续判4,判断文件末尾是否有一个足够大的0的空节表。
如果有足够大的空表 0x28,就修改文件的sizeOfImage的值,改为根据节表对齐后加上新节表的文件映像大小。


对文件的改动:

添加一个节表名称为rmnet,赋值给新加节表的rawsize(使用要写入的文件大小)
让原本的文件大小作为新节点的入口地址
节表大小按节表对齐后的值作为RVAsize
节表大小按文件对齐的后的值作为RAWsize
节表特征设为0xE0000020
重新设置sizeOfImage(文件映像大小)为加新节表后并且按文件对齐值对齐后的大小
再将结构中的表的数量加1

接下来 更改程序入口点为新节表的入口点(更改PE中的EntryPointAddress)

取消文件在进程空间中的映射,写入两份数据到新解表加密的PE文件(其实就是自身DesktopLayorer.exe,这个可以用OD调试加密的文件解密出来),第二份数据是当前文件被加密的相关信息。

至此 结束加密exe,该exe只要被执行就会执行DesktopLayorer.exe恶意程序

总结 :

1.文件末尾添加一个表.rmnet的结构
2.表的数量增加1
3.SizeOfImage的大小  进行了更正
4.更改程序入口点
感染html/htm

先检查文件内容的最后9字节数据是不是""以此来判断该文件是否被感染过,如果没有被感染,则在文件末尾添加数据,

感染后会发现html页面添加了一段脚本代码:

如果是企业网站的html文件被感染,则访问该网站被感染的html文件时,IE会提示运行脚本

一旦点击运行脚本,就会在本地在Temp目录生成svchost.exe并执行。而svchost.exe其实也就是DesktopLayorer.exe文件。

线程6: 6EC2 感染可移动磁盘,传播

首先判断是不是移动磁盘,该线程每十秒查找一次是否有移动盘磁盘

然后继续进行判断:
该磁盘是否已经被感染过

1.该盘符是否有autorun.inf 文件
2.autorun.inf文件大小>3字节
3.autorun.inf前三个字节是RmN

满足上面三个条件之后 就确定该磁盘已经被感染过。

然后根据判断结果,如果是移动磁盘且磁盘空间大小正常且是未被感染过的磁盘,就进行感染

创建新的文件
RECYCLER 并设置为隐藏

并在该文件夹下创建新的子文件夹RECTCKER\S-3-0-14-0132847250-7673(随机时间拼凑成的文件夹名) 也设置为隐藏

并在该文件下创建字母随机拼凑成的文件名:clCbjNCI.exe 然后把加密过的DesktopLayorer.exe的代码内容拷贝到该文件下,并设置文件属性为隐藏



之后 再在可移动磁盘打开或者新建一个autorun.inf文件,然后在该文件头写入被感染的标志RmN,


再写入加密后的数据以及
“[autorun]\r\naction=Open\r\nicon=&%WinDir&\system32\shel132.d11,4\r\nshellexecute=.%g\r\nshell\explore\com”
移动磁盘自动播放相关指令。达到插上移动磁盘自动运行原本DesktopLayorer.exe代码的效果

从而达到被动传播,主动感染的效果

0x04 样本溯源 & 作者溯源

IP地址 服务器
72.26.218.76(荷兰阿姆斯特丹) fget-career.com(443端口)

释放的文件:

文件路径 md5
C:\Program Files\Microsoft\DesktopLayer.exe. 5FFO6E6CD02773C13BEFBD82771223A6
C:\Program Files\InternetExplorer\dmlconf.dat 随时保存连通网站时差等信息md5不固定
移动磁盘:\autorun.inf 3374214FC65E4586B68FDEF7944856BC
移动磁盘:\RECYCLER\S-3-0-14-0132847250-7673626366-775384636-4860\cLCbJNCI.exe 5FFO6E6CD02773C13BEFBD82771223A6

上面最后一个文件移动磁盘RECYCLER文件夹名是固定的
后面的子文件夹名和恶意程序名称是随机的,但是MD5与c盘的样本本身是一样的

rmnet蠕虫病毒最早出现在2010年,至今已有8年之久,主流杀毒软件均可拦截。
但因为传播方式简单,容易被忽略,加上很多机子还没有添加杀软,至今仍然有较强的传播力。

0x05 查杀,防御技术方案

0xA 杀死iexplore.exe进程

杀死被注入的iexplore.exe进程

0xB 删除恶意样本

遍历7个目录路径

1"C:\Program Files\";
2:"C:\Program Files\Common Files\";
3:"C:\Documents and Settings\Administrator\ ";
4:"C:\Documents andSettings\Administrator\Application Data\ ";
5:"C:\WINDOWS\system32\ ";
6:"C:\WINDOWS\ ";
7:"C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\";

如果有"Microsoft"目录,删除该目录及其目录下的"DesktopLayer.exe"程序

0xC 恢复被感染的文件

恢复exe/dll文件

根据样本对文件的修改

1.添加一个表的结构
2.表的数量增加了一个
3.SizeOfImage的大小  进行了更正
4.更改程序入口点

编写脚本改文件PE, 遍历除了"C:\WINDOWS","C:\windows\system32"的其他目录下exe/dll文件,判断文件节表中是否有.rmnet节表(感染标志),如果有则进行下面的行为

1.最后一个节表结构中的数据全置为0
2.NumberOfSections -=1
3.更正SizeOfImage为倒数第二个节表对齐后的RVA大小
4.更改程序入口点为原始OEP

恢复html/htm文件

遍历目录下的html/htm文件
判断文件最后9个字节内容,如果是""
就从文件尾开始 删除5E1E2字节的数据

0xD 恢复被感染的磁盘

判断如果磁盘根目录下有"autorun.inf"文件且文件头三个字节为"RmN"
如果上述情况存在,就表明该移动磁盘已经被感染,

1.删除autorun.inf文件
2.删除RECYCLER文件夹及其子文件夹和文件
3.用恢复文件的方式,修复磁盘中的文件

能力有限,写了个恢复被感染的exe/dll/htm/html文件的小程序,凑合用。

下载链接

https://pan.baidu.com/s/18nTdPZWYJM-UpMlrYtwBQQ

0x06 总结

本次分析 注入的修复IAT表的函数,以及初始化导入表的函数和第4步添加数据中的shellcode,以及如何通过这段shellocde去执行写入的代码。 都还没来的及或者能力不够没能仔细分析,该样本除了感染能力强,传播区域广泛,还可以作为后门去执行服务器的命令。 接下来的时间,就去编写查杀的程序吧。

rmnet蠕虫病毒样本分析相关推荐

  1. incaformat蠕虫病毒样本分析及查杀防范措施

    2021incaseformat蠕虫病毒 一.病毒简介 二.样本分析 三.查杀与恢复方式 四.预防措施 一.病毒简介 病毒名称:incaseformat 病毒性质:蠕虫病毒 影响范围:windows ...

  2. Android版本的Wannacry文件加密病毒样本分析(附带锁机)

    一.前言 之前一个Wannacry病毒样本在PC端肆意了很久,就是RSA加密文件,勒索钱财.不给钱就删除.但是现在移动设备如此之多,就有一些不法分子想把这个病毒扩散到移动设备了,这几天一个哥们给了一个 ...

  3. 无文件攻击与病毒样本分析-1-1-1-无文件攻击介绍

    目录 无文件攻击与病毒样本分析-0-1-1-目录_千里ZLP的博客-CSDN博客https://wittpeng.blog.csdn.net/article/details/124712530?spm ...

  4. 无文件攻击与病毒样本分析-1-4-2-无文件攻击之恶意脚本:WScript和CScript

    目录 无文件攻击与病毒样本分析-0-1-1-目录_千里ZLP的博客-CSDN博客在一个月内,将持续研究并发布一套关于"无文件攻击技术与相关病毒样本分析"的系列文章,为便于查看,将在 ...

  5. Android版本的 Wannacry 文件加密病毒样本分析 附带锁机

    一.前言 之前一个Wannacry病毒样本在PC端肆意了很久,就是RSA加密文件,勒索钱财.不给钱就删除.但是现在移动设备如此之多,就有一些不法分子想把这个病毒扩散到移动设备了,这几天一个哥们给了一个 ...

  6. Android版本的”Wannacry”文件加密病毒样本分析(附带锁机)

    一.病毒样本分析 点击免费激活,出现授权界面: 需要设备管理器,是想修改锁机密码,我们就授权,然后分析程序找到重置的密码就好了:授权之后,就被锁屏了,解锁屏幕会出现: 病毒作者真够狠的,竟然自己弄了一 ...

  7. android病毒样本分析(红包助手)

    目录 1.样本概况... 3 1.1 样本信息... 3 1.2 测试环境及工具... 3 1.3 分析目标... 3 2.具体分析... 4 2.1 加固情况... 4 2.2代码分析片段... 4 ...

  8. 火绒一面病毒样本分析

    样本信息 MD5: 6E4B0A001C493F0FCF8C5E9020958F38  SHA1:BEA213F1C932455AEE8FF6FDE346B1D1960D57FF CRC32: 1 ...

  9. Android病毒样本分析(4)

    1.基本信息 病毒名称: SD-Booster.apk 文件名称: SD-booster 文件MD5: 50836808A5FE7FEBB6CE8B2109D6C93A 文件包名: de.mehrma ...

  10. Azorult变种病毒样本分析笔记

    环境: Win 7 x32 专业版 工具: Exeinfope.火绒剑.PCHunter32.Wireshark.OD.IDA.ImpREC 样本信息: 文件: Shipping Documents_ ...

最新文章

  1. 用python画出小人发射爱心_小人发射爱心biu简笔画表情-biu小人简笔画表情动态完整版-东坡下载...
  2. 引起SQL数据库超时的问题分析及解决办法
  3. oracle的39082,ORA-39082 导入数据遇到的问题
  4. 城市规划理论1 选址理论
  5. js - prototype 继承
  6. 今天是1024也是霜降
  7. RxSwift之路 1#Swift语法知识准备
  8. php中魔术方法的应用
  9. 【从入门到放弃-ZooKeeper】ZooKeeper实战-分布式队列
  10. python-pygame安装教程
  11. 哔哩哔哩手机缓存的m4s音频和视频文件电脑观看?
  12. 软件工程实训有必要吗_软件工程专业有没有必要考研?
  13. 预测房价实验-房价数据集
  14. PaddleX语义分割
  15. 用c语言做一个五子棋程序,C语言制作简单五子棋游戏
  16. 计算机成绩排名公式,职称计算机考试:Excel的数据分析—排位与百分比
  17. kali学习1.扫描工具-Recon-NG
  18. Step Hero NFT奇幻主题游戏
  19. 视频编辑器GoPro Quik for mac中文版
  20. 2020年中国空气压缩机行业发展现状、竞争格局及未来发展趋势分析,国内市场竞争激烈,市场规模将破600亿元「图」

热门文章

  1. 北大清华人大中关村周围二手书店淘书全攻略
  2. linux常用命令大全,入门基础版
  3. Selenium自动化测试——计算器加法测试
  4. 数据结构——二叉链表创建二叉树(C语言版)
  5. css怎么设置数字的字体格式,css设置字母数字字体库信息
  6. 数据推荐 | 自然场景OCR文字识别数据集一览
  7. minecraftjava版光追_《我的世界》加入光追,“马赛克”游戏真有必要这样做?...
  8. WebAPI HelpPage出现Failed to generate the sample for media type 'application/x-www-form-urlencoded'. 错
  9. 路由器刷固件——斐讯路由器FIR300M刷OpenWrt固件教程
  10. assign ur here php,ecshop源码分析01