海莲花分析报告

0x00 概述

2020年的2月前后,我国爆发了急剧传染性质的新型冠状病毒(2019-nCoV),举国上下防范新型冠状病毒。然而却有不法分子借由此热点事件来传播电脑病毒。就如本片文章分析的由”海莲花(OceanLotus)“组织发起的的恶意攻击,借由新型冠转病毒这一热点事件来诱导受害者运行恶意文件,来达到往目标主机植入远控软件的目的。

海莲花”(又名APT32、OceanLotus),被认为是来自越南的APT攻击组织,自2012年活跃以来,一直针对中国大陆的政府部门、海事机构、外交机构、大型国企、科研机构以及部分重要的私营企业等进行攻击活动,是近几年来针对中国大陆进行攻击活动最活跃的APT攻击组织,甚至没有之一。

本次样本是由Gcow团队提供的,Gcow团队共捕获到了最新的海莲花样本5个,并将其中的2个样本交由我来分析。下面就开始剖析该样本。

样本信息

样本名称 文件类型
冠状病毒实时更新:中国正在追踪来自湖北的旅行者 可执行程序
湖南省家禽H5N1亚型高致病性禽流感疫情情况 可执行程序
Krpt.dll 动态链接库文件

样本信息图

流程图

海莲花流程图

0x01 动态行为

海莲花

0x02 样本详细分析

DLL劫持

本次==海莲花==组织是通过利用白文件WPS在其运行时会加载krpt.dll这一特点,将原本正常的krpt.dll文件替换为同名恶意动态链接库文件(DLL劫持),来实现往目标主机植入远控软件的。

样本信息图中不难看出,名为“冠状病毒实时更新:中国正在追踪来自湖北的旅行者、湖南省家禽H5N1亚型高致病性禽流感疫情情况”实则为应用程序(.exe)。通过伪装为正常的WORD文件,并起名为实时热点信息(新型冠状病毒相关),来诱导用户点击。不仅如此该可执行文件还是正常白文件WPS的主体进程文件,在一定程度上能逃避杀软查杀。如图:

image-20200319233917982

查看正常白文件WPS的导入表,可如下图所示Krpt.dll正是其需要的导入模块。当受害者双击运行伪装成Word文件的WPS应用程序时,WPS主体进程便会加载恶意DLL文件Krpt.dll来执行其恶意代码。WPS的导入表如图:

WPS的导入表

分析恶意dll

经过分析,两个伪装成Word的文件都为WPS主体进程,是一样的。另外两个DLL文件基本上也都是一样的,主要区别在于存储在资源中的要释放并打开的Word文档不同(见动图“海莲花”),以及极个别shellcode中的几个字节不同。下面主要以一个DLL文件为主进行分析,将在两个DLL的不同处,进行说明。

然后再查看恶意krpt.dll文件的导出表,发现其唯一的导出函数?_force_link_krpt@@YGXXZ正是WPS软件调用该模块的导入函数(可对照图[WPS表入表]中的导入函数),恶意krpt.dll的导出表,如图2:

图2

当WPS调用该导出函数时,便会执行攻击者的恶意代码。不过在分析该导出函数?_force_link_krpt@@YGXXZ前,还发现其在dllmain中还有修改主程序入口点的操作。

由于WPS是VC++(2010)编译的,其入口前两条指令为call xxxx,jump xxxx。那么对应的第一个机器码便是==E8==(为修改其入口点,使其跳转到恶意代码中执行提供可能),正常的入口点代码如图2:

image-20200315002835605

当加载该恶意的krpt.dll之后,并运行其dllmain函数时,便会将WPS程序入口点偏移+1位置处的机器码修改为到达函数?_force_link_krpt@@YGXXZ的偏移,使WPS进程直接跳进该函数中执行恶意代码。修改WPS进程代码如图3:

图3

修改后在WPS程序入口点,将直接跳转到函数?_force_link_krpt@@YGXXZ中去执行。修改后如图4:

图4

分析导出函数

释放docx文件

首先从资源String Table中取出文件名字符串==湖南省家禽H5N1亚型高致病性禽流感疫情情况.docx(近期较为流行的话题)==,然后通过函数ExpandEnvironmentStringW获取临时目录,并将临时目录与文件名拼接起来,在通过函数PathFileExistsW来判断该文件是否存在。如图5:

图5

资源String Table中的文件名字符串,如图6:

图6

当该文件不存在时,便从资源asdklfjghedjihasio的102中取出docx的二进制数据,并根据之前拼接出的路径==C:\Users\sam\AppData\Local\Temp\湖南省家禽H5N1亚型高致病性禽流感疫情情况.docx==,将资源中的docx数据写入该文件,如图7:

图7

其中资源asdklfjghedjihasio中的102二进制数据,如图8:

