ReverseZ 发表于 2017-10-14 22:05

一个"有趣"小马的分析之旅

本帖最后由 ReverseZ 于 2017-10-21 15:22 编辑

来也匆匆,去也匆匆,感恩15pb,望15pb越来越好

0x01基本信息
文件: C:\Users\15pb-win7\Desktop\004.vir
大小: 631810 bytes
修改时间: 2017年9月29日, 8:19:09
MD5: 81FE61EC3C044AA4E583BA6FF1E600E8
SHA1: D7C9D1E5A2FA2806A80F9EDBCDD089ED05D6B7D8
CRC32: 2EBCCBF8   
加壳情况:未加壳                                       

0x02简介这是一个针对用户浏览器、FTP软件,窃取系统及个人信息的木马。

0x03被感染系统症状
创建C:\Users\用户名\AppData\Roaming\5F1832文件夹,并将木马以不同名称2728C2.exe复制到其中,其中名称5F1832和名称2728C2为木马随机产生,接着修改木马的文件属性为隐藏。用户系统中浏览器、FTP等软件本地存储密码会被上传到指定服务器。木马尝试在注册表中添加启动项但是失败。

0x04详细分析
当木马运行后,会进行如下操作:
1.       检测操作系统是否运行在虚拟机(wmware等)中,系统进程列表中是否有安全工具(windbg等)和杀毒软件,如果发现自动终止运行。

2.       加载RC数据中的名为1000的资源到内存并其进行解密


3.       加载Icon资源类型下的所有资源到内存,并使用之前RC中名为1000的资源的数据对其进行解密



第一次解密

第二次解密

此时木马的主体已经暴露在外,将其dump出来,保存为可执行文件


4.       接着木马程序获取自身路径以挂起的方式创建对应的子进程,并获取对应的线程上下文CreateProcessW(0,自身路径,0,0,0,4,0,0,buf1(大小0x44), buf2(大小0x10));
5.       将子进程的主模块数据卸载

6.创建一个内存段对象,将当前进程和子进程的指定位置指定大小的内存与之“绑定”
(1)首先创建一个内存段对象

(2)两次调用下面的函数,将当前进程内存地址为0x16E000和子进程内存地址为0x400000,大小同为0xA2000(也就是释放的恶意PE的IMAGESIZE)的内存空间同时和上面创建的SectionHandle“绑定”到一起。

此时在当前进程中修改0x16E000后的内容就会间接的修改了子进程0x400000后的内容。
7.       将之前解密出来的恶意主体在当前进程中PE展开(实现PE文件加载到内存)

此时当前进程和子进程的内容应该都如图所示

8.       接着主进程恢复子进程的主线程,并结束自身进程


9.       接下来就是分析之前dump出来的主体untitle1.exe了,下面是基本文件信息,.x段很可疑

程序使用hash值获取函数地址

字符串都是局部变量字符数组,隐蔽性很强

10.   获取"SOFTWARE\Microsoft\Cryptography"下的"MachineGuid"项的键值"f9117a5d-b155-4a3e-b6c9-5ae181247d3b",加密之后,得到"5ED09A55F1832728C292E32429D73569",最后截取前0xc个字节,返回"5ED09A55F1832728C292E324",如果获取键值失败则采用结合一个固定值产生字符串。以本机为例,之后创建互斥体和之后生成的文件夹名和文件名都和"5ED09A55F1832728C292E324"有关
11.   防止自身多启动

12.   尝试窃取几乎所有的浏览器、FTP客户端中等软件保存的用户帐号:下面是执行窃取操作的循环

这里简单分析下第一个函数调用:火狐密码的窃取(1)首先,由注册表获取到路径0012FB78   00271CB8UNICODE "SOFTWARE\Mozilla\Mozilla Firefox\53.0 (x86 zh-CN)\"(2) 获取关键文件夹并用于初始化

(3)初始化之后就是读取的这三个文件获取密码

然后就关闭

10.接着获取当前用户是否具有管理员权限,当前虚拟机未打开管理员权限网络文献:以上Delphi检测用户是否具有administrator权限(OpenThreadToken,OpenProcessToken,GetTokenInformation,AllocateAndInitializeSid和EqualSid)http://www.cnblogs.com/findumars/p/5281970.html 11. 将以上所有收集到的信息发送至指定服务器其中.x段存储着服务器地址xor 0xFF后的值,每次均从中获取对应的网址

获取服务器地址

发送数据

12.接着就是移动文件到指定文件夹(并在这个过程中改文件名),并设置文件属性


13.   之后就是循环上传

14.   执行流程图

15.木马的缺陷:未能正确添加启动项
这其间获取服务器地址使用一个奇怪的函数,函数内部首先使用RSA相关的函数解密一块内存空间,然后又将释放的恶意PE的.x段与0xFF异或,之后将xor的结果覆盖到之前解密的部分,而这之间没有任何对解密部分的使用,也就是说白解密了.一开始以为是混淆,直到又看到一个函数SHRegSetPath,一开始看到就觉得应该是设置启动项,函数第一个参数是主键HKEY_LOCAL_MACHINE,但是第二个参数竟然是服务器地址,结果就是这个木马不能正确添加到启动项那么,为什么呢?往SHRegSetPath上面看看,会发现刚刚说的那个那函数,跟进去会发现它还是首先解密一块空间,

解密后就是\SOFTWARE\Microsoft\Windows\CurrentVersion\Run,这正是SubKey应该的字符串,但是之后被服务器地址无情的覆盖了,所以最后就悲剧了.这里猜测可能是作者是想改将服务器地址改为自己的(跟到过解密后的字符串,除了这个注册表的都是网址),他可能是在原来的RSA解密函数内部改的(你会发现有很多nop),在其中使用汇编将自己添加的.x段异或0xFF覆盖到返回地址,但是他没有注意到添加启动项也使用了这个函数也用于解密"\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"字符串.


整个木马详细的分析过程在附件中(真心详细),欢迎下载
链接:http://pan.baidu.com/s/1qYbpdZu 密码:mqiw 解压密码:111













ReverseZ 发表于 2017-10-15 12:12

本帖最后由 ReverseZ 于 2017-10-15 12:22 编辑

chaosregion 发表于 2017-10-15 11:10
这个马精彩的地方在自我保护代码和获取本地密码的代码
确实,但是这里是要分析整体流程,如果要写个这方面的马,里面的获取密码的确实值得逆一下,100多个,基本所有的浏览器,FTP软件都遭殃,虽然有的已经过时了

ReverseZ 发表于 2017-10-16 15:59

Hmily 发表于 2017-10-16 14:00
@ReverseZ 有空的话把正文编辑到帖子里吧,另外样本必须加压缩密码上传,不然下载会导致论坛被杀毒报毒,帖 ...

好的,有时间我精简下写个分析报告

淡じ☆vé嗼 发表于 2017-10-14 22:26

{:1_928:}厉害了大神

巛丨傀儡 发表于 2017-10-14 23:00

有趣。。。

cr4ck 发表于 2017-10-14 23:12


雾里看花,学习,感谢楼主

netCheney 发表于 2017-10-14 23:23

很清晰的思路分析,拜谢大神了

307921917 发表于 2017-10-15 08:09

写的这么详细,我怀疑你就是作者{:1_918:}

sunjayvip 发表于 2017-10-15 08:38

向前辈学习{:17_1089:}

chaosregion 发表于 2017-10-15 11:10

这个马精彩的地方在自我保护代码和获取本地密码的代码

勇者为王 发表于 2017-10-15 22:33

谢谢分享
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 一个"有趣"小马的分析之旅