11月黑产组织银狐向财务关联人员投递.chm诱饵文件

前言

此类型样本并非首次曝光,但是它涉及技术手法较为丰富且体系化,涉及”jsp、net、C++“三种类型的shellcode。如果你没有木马样本分析经验,也可以简单了解一下钓鱼邮件附件执行后有哪些恶意操作。如果正在学习木马样本分析,可以照着文章调试一遍,我会在一些关键步骤做解释说明,相信会有收获。

背景

在2023年初至今,东南亚区域的中文黑灰产圈通过微信QQ等即时通信工具、邮件以及伪造工具网站的方式大肆对境内金融、教育、电商、货运、设计等各行各业进行钓鱼攻击,其主要目的为攻击相关公司的财务或信息人员,进行诈骗活动窃取目标资金或获取其他信息数据。

此篇文章记录了目标组织主要的钓鱼手法之一。

样本基本信息

在相关人员邮箱中发现一份带诱导性描述的邮件,其附件信息如下。

HASH
SHA256:
2edc73c7d2f05fe9ccc078b3456cb1fdfb25e1d7d042b027a038d2a67c1d5a46
MD5:
d0d11b0cef237ca7db83d2de86d6ca7d
SHA1:
2297c9b2004d3ce994bfdaa201f0b678b02925b1

文件类型:
MS Windows HtmlHelp Data(.chm)

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

执行流程

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

样本分析

1 初始恶意附件“.CHM”文件

“.chm”文件常常被各个黑客组织或个人作为邮件附件,广泛利用于钓鱼攻击中。用解压缩软件打开即可,解压如下。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

“test.html”文件包含可疑代码(大段的密文,一般是待解密的shellcode,正常工作邮件不会发这样的附件)。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

“.chm”文件是什么?—-“.chm”文件是“Compiled HTML Help”的缩写,是一种Windows平台帮助文档的文件格式。具体来说是一组编译打包好的 HTML 页面、图像或其他资源,可以用解压软件打开。

“.chm”文件是如何被黑客利用的?—-“.chm”文件支持脚本语言JavaScript和VBScript,攻击者可以在脚本中构造外恶意资源下载和执行、计划任务、开机启动项、痕迹清理等恶意功能。

1.1 “test.html”静态分析

函数”Base64ToStream”功能为将Base64编码的数据转换为字节流。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

定义了三段密文字符串和其长度,即待解密的shellcode。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

随后初始化一个WScript.Shell对象,用于操作Windows Shell。通过shell读取注册表中的.NET Framework版本号(可以联想到密文可能会解密出“.net”的shellcode),如果读取失败则将stage_3赋给stage_1,并将版本号设置为v2.0.50727。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

随后将进程环境变量COMPLUS_Version设置为.NET Framework版本号。随后调用函数“Base64ToStream”尝试将stage_1(经过Base64编码的二进制数据)反序列化为对象,若出现异常则对stage_2做相同操作。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

我刚开始没有找到执行的位置,看了些资料才知道BinaryFormatter的Deserialize函数进行反序列化时,其中包含的代码将在系统中执行,反序列化为对象的过程中,恶意代码已经执行了。

接下来就需要动态调试查看明文的shellcode有什么功能了。

1.2 “test.html”动态调试

1.2.1 stage_1解密

复写其转码和反序列化程序(代码在后面),将恶意代码输出为hex流,用winhex打开查看。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

将ascll码部分取出格式化,这一部分就是“stage_1”的明文信息了。功能大致是关闭“DisableActivitySurrogateSelectorTypeCheck”类型检查以绕过高版本框架对ActivitySurrogateSelector类的滥用。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

(function task() {
    function base64ToArrayBuffer(base64) {
        const binaryString = window.atob(base64);
        const len = binaryString.length;
        const bytes = new Uint8Array(len);

        for (let i = 0; i < len; ++i) {
            bytes[i] = binaryString.charCodeAt(i);
        }

        return bytes.buffer;
    }
    //过长没有完全展示
    var stage_1 = "AAEAAAD/////AQAAAAAAAAAMAgAAAF5NaWNyb3NvZnQuUG93ZXJTaGVsbC5FZGl0b3IsIFZlcnNpb249My4wLjAuMCwgQ3VsdHpc3U";
    var stage_1_size = 2341;

    // 解码 Base64 字符串为 ArrayBuffer
    var stage1ArrayBuffer = base64ToArrayBuffer(stage_1);

    // 将 ArrayBuffer 转换为十六进制字符串
    var hexString = Array.from(new Uint8Array(stage1ArrayBuffer))
        .map(byte => byte.toString(16).padStart(2, '0'))
        .join(' ');

    // 输出十六进制字符串
    console.log(hexString);
})();

这段调试有点折磨到我,按一般经验用IE浏览器控制台就可以,但它调用的一些控件貌似浏览器不支持,最后实在不行,就复写了它的调试代码如上,把调试结果按hex流输出

