freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Qakbot恶意软件利用OneNote进行传播
2023-04-13 15:36:51
所属地 上海

01 Qakbot简介

Qakbot是一种自2007年以来一直活跃的复杂恶意软件,具有自我复制和传播的蠕虫特性。其主要攻击目标为银行业和金融机构,旨在窃取受感染系统中的敏感信息和凭证。Qakbot通过多种手段获取访问权限,包括社会工程和漏洞利用。该恶意软件还具备高度定制化的C&C通信,可用于获取其他恶意软件模块和执行数据外泄等功能。

Qakbot的特点在于其高度隐蔽性和逃避技术,例如反沙箱和反虚拟机检测等。它主要通过钓鱼电子邮件和恶意附件进行传播,但最近通过利用OneNote文档进行传播的情况数量有所增加。此外,Qakbot的恶意代码经常更新,以逃避杀毒软件的检测和清除。

▶ 1.1 攻击流程

v2-5484db3a67c3e9154d23bb369176d776_720w.webp

02 样本分析

▶ 2.1 OneNote样本

▶ 2.1.1样本概述

OneNote文件利用hta脚本下载QakBot Loader文件,通过QakBot Loader解密出真正的shellcode代码。

▶ 2.1.2详细分析

病毒名称151360.one
MD5a00d9fbe0d08a7cc8ac61a793f966517
SHA-18dc6c41573a480d0bcb80fd36112daecb4d61a92
SHA-256ef609ae7ef5d32d18bdecac1ed59fcce6ce766e27fe0b9e3a8f208b8e2d0c8ba
文件大小168.52 KB (172568 bytes)
文件格式one
文件类型(magic)data

OneNote中的HTA脚本

通过开源工具OneNoteAnalyzer对OneNote文件进行分析,得到OneNote文件中释放的hta脚本文件。hta脚本如下所示:

v2-9baa9605d6e868f32ddb9b7da85a8132_720w.webp

HTA下载shellcode文件

对hta脚本中的代码进行去混淆,得到以下代码。该代码的主要功能是使用curl程序下载QakBot Loader文件,名字为512.png。

v2-5e133f4fc15957b0b6073f8337f3847a_720w.webp

▶ 2.2 Qakbot Leader分析

▶ 2.2.1样本概述

QakBot Loader为DLL文件,DLL文件中的入口点 "Wind" 使用各种规避技术进行混淆,如直接跳转和条件跳转(jmp、jz、jnz)。使用异或解密出第一个shellcode,然后在内存中执行。此shellcode进一步解密出主Qakbot Core DLL文件并从内存中释放,最后执行核心DLL文件。

▶ 2.2.2 详细分析

病毒名称512.png
MD5891c7d5050fe852a032eeda9311498e8
SHA-152975754a7e3048c5b587e4926e99cb5c8123929
SHA-256e16e0faae0e9851a782d026f6692e34a9c7bae14c545aa8ac1e1ef033dfd06a8
处理器结构PE32 executable for MS Windows (DLL) (console) Intel 80386 32-bit
文件大小307.00 KB (314368 bytes)
文件格式Win32 DLL
数字签名
是否加壳以及加壳类型
编译语言Microsoft Visual C++ vx.x DLL

QakBot Loader包含多个节数据(如下图所示),根据hta脚本描述,恶意活动通过名称为 "Wind "的函数执行。

v2-e8c55867e558d908d9e7c1a0677e2d55_720w.webp

解密第一层shellcode

加密的第一个shellcode代码。

v2-257b878abf6aa2f05733aa2be113d7e6_720w.webp

解密后的shellcode代码。

v2-5916ea095a158c4c3adde8e01a2d6550_720w.webp

解密Qakbot Core DLL文件

利用解密的shellcode执行解密Qakbot Core DLL代码。Qakbot Core DLL解密算法:使用加密数据的前一个字节和经过计算的字节进行XOR,然后再和800000FF进行and运算。例如:X xor Y and 800000FF

解密后的Qakbot Core DLL如下图所示。

v2-adfcbceb2b55bd471e715d183acff179_720w.webp

修复Qakbot Core DLL文件

从内存中Dump的Qakbot Core DLL文件存在部分节对齐问题,需要将部分节地址和大小进行修正。比如.rsrc节中的VA。

v2-ed64ac12874f5eb05939f4212fd60bc4_720w.webp

▶ 2.3 Qakbot Core DLL分析

▶ 2.3.1 样本概述

Qakbot Core DLL主要功能大致分为环境检查、持久化以及C&C通信。

▶ 2.3.2 详细分析

