hjm666 发表于 2020-4-10 18:04

已披露海莲花报告样本初次分析

本帖最后由 hjm666 于 2020-7-2 14:30 编辑

海莲花样本基础信息
MD5:e5c766ad580b5bc5f74acc8d2f5dd028c11495d2ce503de7c7a294f94583849d
文件名:Document_GPIInvitation-UNSOOC China.doc
文件大小:2.99 MB (3139367bytes)
文件类型:Rich Text Format
披露报告地址:https://www.freebuf.com/articles/network/170074.html       【别问我为啥找这么老的样本,因为Freebuf上海莲花的分析报告,要能满足我要从头到尾全分析攻击过程且上面的IOC要能在VT上找到下载的前提】
样本行为      
             病毒触发样本是一个含有CVE-2017-11882 漏洞的word诱导文档文件,在用符合该CVE漏洞版本的office打开该诱导文档后,诱导文件会触发该CVE漏洞执行一段shellcode从诱导文件的二进制资源段中释MicrosoftWindowsDiskDiagnosticResolver.exe、OUTLFLTR.DAT、rastls.dll 3个文件并执行MicrosoftWindowsDiskDiagnosticResolver.exe。其中MicrosoftWindowsDiskDiagnosticResolver.exe文件是含有有效签名的白文件,执行该白文件后会加载rastls.dll 构造的恶意dll文件;构造的恶意dll 会加载并多次解密OUTLFLTR.DAT 文件最终从该DAT资源文件中解密出3个通信相关的核心dll模块,其命名为HttpProv.dll、DnsProvider.dll、HttpProv.dll并将其在内存中运行起来,实现对攻击目标释放隐蔽持久化的后门,且根据云指令进行窃密或第二阶段等的攻击行为,且其攻击行为运用了经典的白加黑技术让用户难以检测到恶意文件。
图片演示一下大概行为

诱导文档分析      
根据CVE漏洞定位触发漏洞公式编辑器函数地址定位到要执行的shellcode数据

图表 1触发exploit
进入并调试漏洞触发要执行的shellcode

图表 2shellcode代码
在计算机系统“C:\ProgramFiles\Microsoft-Windows-DiskDiagnosticResolver_2021325962”目录创建文件并从资源文件中写入数据

图表 3创建文件

图表4写入数据

图表 5创建资源文件

图表 6创建恶意dll
利用CreateFile函数执行释放的白文件展开攻击行为

图表 7执行白文件载荷



白文件MicrosoftWindowsDiskDiagnosticResolver.exe分析      
白文件含有有效的文件签名且拥有正常函不含有恶意代码,丝毫不会引起杀毒引擎的注意。白文件唯一的作用就是调用同目录的恶意dl
l
图表 8加载dll


Rastls.dll分析
       其中Rastls.dll中含有大量的混淆代码无意义指令,其中Dllmain函数为该dll的一系列恶意操作的入口函数,Dllmain会将MicrosoftWindowsDiskDiagnosticResolver.exe内存地址00401000数据修改为无意义数据。待LoadLibraryW(rastls.dll)执行完成后MicrosoftWindowsDiskDiagnosticResolver.exe程序内存数据已修改完,跳转到rastls.dll构建好的关键函数。Rastls.dll关键函数会加载DAT资源文件数据经过两次解密后得到shellcode,会加载其中存储的名为“92BA1818-0119-4F79-874E-E3BF79C355B8.dll”的dll文件运行。      
其中该dll还有运行反调试函数

图表 9反调试函数
对内存地址数据的重写

图表 10重写内存段
重写前后数据

图表 11前后对比

图表 12前后对比
执行LoadLibrary函数前后

图表 13重写后对比

图表 14重写后对比
一堆无效指令掩盖了其真实的行为,查找指令 call eax 可在程序内存结尾地址发现其掩盖的进一步行为

图表 15入口函数

图表 16恶意代码内存地址区域
获取DAT文件句柄并读取其中的数据

图表 17获取资源文件句柄
解密文件创建密匙容器等准备工作

图表 18解密钱准备
解密资源数据

图表 19解密资源文件
数据解密前后

图表 20解密前后

图表 21解密前后
解密第一次后样本对这段数据进行了第二次解密以及伴随着多次将数据复制到其它内存中

图表 22复制内存区域数据
Rastls.dll函数偏移7570对刚解密复制到02550020的数据进行位移运算

图表 23数据转移
第二次解密后的数据(此时这段数据正是shellcode),又经过几次数据复制转移到其它内存地址后才运行这段shellcode

图表 24shellcode
Shellcode分析
       Shellcode主要就是从shellcode资源数据中加载出一个名为“92BA1818-0119-4F79-874E-E3BF79C355B8.dll”的dll格式文件自加载到内存中运行

图表 25入口


92BA1818-0119-4F79-874E-E3BF79C355B8.dll      
92BA1818-0119-4F79-874E-E3BF79C355B8.dll功能很简单就是调用DllEntry函数对资源文件进行解密解密出名为“A96B020F-0000-466F-A96D-A91BBF8EAC96.dll”的核心dll文件自加载运行,可在各自的资源中查到相关字符。

图表 26字符


A96B020F-0000-466F-A96D-A91BBF8EAC96.dll分析
       A96B020F-0000-466F-A96D-A91BBF8EAC96.dll又会调用DllEntry函数对资源文件进行解密解密出3个通信dll模块【HttpProv.dll、DnsProvider.dll、HttpProv.dll】并自加载运行。

