Ocean Lotus样本分析

xiaoeryu Lv5

0x00样本简介

​ 该样本是2018年5月份国内某安全厂商威胁情报系统捕获的一起针对中国及其他东亚地区国家政府、科研单位领域的攻击样本,该APT组织确认为APT-32(海莲花OceanLotus)。
​ 此次攻击载体选用的是.doc后缀的rtf文件,该rtf文件通过利用漏洞CVE-2017-11882释放恶意文件到本地并加载执行。其释放文件利用了白加黑的组合加载手法逃避杀软的查杀,在运行过程中并无我们常见的多级注入行为,也并没有文件落地,具有较强的隐蔽性。原始样本信息如表1所示。

文件名称 Document_GPI Invitation-UNSOOC China.doc
Md5 02ae075da4fb2a6d38ce06f8f40e397e
文件类型 Rtf
表1

0x01攻击流程

该样本首先通过利用Office公式编辑器模块在解析公式名时候出现的栈溢出漏洞CVE-2017-11882释放三个文件(MicrosoftWindowsDiskDiagnosticResolver.exe,rastls.dll和OUTLFLTR.DAT)到本地临时目录,然后执行释放的PE文件。MicrosoftWindowsDiskDiagnosticResolver.exe是一个拥有合法签名的PE文件,该PE文件运行期间会加载rastls.dll(注意系统目录下也有一个同名DLL)。rastls.dll模块DllMain会将宿主PE的代码段内容进行CSP加密混淆,并且会hook代码段后续一个位置,劫持EIP至DLL里面的函数,继而加载OUTLFLTR.DAT。然后从OUTLFLTR.DAT解密出shellcode1,跳转执行shellcode1.后续将.DAT文件解密变形出多个DLL文件,这些内存中的DLL文件将导入网络功能、注册表功能等所需的系统资源DLL。最终将执行其窃密、远控等恶意功能。其运行流程如下图所示。

图1 样本执行流程

0x02详细分析

漏洞部分该报告不分析,我们直接分析其释放文件。

MicrosoftWindowsDiskDiagnosticResolver.exe是一个白签名文件(如图2所示),我们从rastls.dll着手分析。调试器挂载MicrosoftWindowsDiskDiagnosticResolver.exe,跟进rastls.dll模块,结合IDA反汇编可以快速跟踪到对宿主代码段加密部分(图3)。

图2 文件签名信息和VT检测信息
图3 对宿主PE.text段加密混淆

然后修改0x40c19b处的代码为call sub_6e771ed0。

图4 劫持宿主EIP

sub_6e771ed0是rastls.dll中的函数,IDA可观察到明显的文件操作行为。

图5 sub_6e771ed0函数(图中偏移0x1ED0即sub_10001ED0)

在sub_6e771ed0内部下断或下断文件操作相关API,可跟踪到程序调用CreateFileW加载OUTLFLTR.DAT文件(图6)

图6 加载OUTLFLTR.DAT

随后将在OUTLFLTR.DAT文件中提取处指定位置资源解析出相应的shellcode1(图7),并跳转执行shellcode(图8)。

图7 解密提取shellcode
图8 跳转到对缓冲区的shellcode执行

Shellcode1中继续从提取的资源中解密出第一个动态链接库文件,名为{92BA1818-0119-4F79-874E-E3BF79C355B8}.dll。跳转到经PE解析得到的该DLL的OEP位置。DLLMain函数并无特殊功能,其提供的大量局部函数片段将服务shellocde。

图9 找到第一个DLL资源({92BA1818-0119-4F79-874E-E3BF79C355B8}.dll)
图10 修复IAT之后跳入{92BA1818-0119-4F79-874E-E3BF79C355B8}.dll OEP

此时我们Dump出修复之后的DLL文件(可对VirtualProtect下断快速找到堆区的DLL文件)。修改Dump文件的文件对齐即各区段偏移之后,直接IDA反汇编以辅助我们动态跟踪。

图10 IDA反汇编中找到的DLL签名信息