病毒名称Qakbot Core DLL
MD525a014eda9b2a5f325336f9abef7f558
SHA-1afe26e6333a0ac52494a89bf70c7fd7fa5122373
SHA-25610fe7c6c5b033386b2ac17ffd5cedc3974a9bb7852b854408372254066647861
处理器结构x64
文件大小32.50 KB (33280 bytes)
文件格式Win32 EXE
时间戳2022-10-29 10:20:35 UTC
数字签名
是否加壳以及加壳类型
编译语言PE64 Compiler: FASM (1.73) [GUI64]


环境检查

1、检查是否存在C:\\INTERNAL\\__empty特定子目录,如果存在则直接终止执行

v2-85a70e0cf18f4e64a53ea7e90dff9abc_720w.webp

2、检查 SELF_TEST_1 标志,以检查机器是否已经被感染

v2-57ebdf50a85de666374b9d18d70581e1_720w.webp

3、如果此标志被设置就会终止执行

v2-fe509c82cbdc191574888cc06946363f_720w.webp

4、如果机器未曾感染则创建一个新的线程并开始执行

v2-5b62d3fb3e8e367204d136257a78bf30_720w.webp

5、检查键盘类型

v2-f3de50ec74953b547d4aafe7af4d274b_720w.webp

重构IAT表

获取以下DLL地址并根据DLL地址获取相应的函数地址。

Kernel32.dll、Ntdll.dll、User32.dll、Netapi32.dll、Advapi32.dll、Shlwapi.dll、Shell32.dll、Userenv.dll、w32_32.dll


v2-69db0fae3dfbba661802e63bdd92d329_720w.webp

收集系统信息

1、使用GetTickCount64函数进行的反沙箱检查


v2-5c285dfa3089c164f4f3daf3a969ff3f_720w.webp

2、获取系统信息,如计算机名称、卷的信息、用户账户名称、模块名称、进程类型和操作系统版本信息。

v2-d66359010449af10f282826c2c59d101_720w.webp

反AV检测

通过进程快照枚举正在运行的进程,以检测机器上是否运行防病毒(AV)产品。

v2-53256c5894411bea1d3b698dfbdf4b1c_720w.webp

反调试

通过遍历进程列表,查找有无异常进程。如果遍历到被硬编码的进程列表就会在注册表中设置标志位,从而使程序终止执行。


v2-5692daee688da2b5459e70c13fcbc0a4_720w.webp

v2-794db838a83827f1d16210eea7b2d372_720w.webp

进程注入

进程注入的主要程序如下:

C:\Windows\SysWOW64\wermgr.exe
C:\Windows\SysWOW64\msra.exe
C:\Program Files (x86)\Internet Explorer\iexplore.exe

1、新建线程用来调用进程注入,首先会判断操作系统版本,如果是Windows Vista或更高版本则执行threadFuncAddrOut函数,否则执行threadFuncAddrOut2函数。

v2-774ec7f77f9573595d69f432a258adb5_720w.webp

2、循环调用进程注入函数CreateProcessCommandLine函数主要是使用目标程序地址作为命令行参数来创建进程ResumeThreadOut函数主要作用是在完成进程注入后恢复目标进程的运行

v2-8b0043f0649270d8a607ac42798a0971_720w.webp

3、该函数主要作用是实现远程代码注入,将恶意代码注入到目标进程 判断当前操作系统的版本,获取相对应ntdll.dll中的函数地址

v2-0f65cf0aea200ea250d64527b31b2a79_720w.webp

- 利用ProcessInjectionAllocMem函数向目标进程申请一段内存空间,用于存放待注入的代码,并返回该内存地址- 使用GetThreadContext函数获取目标进程的线程上下文信息,并修改EIP寄存器的值为注入的代码处,使得线程恢复执行后可以跳转到注入的代码并执行- 修改的内存属性,然后写入shellcode代码,最后恢复内存属性- 修改目标进程中被注入内存区域的属性为可写,向该内存区域写入待注入的代码,然后恢复内存区域的原始属性- 如果进程注入成功,则返回非零值;否则,返回0

v2-9354413cc272744dfbb9674dd0d88c90_720w.webp

ProcessInjectionAllocMem函数的主要执行流程

- 检查当前系统版本是否符合要求。如果不符合要求,则会调用out_threadFuncAddr3()函数另起线程调用MessageBoxA函数。


v2-f44a542d11bce7f310ab057c4079f916_720w.webp

- 获取当前进程的进程句柄,分别把目标进程和自身进程映射进内存空间

v2-c474ea3cd2497e862c88ffdb396112e0_720w.webp

- 调用AllocMemcpy函数申请一段内存空间,大小为6852字节,并使用VirtualAllocEx函数为目标进程分配一段内存空间

v2-b2420dae79de324a326570f2a8c0bb4f_720w.webp