图8

写入完该docx文件,或是之前判断的该文件已存在时,便会通过函数ShellExecuteW来打开该docx文件。这么做的目的是为了==迷惑受害主机,运行WPS后能打开正常的docx文件。==如图9:

图9

打开后的湖南省家禽H5N1亚型高致病性禽流感疫情情况.docx,如图10.1:

图10.1

打开后的冠状病毒实时更新:中国正在追踪来自湖北的旅行者.doc,如图10.2:

image-20200320232439706

执行shellcode

运行完docx后,将再从资源asdklfjghedjihasio的101中取出shellcode,然后调用VirtualAlloc开辟虚拟内存空间,将恶意代码写入并执行,如图11:

图11

资源asdklfjghedjihasio的101中的shellcode,如图12.1:

图12.1

两个DLL资源中的shellcode大体上也是一样的,两个dll资源中包含的shellcode二进制对比结果如图:

图12.2

动态获取API

解密完之后,首先通过fs寄存器获取PEB,然后通过遍历PEB获取Kernel32.dll的模块基址(句柄),如图13:

image-20200315212941594

获取到kernel32.dll模块的基址后,遍历导出表获取函数名称表、函数名称序号表、函数地址表,如图14:

图14

然后计算遍历到的函数名的hash值,然后与预先算好的需要的函数的hash进行比较,当比较成功时,便获取该函数地址,如图15获取函数LoadLibrary:

图15

初始化数据

通过上面方法,获取了大量的API,然后在将经过处理的数据经过Switch分支进行重新拼接,需要经过Switch进行拼接处理的数据,如图16(其中标黄的为switch匹配的字符):

图16

经过Switch处理后的数据,其中比较重要的有C&C:==libjs.inquirerjs.com==,Http通信方式==Get==,以及获取到的当前操作系统信息==/script/x.png?CN=WIN-S5OSAV0J2LE&UN=sam&C=Windows_NT==,如图17:

图17

与C&C服务器通信获取指令执行

重新处理完这些数据后,便开始尝试与C&C服务器进行链接,将之前初始化的字符串数据发送到C&C服务上,如图18:

图18

并且不断重C&C服务器接受数据,最终在执行获取到的数据。如图19:

图19

内存中展开denis远控

然后上面这些网络通信获取指令执行的前提是Http会话打开成功,而krpt.dll这个恶意样本在WinHttpOpen时(见图18),传输的5个参数为全0,就导致打开会话失败,如图20:

图20

推测该krpt.dll本意并不想产生网络数据(受害主机可能为隔离网环境),当WinHttpOpen失败时,便会加载准备好的denis远控,PE数据为数据段存储在shellcode中,并且直接在内存中将其按段展开,修复IAT重定位等,最终运行该==denis远控==程序。

shellcode函数表,先执行函数sub_17C下载执行shellcode,当失败时,便加载预先准备好的denis远控程序,如图21:

图21

用同样遍历PEB的方式获取Kernel32的模块基址,来获取函数LoadLibraryGetProcAddress,如图22:

image-20200315225044013

然后在通过这两个函数来获取开辟内存相关的函数VirualAlloc、RtlMoveMemory、RtlZeroMemory,利用这些函数将denis远控软件各个区段展开,获取函数如图23:

图23

先拷贝DOS头和NT头之后,再将节表中的数据按照区段一个一个来解密,再解密节表的同时,也将对应的区段数据进行解密,并拷贝至相应的偏移处,其中解密节表如图:

解密节表

解密区段数据如图:

解密区段数据

最终将区段拷贝至相应的偏移处,如图:

image-20200315230032163

最终通过函数GetProcAddress来 修复IAT表,如图:

image-20200315230144540

最终跳转到denis 远控的程序入口点执行远控,如图24:

图24

大量花指令的dnis远控

虽然该Shellcode是将各个区段的数据解密后,直接将其放入对应的VirtualAddress中的。但是笔者这里将每一段解密数据还原到RAW地址上。最终将完整为展开的denis远控dump了下来,不过经过分析,该denis中含有大量花指令,严重影响进一步分析,这里笔者就没有再继续分析下去了。denis远控从资源中去数据,如图:

image-20200320234727750

调试denis Rat获取到的解密后的参数指令,如图:

image-20200315230735789

0x03 样本溯源

C&C服务器
libjs.inquirerjs.com

0x04 总结

从上文的分析可以看出海莲花组织在白加黑利用技术、代码混淆等方面都有着很深的技术积累。后门木马不落地直接内存执行、签名程序白利用、shellcode隐藏可执行文件、多变的网络通信等技术手段大大增加了杀软的查杀难度。因此,我们提醒政府、企业等广大用户,切勿随意打开来历不明的文档,同时安装安全软件。