APT_海莲花分析报告02
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的主体进程文件,在一定程度上能逃避杀软查杀。如图:
查看正常白文件WPS的导入表,可如下图所示Krpt.dll
正是其需要的导入模块。当受害者双击运行伪装成Word文件的WPS应用程序时,WPS主体进程便会加载恶意DLL文件Krpt.dll
来执行其恶意代码。WPS的导入表如图:
分析恶意dll
经过分析,两个伪装成Word的文件都为WPS主体进程,是一样的。另外两个DLL文件基本上也都是一样的,主要区别在于存储在资源中的要释放并打开的Word文档不同(见动图“海莲花”),以及极个别shellcode中的几个字节不同。下面主要以一个DLL文件为主进行分析,将在两个DLL的不同处,进行说明。
然后再查看恶意krpt.dll
文件的导出表,发现其唯一的导出函数?_force_link_krpt@@YGXXZ
正是WPS软件调用该模块的导入函数(可对照图[WPS表入表]中的导入函数),恶意krpt.dll的导出表,如图2:
当WPS调用该导出函数时,便会执行攻击者的恶意代码。不过在分析该导出函数?_force_link_krpt@@YGXXZ
前,还发现其在dllmain中还有修改主程序入口点的操作。
由于WPS是VC++(2010)编译的,其入口前两条指令为call xxxx,jump xxxx。那么对应的第一个机器码便是==E8==(为修改其入口点,使其跳转到恶意代码中执行提供可能),正常的入口点代码如图2:
当加载该恶意的krpt.dll之后,并运行其dllmain函数时,便会将WPS程序入口点偏移+1位置处的机器码修改为到达函数?_force_link_krpt@@YGXXZ
的偏移,使WPS进程直接跳进该函数中执行恶意代码。修改WPS进程代码如图3:
修改后在WPS程序入口点,将直接跳转到函数?_force_link_krpt@@YGXXZ
中去执行。修改后如图4:
分析导出函数
释放docx文件
首先从资源String Table中取出文件名字符串==湖南省家禽H5N1亚型高致病性禽流感疫情情况.docx(近期较为流行的话题)==,然后通过函数ExpandEnvironmentStringW
获取临时目录,并将临时目录与文件名拼接起来,在通过函数PathFileExistsW
来判断该文件是否存在。如图5:
资源String Table中的文件名字符串,如图6:
当该文件不存在时,便从资源asdklfjghedjihasio的102中取出docx的二进制数据,并根据之前拼接出的路径==C:\Users\sam\AppData\Local\Temp\湖南省家禽H5N1亚型高致病性禽流感疫情情况.docx==,将资源中的docx数据写入该文件,如图7:
其中资源asdklfjghedjihasio中的102二进制数据,如图8:
写入完该docx文件,或是之前判断的该文件已存在时,便会通过函数ShellExecuteW
来打开该docx文件。这么做的目的是为了==迷惑受害主机,运行WPS后能打开正常的docx文件。==如图9:
打开后的湖南省家禽H5N1亚型高致病性禽流感疫情情况.docx,如图10.1:
打开后的冠状病毒实时更新:中国正在追踪来自湖北的旅行者.doc,如图10.2:
执行shellcode
运行完docx后,将再从资源asdklfjghedjihasio的101中取出shellcode,然后调用VirtualAlloc
开辟虚拟内存空间,将恶意代码写入并执行,如图11:
资源asdklfjghedjihasio的101中的shellcode,如图12.1:
两个DLL资源中的shellcode大体上也是一样的,两个dll资源中包含的shellcode二进制对比结果如图:
动态获取API
解密完之后,首先通过fs
寄存器获取PEB,然后通过遍历PEB获取Kernel32.dll的模块基址(句柄),如图13:
获取到kernel32.dll模块的基址后,遍历导出表获取函数名称表、函数名称序号表、函数地址表,如图14:
然后计算遍历到的函数名的hash值,然后与预先算好的需要的函数的hash进行比较,当比较成功时,便获取该函数地址,如图15获取函数LoadLibrary:
初始化数据
通过上面方法,获取了大量的API
,然后在将经过处理的数据经过Switch分支进行重新拼接,需要经过Switch进行拼接处理的数据,如图16(其中标黄的为switch匹配的字符):
经过Switch处理后的数据,其中比较重要的有C&C:==libjs.inquirerjs.com==,Http通信方式==Get==,以及获取到的当前操作系统信息==/script/x.png?CN=WIN-S5OSAV0J2LE&UN=sam&C=Windows_NT==,如图17:
与C&C服务器通信获取指令执行
重新处理完这些数据后,便开始尝试与C&C服务器进行链接,将之前初始化的字符串数据发送到C&C服务上,如图18:
并且不断重C&C服务器接受数据,最终在执行获取到的数据。如图19:
内存中展开denis远控
然后上面这些网络通信获取指令执行的前提是Http会话打开成功,而krpt.dll这个恶意样本在WinHttpOpen时(见图18),传输的5个参数为全0,就导致打开会话失败,如图20:
推测该krpt.dll本意并不想产生网络数据(受害主机可能为隔离网环境),当WinHttpOpen失败时,便会加载准备好的denis远控,PE数据为数据段存储在shellcode中,并且直接在内存中将其按段展开,修复IAT重定位等,最终运行该==denis远控==程序。
shellcode函数表,先执行函数sub_17C下载执行shellcode,当失败时,便加载预先准备好的denis远控程序,如图21:
用同样遍历PEB的方式获取Kernel32的模块基址,来获取函数LoadLibrary
和GetProcAddress
,如图22:
然后在通过这两个函数来获取开辟内存相关的函数VirualAlloc、RtlMoveMemory、RtlZeroMemory
,利用这些函数将denis远控软件各个区段展开,获取函数如图23:
先拷贝DOS头和NT头之后,再将节表中的数据按照区段一个一个来解密,再解密节表的同时,也将对应的区段数据进行解密,并拷贝至相应的偏移处,其中解密节表如图:
解密区段数据如图:
最终将区段拷贝至相应的偏移处,如图:
最终通过函数GetProcAddress
来 修复IAT表,如图:
最终跳转到denis 远控的程序入口点执行远控,如图24:
大量花指令的dnis远控
虽然该Shellcode是将各个区段的数据解密后,直接将其放入对应的VirtualAddress中的。但是笔者这里将每一段解密数据还原到RAW地址上。最终将完整为展开的denis
远控dump了下来,不过经过分析,该denis中含有大量花指令,严重影响进一步分析,这里笔者就没有再继续分析下去了。denis
远控从资源中去数据,如图:
调试denis Rat获取到的解密后的参数指令,如图:
0x03 样本溯源
C&C服务器 |
---|
libjs.inquirerjs.com |
0x04 总结
从上文的分析可以看出海莲花组织在白加黑利用技术、代码混淆等方面都有着很深的技术积累。后门木马不落地直接内存执行、签名程序白利用、shellcode隐藏可执行文件、多变的网络通信等技术手段大大增加了杀软的查杀难度。因此,我们提醒政府、企业等广大用户,切勿随意打开来历不明的文档,同时安装安全软件。