1.2.1 stage_2解密

用相同方法调试出stage_2(stage_2与stage_3貌似没什么区别)。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

看着没什么头绪,但发现在stage_2中包含有一个PE文件,以“4D5A”为起始重新保存一个文件。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

保存后查看其文件信息,一个“.NET(v4.0.30319)”的dll模块,但我在反序列化出的二进制流中,没有看明白dll是怎么调用的。接下来就分析这个模块。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

在stage2中,可以看到其存在PDB路径“2023-TianMa~\\TMAir_Ghost10.0_dev_vs2022标记v4.2.0\\CHM\\KH\\TestAssembly\\obj\\Release\\TestAssembly.pdb”,表明其该攻击者使用的后续载荷为Ghost10.0版本修改的变种,且名称为TianMa。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

2 “.NET”恶意模块分析

2.1 “.NET”模块静态分析

“.net”的程序用工具“dnSpy”分析,相比”CC++“恶意程序的逆向分析,”.net“程序几乎是源码,看起来比较简单。使用“dnSpy”打开在明文stage_2中还原的二进制文件做静态分析。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

包括两个功能模块”shellcode“和”TestAssembly“。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

在”TestAssembly“中,首先定义了一个字典keyValuePairs,在”cuserssearches“下生成一个随机字符的文件。随后拼接”https://muchengoss.oss-cn-hongkong.aliyuncs.com/“和目标文件“svchost.exe”,“libcef.dll”,“libcef.png”,“decod.exe”,“cache.dat”放入字典中。

随后调用Shellcode类中的Load2方法加载shellcode。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

load2方法判断操作系统版本,然后根据版本加载不同的shellcode。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

x86架构shellcode长度62464字节。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

x64架构shellcode长度99840字节。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

2.2 “.NET”模块中的shellcode定位

我分析64位的shellcode。在dnspy中貌似不好定位,可以在winhex中全局搜索字符流。下图是x64架构shellcode定义部分,字符”77906982“,对应着hex流”4D 5A 45 52“,x64和x86的shellcode在第10个字节处开始不一样(见前两张图)。下图则是在winhex中定位shellcode。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

去除前边的的hex流重新保存位文件,这样就获取了x64的shellcode,基本信息如下,是一个c++程序。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

2.3 x64″C++”模块shellcode分析

搞了好一会儿发现这个东西还不能分开调试,它要完整的执行最初的”.chm“文件,然后再执行至c++的shellcode模块。因为有一部分参数比如文件路径,是在内存中生成和传递的。

这一块”c++“的shellocde程序实际上是下载器。

shellcode请求之前在”.net“模块中拼接的路径,下载后续恶意资源。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

在本地%temp%路径创建的当前进程PID号多次重复,作为文件夹名称,在此写入要下载的url路径与文件名。

获取当前进程PID。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

拼接路径,创建文件夹。

11月黑产组织银狐向财务关联人员投递.chm诱饵文件

%temp%/397239723972397239723972397239723972_b
%temp%/397239723972397239723972397239723972

在此路径接收下载的另外5个样本文件。

名称

功能

cache.dat

加密的的7z压缩包

decod.exe

7zip压缩工具

libcef.dll

aplib压缩数据,stage2或stage3会进行解压缩

libcef.png

加密载荷,需要解压缩后的libcef.dll解密并调用,加密的Tianma远控(基于Ghost改造)

libcef.exe/svchost.exe

公开可信libcef工具,会加载lbcef.dll加载文件

最终通过分析解密的libcef.png文件为上述提到的TianMa远控,该远控拥有Ghost远控所拥有的的功能,包括但不限于键盘记录、文件浏览、命令执行、浏览器信息窃取等功能。

IOC

MD5

a0a49aa714d01c8e4249a58b70edf3c0

5a0e22748b83e10fbb1bc79725b01428

7e8fd3d8bc887455b76cbdfc338eed4e

3327b42f2c9aa4a98200ccdc4f781837

0792a18e287f2658d7f08dbf1a3b46bc

URL

https://muchengoss.oss-cn-hongkong.aliyuncs.com/TG.exe

https://muchengoss.oss-cn-hongkong.aliyuncs.com/cache.dat

https://muchengoss.oss-cn-hongkong.aliyuncs.com/decod.exe

https://muchengoss.oss-cn-hongkong.aliyuncs.com/libcef.dll

https://muchengoss.oss-cn-hongkong.aliyuncs.com/libcef.png


文章有点太长了,其实钓鱼邮件部分的功能就结束了,具体远控木马功能后续再写。

原文始发于微信公众号(帅仔回忆录):11月黑产组织银狐向财务关联人员投递.chm诱饵文件

版权声明:admin 发表于 2023年12月27日 上午9:01。
转载请注明:11月黑产组织银狐向财务关联人员投递.chm诱饵文件 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...