执行完{92BA1818-0119-4F79-874E-E3BF79C355B8}.dll DllEntry之后,返回至shellcode1,后续将调用{92BA1818-0119-4F79-874E-E3BF79C355B8}.dll中的构造好的代码片段寻找第二个DLL资源。

图11 寻找第二个DLL资源

找到第二个DLL之后,程序流会解密出第二段shellcode2,跳转执行shellcode2,然后修复找到的DLL,跳转到新的DLL OEP。

图12 解密出shellcode2,跳转执行
图13 跳入修复后的DLL({A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll)
图14 {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll签名信息

{A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll与第一个DLL类似,其DllEntry无特别作用,但是它提供了针对源资源的解密方法,后续的程序流程中将调用揭秘方法解密出敏感信息(如网络相关的CC)。此外该DLL将会继续解密提取出三个网络相关的动态链接库文件。

图14 位于{A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll内的资源解密函数

继续解密修复第三个DLL资源。

图15 解密出的第三个DLL(HttpProv.dll)
图16 HttpProv.dll签名信息

HttpProv.dll提供了一个重要的导出函数CreateInstance。

图17 HttpProv.dll->CreateInstance
图18 创建新的线程

解密出第四个DLL资源。

图19 跳转执行DnsProvider.dll OEP
图20 DnsProvider.dll签名信息

设置图标资源相关的注册表值选用REG_OPTION_NON_VOLATILE方式,即只在内存中有效,无实际注册表修改。猜测这应该也是一种隐蔽自身的手段。

图21 注册表设置

解密出最后一个DLL资源。

图22 HttpProv.dll
图23 HttpProv.dll签名信息

解密出的这些DLL文件在其初始化过程中将会载入网络模块相关系统资源,然后将进行本地数据上传、远程CC连接等行为。

图24我们待资源解密之后提取的敏感信息
图25 远程CC服务器连接
图26 将本地用户信息加密之后上传
图27 远程域名请求行为

0x03 IOC

网络C2

回连域名 andreagahuvrauvin.comstraliaenollma.xyzbyronorenstein.com

释放文件及中间件哈希

文件名 MD5
MicrosoftWindowsDiskDiagnosticResolver.exe 62944e26b36b1dcace429ae26ba66164
OUTLFLTR.DAT b10f93cdbcdf43d4c5c5770872e239f4
rastls.dll f775cc387a55831386e44dd00ef9723e
{92BA1818-0119-4F79-874E-E3BF79C355B8}.dll 93b6996fe1f5a91400b76f4a56f56a0c
{A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll 76a4d8da378ad191e3d93d210c217e59
HttpProv.dll b8df4f077f900878871dddea14774bc5
DnsProvider.dll a5ad1094870ffaa5129b51a840d497cd
HttpProv.dll c2941048fa90d98147e8f0790b708657

0x04总结

此次捕获的由APT组织海莲花针对我国发起的攻击活动的高危情报,该样本选用伪装成doc文件的RTF文档作为攻击载体,利用了常见的栈溢出漏洞CVE-2017-11882,当用户打开后缀为.doc的文档时,若没有更新该漏洞补丁则会触发漏洞释放内嵌的资源文件到本地。释放文件采用了白利用技术绕过常规杀软检测,在木马运行过程中无文件落地并且也没有进行常规木马的可信进程注入行为。解析的shellcode存在较多的加密混淆操作,后续的窃密远控行为分为多线程执行,其执行流程在内存中解密出的多模块间跳转,这些操作一定程度上加大了逆向分析难度。总结来说,该样本具有较强的隐蔽性,较高的稳定性,其蓄谋攻击可见一斑。

  • 标题: Ocean Lotus样本分析
  • 作者: xiaoeryu
  • 创建于 : 2021-05-24 15:51:57
  • 更新于 : 2022-11-14 22:15:42
  • 链接: https://github.com/xiaoeryu/2021/05/24/Ocean-Lotus样本分析/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论