【天穹】案例:通过钓鱼邮件传播的IcedID窃密软件
/ / 点击 / 阅读耗时 19 分钟一、概述
近日,天穹沙箱发现一个有趣的样本,通过C2关联查询发现其为TA551组织通过恶意邮件分发的IcedID恶意窃密软件(TA551 Malspam: Spread Malicious Email Campaigns - Threatcop)。该样本是一个包含加密ZIP文件的电子邮件,其中密码存放在邮件正文中。解密后,压缩包内包含一个ISO文件,ISO文件中包含一个快捷方式、一个CMD文件、一张图片和一个伪装成图片的DLL文件。该样本的开发者花费了大量心思,通过深度的层层伪装使其极具迷惑性,导致许多沙箱无法正确分析。然而,得益于天穹沙箱多维度的深度检测功能,通过对邮件、压缩包、可执行文件进行全面的分析,我们能够呈现该样本全面完整的攻击手段和过程。
二、样本信息
该样本的基本信息如下:
- SHA1:1E882F16874455E13429AD9428C7177B5061D3B7
- 文件名:fd5109923fdd0d6e3bfd7ab764d07cf4.oft
- 文件类型:oft
- 文件大小:314KB
三、样本分析
1. 样本投递
天穹沙箱开箱即用,只需将样本拖进投递窗口,等待报告结果即可。
2. 静态检测
该样本为一个oft格式的文件,这是由微软开发的Outlook文件模板,通过邮件预览功能,可发现邮件内包含一个加密的zip压缩包,而密码则存储于正文中,如图2所示。
对于许多沙箱系统而言,分析过程通常需要用户手动提供邮件正文中的密钥才能成功解压文件,否则无法进行后续的动态分析。然而,天穹沙箱内置了邮件密钥提取功能,能够从邮件中寻找疑似密钥,并使用这些密钥自动完成附件的解压过程。此外,如果ZIP压缩包内还嵌套了一个ISO文件,天穹沙箱还提供了嵌套压缩包解压功能,能够一并完成解压过程。如图3所示,天穹沙箱具备智能提取密钥并完成嵌套解压的能力,从而实现了高度自动化的分析功能。
同时,通过压缩包检测功能,可发现该压缩包内包含一个可疑快捷方式,其指向了一个高风险文件matter.cmd
:
最后,通过查看完全解压文件列表,可发现附件中总共四个文件,分别为一个cmd文件,一个快捷方式,一张png格式的图片和一个伪装为png图片的dll文件,如图5所示,除了png图片外,其余文件经过沙箱鉴定均为高危。
3. 解压文件分析
3.1 静态文件分析
如图6所示,首先分析FILES.lnk
文件,因为ISO压缩包对其他文件进行了隐藏,而该快捷方式的图标指向了PhotoViewer.dll
。如果受害者主机未开启显示隐藏文件功能,用户只会看到一个无后缀的图标文件。
如图7所示,一旦用户点击该快捷方式,隐藏的文件matter.cmd
就会立即执行。
接下来分析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所示:
当然我们也可以通过查看报告中的进程树快速查看脚本执行的shell命令,如图9所示,相较于静态分析,这种方法能节约不少时间:
3.2 DLL分析
通过前面的分析,我们已知reason_complete.png
是一个64位的dll文件,其批处理脚本会加载其导出函数Tjdbhasbs
,在分析该函数前,首先注意到DllEntryPoint
处插入了大量无用的jmp和mov作为垃圾指令,其作用是干扰调试和拖慢分析时间:
导出函数Tjdbhasbs
主要执行以下操作:
- 通过Hash获取两个接口
WaitForMultipleObjectsEx
和CreateEventA
的地址 - 调用CreateEventA创建一个事件对象
- 调用WaitForMultipleObjectsEx等待该事件对象发生变化,如果超时(超时为24.278秒),则返回258,执行if块sub_180001899函数
sub_180001899主要执行以下操作:
- 通过Hash获取接口
VirtualAlloc
的地址 - 解密加密后的shellcode
- 执行shellcode
3.3 Shellcode分析
通过调试发现,此shellcode本质是一个Loader,此时二阶段shellcode以hex加密的形式被加载到内存中:
随后解密二阶段shellcode,并通过LoadLibrary和GetProcAddress动态加载接口VirtualAlloc
、VirtualProtect
和GetNativeSystemInfo
,并将解密后的shellcode加载到内存中:
最后Loader会创建一个线程执行该shellcode,此时shellcode的内存属性为RW:
第二段shellcode本质是一个64位的dll,其基本信息如下:
dll入口函数会执行sub_180002174,在sub_180002174函数中,首先调用rdtsc和sleep函数进行4次延时,解密C2地址,并生成Cookie:
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字段数据,在沙箱的联网活动追踪中可看到网络活动:
请求报文如下:
1 | GET / HTTP/1.1 |
在正常情况下,C2会返回加密后的shellcode,且样本会检测shellcode正确性,但截止发稿时,虽然C2可正常建立连接,但相关服务已关闭,收到请求后固定返回this is a sinkhole.字段,意为这是一个天坑,这可能是因为域名已被安全人员接管。通过使用司南分析发现,该域名在2022年10月曾被解析到165[.]232[.]181[.]177,而后又于2023年5月解析到80[.]78[.]24[.]30:
响应报文如下:
1 | HTTP/1.1 200 OK |
后续分析发现,在shellcode校验通过后,样本会在c:\ProgramData\
和TEMP
目录下创建子目录,并在子目录中创建文件并写入报文。
随后样本会将C:\ProgramData\
下写入的文件加载并解密,获取导入函数地址,修改内存属性后执行三阶段shellcode。由于三阶段shellcode无法下载,因此无法对其进行分析,根据之前的分析,我们猜测三阶段shellcode或许还会有更多有趣的“套娃”操作。
最后样本会设置Cookie _s字段,并再次向C2发起GET请求,推测是用于告知C2三阶段shellcode已加载。
sub_180002174执行结束后,样本将全局变量dword_180005000设为1,通过分析发现,导出函数DllGetClassObject
、DllRegisterServer
、PluginInit
和RunObject
都会间隔1s检测该变量值,一旦变量为1则退出进程,推测这些接口可能用于开发者调试,方便检测dll是否执行成功。
四、IOC
1 | 1E882F16874455E13429AD9428C7177B5061D3B7 |
注意:截止发稿时,样本C2仍存活,但相关服务已下线,不排除再次启用。
参考案例链接:
五、 技术支持与反馈
星图实验室深耕沙箱分析技术多年,致力于让沙箱更好用、更智能。做地表最强的动态分析沙箱,为每个样本分析人员提供便捷易用的分析工具,始终是我们最求的目标。各位同学在使用过程中有任何问题,欢迎联系我们。
天穹沙箱支持模拟14种CPU架构的虚拟机,环境数量50+,全面覆盖PC、服务器、智能终端、IoT设备的主流设备架构形态。在宿主机方面,除了Intel/AMD的x86架构CPU和CentOS操作系统之外,天穹沙箱支持海光、飞腾、鲲鹏等x86、ARM架构国产CPU和银河麒麟、中科方德等信创操作系统。
天穹沙箱系统以云沙箱、引擎输出、数据接口等多种形式服务于公司各个业务部门,包括天眼、终端安全、态势感知、ICG、锡安平台、安服等。
天穹内网地址(使用域账号登录):https://sandbox.qianxin-inc.cn
天穹公网地址(联系我们申请账号):https://sandbox.qianxin.com