图表 27字符信息
解密3个通信模块dll资源

图表 28解密最终数据
解密出来的资源一览

图表 29一览解密后数据
进行一段休眠后继续执行

图表 30进行休眠
紧跟着创建一个名为“26003c0069”互斥体

图表 31创建互斥体
随后不断利用VirtualAlloc函数在内存创建空间和数据写入,分别把3个dll通信模块从资源数据写入到内存中随后执行。

图表 32内存空间申请

图表 33写入数据
将写入的数据dump下来后可再字符资源中得到它们的名称其中有一个模块是同名【HttpProv.dll、DnsProvider.dll、HttpProv.dll】

还创建一个名为【Microsoft-Windows-DiskDiagnosticResolver】Windows计划任务做到持化

图表 34计划任务详情
与C&C服务器建立连接

图表 35socket连接
根据抓包信息通过域名反查可确认到此次攻击组织信息

图表 36抓包信息一览
样本利用通信模块与恶意C&C服务器建立连接后,可根据C&C服务器发送的指令做到:
1.    窃取计算机信息
2.    计算机文件操作
3.    执行远程恶意代码

溯源有点迷

抓包捕获目前样本还在发送请求的C&C服务地址:
mkggmlggnjggmbggnkggmfggngggidggmdggmbggmmggmhggniggngggmfgg.ijmlajoo.andreagahuvrauvin.com
mkggmlggnjggmbggnkggmfggngggidggmdggmbggmmggmhggniggngggmfgg.ijmlajoo.byronorenstein.com
mkggmlggnjggmbggnkggmfggngggidggmdggmbggmmggmhggniggngggmfgg.ijmlajoo.straliaenollma.xyz
由于样本是两年前披露的样本,通过C&C反查服务器ip已经不是原ip了,时间太久VT上缓存的历史数据也未能找到在报告上披露对应相关ip,当然现在到开源情报社区里找这几个C&C域名都被打上的海莲花的标签
       让人迷惑的是,我根据报告上披露的IP地址ioc在谷歌和百度上搜索,发现最早披露的报告是在18年 4-27 还是腾讯发布的这篇报告,但在此之前并没有和这个ip相关的任何报告披露过这个ip是属于海莲花的,,,,,,   emmmmm应该是人家有自己的情报没有开源出来把。
       至于拿最终释放的3个通信dll 去和已知海莲花工具生成的比对函数代码,或者是已经用过的攻击模块去对比相似度来判定这是海莲花的产品,我个人也没有网上找到相关资源,或者是有这些数据去做到这些。

总结
      吐槽【shellcode太TM大了】,,,,,   一系列的解密文件数据以及运行恶意代码全怼在里面,心路过程: 你以为你获取到核心代码---> 惊喜吧我加密了一层哦~----> 好不容易在内存里扣到代码解密完----> 惊喜吧其实我还加密了一层 【解密过程所以两句话跳过{:1_911:}】伴随着各种莫名其妙跑飞,下的断点导致内存崩溃程序死掉怀疑人生,一段段循环扣代码,还有怎么莫名其妙就执行了   【彩笔的卑微】   
认真总结 : 分析样本和shellCode过程中要对此刻断下或者在运行代码的内存地址的变化要有敏感心, shllcode的分析可利用猜测方法去下断反向推导好加快效率,通过宏观行为反向分析【这就是逆向啊,脑子很重要要带上脑子】   
如有错误还请指出,不胜感激!!

hjm666 发表于 2020-4-22 10:49

Valices 发表于 2020-4-21 15:49
dump这个我会,但是我没法dump出你说的这5个dll文件
你能打包发我一份么,我对比下我自己的dump的文件看 ...

虚拟机快照我已经清理掉了,这样本我记得调用的这几个dll都是独立另外申请出来的一段内存空间只用来写入对应dll来执行的,可以在分段写入完成后直接用OD的内存窗口直接转储出来的,如果实在要对照的话如楼上所说这个是一个经典的Denis木马,现在网上有很多的文章有迹可循或许能下载到

DualCore 发表于 2020-4-10 18:52

海莲花不就是越南那帮鼻痒么?该敲打一下了。

庞晓晓 发表于 2020-4-10 21:00

我觉得自从vs出现了scanf_s( )函数,
溢出数据构造特殊攻击指令的方法就应该已经被和谐掉了的。
难道还有软件的开发者依旧使用scanf()吗

处女-大龙猫 发表于 2020-4-11 14:53

评个分, 膜拜大神

mortalboold 发表于 2020-4-12 20:52

如果你分析的多了,你就会发现最后这个木马是海莲花的Denis木马,这个通信方式你多看看海莲花的样本。还有shellcode也是海莲花常用的,而且最后这个马dump出来应该有花指令混淆吧,也是海莲花常用的

hjm666 发表于 2020-4-13 12:12

mortalboold 发表于 2020-4-12 20:52
如果你分析的多了,你就会发现最后这个木马是海莲花的Denis木马,这个通信方式你多看看海莲花的样本。还有s ...

感谢提醒!确实还是分析APT的样本过少了,经验和能力都还不足

why17608451130 发表于 2020-4-18 05:14

海莲花样本基础信息

ms_oicq 发表于 2020-4-19 21:48

膜拜一下,一脸懵逼地进来,一脸懵逼地出去!

hfw 发表于 2020-4-20 08:59

学习一下

winbowsun1 发表于 2020-4-21 02:21

膜拜大神
页: [1] 2 3
查看完整版本: 已披露海莲花报告样本初次分析