持久化

主要还通过以下步骤进行持久化:- 将自身复制到指定的文件夹%AppData%\Roaming\Microsoft\{RandomStrings},文件夹名字随机生成- 利用上述文件夹创建注册表项- 执行计划任务来启动1、将QakBot所需要的配置文件写入到注册表中配置文件写入到注册表中

v2-8e15d2a6f7ffb660c8d4a472fbf4fdb8_720w.webp

v2-eff92739704e14cb2fc7a2f6fcce1db8_720w.webp

使用XOR加密(加密和系统相关)要写入的注册表地址并作为返回值返回,保存在全局变量中。之后通过读取注册表来获取相应的配置信息,例如加密密钥等信息。


v2-c0b590b4da1beebcaa5a8849e852d8d6_720w.webp

v2-3b90cdab699d7d464c9380dd3218afa4_720w.webp

对注册表中加密的配置信息进行解密,其中包括RC4 Key、恶意软件自我复制的文件目录等信息,其中感染的类型是tok01。

v2-d2f8ba2cf03a9f506c501dd77e8a77f1_720w.webp

2、恶意软件自身复制到指定文件夹

v2-5b0b92a4381ea4a38f667911d04e190c_720w.webp

3、获取资源中的数据,恶意软件嵌入了不同的资源。常见的是配置和IP地址列表,资源以相同的方式加密

v2-7a58260e2d69378950950894626e2bf4_720w.webp

4、计划任务和开机自启动

把释放的恶意文件路径写入到开机自启注册表中,同时也会写入到计划任务中。

v2-9cb63fc773591252469fcbecccc3b88a_720w.webp

C&C通信

在Qakbot加密/解密过程中,核心DLL有两种资源——一种用于加密配置,一种用于加密C&C IP列表。为了解密这些资源,根据每个 Qakbot 样本特定的字符串计算 SHA1 哈希,并将该哈希用作 RC4 算法的密钥进行解密操作。


v2-0ff35fb8e4a79818f011263d4c969fa7_720w.webp


v2-eb7ba010f326742aba9c3cd6e9e9fc2c_720w.webp


v2-25b1c30ac8f1a5b8e215fd8e358cee14_720w.webp

使用密钥bUdiuy81gYguty@4frdRdpfko(eKmudeuMncueaN对RC4加密的数据进行解密

v2-1fd9db4ca74d63d934476075591db735_720w.webp

解密后 Qakbot 的活动ID是tok01,时间戳是1676453967,对应时间是2023-02-15 17:39:27

v2-576dbef143bbfc9cabc72476e369bd58_720w.webp

v2-7959b2b74a801bfd3cf957db1819826d_720w.webp

解密出来的C&C IP地址

v2-c74de3596f45dc2f0a92687337e4fed5_720w.webp

使用HTTP进行通信,使用POST或者GET方式发送数据包进行数据交互,发送的数据内容经过base64编码

v2-56b47e74f1d12ded76bd15ac4b2a26e1_720w.webp

v2-d5943233ce9f1e747d6d17636fb791f9_720w.webp

03 相关性分析

自 2023 年 1 月底以来,Qakbot银行木马借助于 OneNote 文档进行恶意软件分发的活动数量激增,并且版本不断更新,下面是一些其他版本的变种信息。

感染ID时间戳感染时间
bb1216754171982023/2/3 17:39:58
bb1516763671972023/2/14 17:33:17
tok0116764539672023/2/15 17:39:27
bb2216806869882023/4/5 17:29:48

04 结论

本文对Qakbot恶意软件新的传播方式进行分析,包括对OneNote恶意文件、加载器Qakbot DLL及其主要的Core DLL的详细分析。详细分析了Qakbot的反调试、反检测技术、进程注入和通信方式等技术,并且从样本中提取了关键配置信息,比如写入注册表的加密配置信息、C&C通信地址等。

05 加固建议

拦截带有不常见文件扩展名(.one、.hta、.vbs、.js、.wsf、.iso、.vhd、.img)附件的电子邮件;

拦截被滥用的系统程序(例如 MSHTA.exe、RunDll32.exe、cmd.exe)启动的网络连接;

修改环境中不常见脚本文件格式的默认文件关联(例如:.wsf、.js、.hta、.vba、.chm、.cmd),以便于阻止脚本的执行;

拦截在恶意软件常用的路径上创建 PE 文件(例如:%PROGRAMDATA%);

在安全防护产品上拦截已知恶意软件外联IP和域名地址。

06 IoCs

v2-eee87710f532ba6ed279791ffad1d2a3_720w.webp


# 恶意软件 # 信息安全 # 网络安全技术 # 安全验证
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录