Mydoom邮件传播蠕虫样本分析
一、Readme模块分析
1、样本标签
标签名 | 描述 |
---|---|
原始⽂件名 | Readme.exe |
MD5 | 194B2F31CC40249C041A5581E6A12A5B |
⽂件⼤⼩ | 41.6 KB (42,624 字节) |
⽂件格式 | Win32 Exe |
时间戳 | 1970-01-01 08:00:00 |
加壳类型 | UPX |
编译语⾔ | C/C++ |
SHA1 | D3D8BEE614F04572DA7EAA26D51C15EBB3C8D6C2 |
CRC32 | BB433F23 |
2、详细分析
样本(194B2F31CC40249C041A5581E6A12A5B)首先检查是否处于调试环境和虚拟机环境。
然后使用自写的字符串解密算法将字符串”fureinaf.qyy”解密为”shervans.dll”,并与路径%SYSTEM32%进行拼接后添加到注册表进行COM组件劫持,实现持久化。
其中样本的字符串解密算法如下:
1 | BYTE* __cdecl sub_404AD6(BYTE* a1, char a2) |
接着通过注册表Software\Microsoft\Windows\CurrentVersion\Explorer\vulnvol32\Vers
是否存在来判断是否为首次运行样本。
经过分析后可得知样本使用的注册表内容含义如下:
项名 | 描述 |
---|---|
iduser | 唯一标识ID |
usw | 自身认证 |
pafw | 自身认证 |
statem | 窃取传播邮件功能开关 |
usbactiv | 感染可移动磁盘功能开关 |
namecp | 感染可移动磁盘中autorun.inf执行的恶意模块名 |
2.1 初始化
创建了一个名为VULnaShvolna
的互斥体,确保样本单例运行。
然后读取注册表中Software\Microsoft\Windows\CurrentVersion\Explorer\vulnvol32\Vers
的statem
项来判断当前是否有运行传播恶意邮件模块,没有则启动。
接着再创建一个名为x_socks5aan
的互斥体,并读取Software\Microsoft\Windows\CurrentVersion\Explorer\vulnvol32\Vers
的usbactiv
判断是否有感染U盘模块运行,没有则启动。
然后执行函数remote_407c4E
,进行与C2通讯执行rce。
2.1.1 收集邮箱并发送恶意邮件
首先将grcopy.dll(实际为Readme.exe)文件压缩为zipfi.dll文件和zipfiaq.dll文件,压缩文件名分别为readme.exe、foto.pif,用于后续邮件附件发送。
然后从C盘开始遍历磁盘。
并筛选文件后缀名为html、htm、php、doc、xml、txt、pl、tbb的文件。
然后搜索这些文件中是否存在邮箱格式的数据。
其中会过滤掉一下这些特殊邮箱格式。
获取到邮箱后,开始随机拼接邮件的主题、内容、附件和发件人。
随机的内容、主题、附件名、发件人如下:
最后连接SMTP服务器将样本压缩文件作为附件一同发送给目标邮箱。
通过样本字符串在github上关联到部分实现代码:https://github.com/ChinesesBlueSky/learngit/blob/a22988db03194f043033e041884993f88c084fd4/wazuh/src/os_maild/sendmail.c
由于C2失活,因此无法获取样本建立stmp连接时使用的账号密码。
2.1.2 感染可移动磁盘
将satornas.dll修改为autorun.inf后写入到可移动磁盘中。
satornas.dll的实际内容如下:
2.1.3 远程命令执行
首先将url和C2进行解密,用于后续访问。
C2的生成使用了DGA算法生成。DGA 域名生算法以当前时间为种子。
然后通过拼接解密出的c2+url进行get请求访问文件进行认证。
返回的数据进行解密判断认证是否成功。
最后与C2进行建立通讯。
命令解析。
其中各项指令有如下含义:
指令 | 描述 |
---|---|
http | GET请求向服务器发送数据 |
spamon | 关闭发送邮件功能 |
down_file | 下载文件 |
pusk | 下载文件并执行 |
restart | 重新启动样本文件 |
socksa | 设置注册表的usw和pafw |
flash_on | 开启磁盘感染功能 |
flash_off | 关闭磁盘感染功能 |
icmp | TCP协议向服务器发送数据 |
2.2 非初始化部分
当初始化完毕或并非首次执行时,首先将资源数据进行解密,解密后的数据实际上为PE文件,样本将恶意模块覆盖到系统原文件ctfmon.exe
进行伪装,并将use32.dll
的时间戳替换到新的ctfmon.exe
中。
同理,解密另一个资源数据解密后,以shervans.dll
为名写入到System32目录下。
然后随机生成一个iduser,写入到注册表中。
并将自己伪装成grcopy.dll
写入到System32目录下。
最后通过APILoadLibrary
函数将shervans.dll加载,并执行ctfmon.exe。
二、ctfmon模块分析
1、样本标签
标签名 | 描述 |
---|---|
原始⽂件名 | ctfmon.exe |
MD5 | 4C1F6CF4E7DA5C96D6279B02B349B9FD |
⽂件⼤⼩ | 4.06 KB (4,160 字节) |
⽂件格式 | Win32 Exe |
时间戳 | 1970-01-01 08:00:00 |
加壳类型 | UPX |
编译语⾔ | C/C++ |
SHA1 | 38E767685A76319D01E75C2DDFE9EC0A166BC706 |
CRC32 | 67CE3B69 |
2、详细分析
样本(4C1F6CF4E7DA5C96D6279B02B349B9FD)的作用为执行模块smnss.exe
(实际上为样本原始文件)和加载shervans.dll
。当执行smnss.exe失败,则加载shervans.dll
。
三、shervans模块分析
1、样本标签
标签名 | 描述 |
---|---|
原始⽂件名 | shervans.exe |
MD5 | 1C437748F7AB08B03BEB56CFA69016B5 |
⽂件⼤⼩ | 8.50 KB (8,704 字节) |
⽂件格式 | Win32 DLL |
时间戳 | 2010-05-20 17:10:51 |
加壳类型 | UPX |
编译语⾔ | C/C++ |
SHA1 | B420D23E3CF680021EEA8C4B14685306024EAEE3 |
CRC32 | F627F616 |
2、详细分析
样本(1C437748F7AB08B03BEB56CFA69016B5)首先将grcopy.dll修改为smnss.exe
然后创建一个名为x_socks5aan
的互斥体后,在C盘写入了文件satornas.dll
,该文件实际上为一个autorun.inf
文件。
并将grcopy.dll
复制到磁盘根目录,名称是注册表配置项中的namecp
。
然后执行smnss.exe。
添加shervans.dll到注册表实现COM组件劫持、添加ctfmon.exe到注册表启动项。
最后以本机为服务器,启动并监听端口3159,等待连接并执行接收到的指令
四、IOC
一、MD5
文件名 | MD5 |
---|---|
Readme.exe | 194B2F31CC40249C041A5581E6A12A5B |
ctfmon.exe | 4C1F6CF4E7DA5C96D6279B02B349B9FD |
shervans.dll | 1C437748F7AB08B03BEB56CFA69016B5 |
二、HOST
HOST |
---|
hxxp://qehspqnmrn.info |
hxxp://qehspqnmrn.info/imgs/krewa/nqxa.php |
hxxp://qehspqnmrn.info/imgs/xvima/mvid.php |
hxxp://qehspqnmrn.info/imgs/ckanp/load.php |
hxxp://qehspqnmrn.info/imgs/necxa/qnumz.php |
三、开源报告
- 记一起通过邮件传播的恶意程序攻击(https://mp.weixin.qq.com/s/-hWrK_de-1cBQvocL81FRw)