freeBuf
主站

分类

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

特色

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

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

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

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

FreeBuf+小程序

FreeBuf+小程序

DBatLoader恶意加载器的全面分析——典型加载器家族系列分析二
2025-03-19 17:05:19
所属地 北京

1.引言

随着网络攻击技术的不断演变,恶意代码加载器逐渐成为恶意代码执行的关键组成部分。此类加载器是一种用于将各种恶意代码加载到受感染的系统中的恶意工具,通常负责绕过系统安全防护,将恶意代码注入内存中并执行,为后续的特洛伊木马类型恶意代码的部署奠定基础。加载器的核心功能包括持久性机制、无文件内存执行以及多层次规避技术。

安天CERT将近几年历史跟踪储备的典型恶意加载器家族有关信息汇总成专题报告,在未来几个月依次发布,并持续追踪新的流行加载器家族。本项目专题将聚焦加载器技术细节,深入挖掘其在攻击链中的核心功能,包括其混淆技术、加密机制以及注入策略等。此外,我们也会不断完善自身安全产品能力,采取有效技术方案进一步提升针对加载器的识别率和准确率,帮助用户组织提前发现并阻止潜在威胁。

2. 概述

DBatLoader加载器最初于2020年被发现,主要被用于投放包括Snake Keylogger、Formbook和Agent Tesla在内的多种恶意代码家族。DBatLoader加载器的加载过程分为两个阶段,其中第一阶段主要用于规避反病毒引擎的检测,并在内存中解密运行第二阶段载荷。在第二阶段过程中,DBatLoader加载器采用“DDR”(Dead Drop Resolvers)技术,从公共代码托管网站上下载并解密待投递的恶意代码家族,而后通过多种手法将其注入到其他程序内以实现隐蔽运行。

DBatLoader加载器通过不断更新其生存技巧来规避反病毒引擎的检测。它大量运用了混淆技术,从加密和隐藏特征两个维度对程序进行隐蔽处理。DBatLoader加载器使用异或加密和移位加密对字符串和不同阶段的载荷加密处理。为了提高隐蔽性,该加载器还采用了图片隐写术和在代码中穿插无用字符串的方法以隐藏恶意代码特征。除此之外,DBatLoader加载器还会将指定扩展名的文件加入Windows Defender白名单来规避查杀,以便实施后续攻击行为。

3.DBatLoader加载器生存技术举例分析

DBatLoader加载器为了逃避和绕过安全检测,使用了多种生存技术,其中包括:混淆技术、注入技术、提权技术、持久化技术和反调试技术。

3.1       混淆技术分析

为了减少文件特征,阻碍分析人员逆向分析,DBatLoader加载器采用了多种文件混淆技术,其中包括技术如下:穿插无用指令、图片隐写、脚本字符串拼接、载荷多层加密、去除文件魔术头、字符串加密、动态加载函数。

3.1.1        穿插无用指令

在DBatLoader加载器的每个阶段载荷中,均有大量重复的尝试hook AMSI(即Antimalware Scan Interface,Windows 反恶意软件扫描接口)的代码,这些代码使原本的程序执行流程变得分散,即增加了逆向分析的难度,又减少了程序执行流程本身带来的二进制特征。

图 3‑1DBatLoader加载器使用大量重复的指令填充程序

3.1.2        使用图片隐写术

DBatLoader加载器通过图片隐写术,可以将恶意载荷信息写入到图片中,使其从计算机视角来看和普通图片别无二致,进而达到隐藏目标载荷的目的。当需要获取目标载荷时,该加载器通过特定的算法读取图片,从而将信息还原出来。

图 3‑2DBatLoader隐写载荷后的图片

3.1.3        脚本字符串拼接

DBatLoader加载器通过将bat脚本指令进行分割,并在其中穿插无用变量,在运行时使用拼接变量的方式进行还原,以降低文件特征并实现干扰逆向人员分析的目的。

图 3‑3DBatLoader加载器混淆过后的bat脚本

3.1.4        多层加密载荷

DBatLoader加载器通过多层加密载荷,以去除载荷特征并增加逆向难度。

图 3‑4DBatLoader加载器加密函数

3.1.5        破坏文件特征

DBatLoader加载器通过故意在加密的载荷中去除一个字节以破坏载荷解密后的文件特征,去除的字节由加载器运行时还原,以避免载荷被解密后检测。

图 3‑5DBatLoader加载器第一阶段解密后的载荷

3.1.6        加密字符串

DBatLoader加载器通过将部分字符串(如注入的程序名,自启动注册表路径等)进行加密以防止字符串被作为特征进行识别检测。

图 3‑6DBatLoader字符串加密算法

3.1.7        函数动态加载

DBatLoader加载器通过调用GetProcAddress来动态加载函数以防止导入函数所带来的文件特征。

图 3‑7DBatLoader加载器动态加载函数

3.2       注入技术分析

DBatLoader加载器提供了三种注入方式,分别为线程注入、APC注入和进程镂空,并且最终会根据载荷的配置文件选择注入方式。

其中调用的API如表 3‑1所示,DBatLoader加载器在注入过程中都尽量使用了ntdll.dll的导出函数,而不是直接使用kernel32.dll的导出函数,以减少调用链的长度,降低被hook的可能性。

表 3‑1DBatLoader加载器注入过程使用的API

创建进程

CreateProcessAsUserW

WinExec


修改内存

NtOpenProcess

NtUnmapViewOfSection

ZwAllocateVirtualMemory

NtReadVirtualMemory

WriteVirtualMemory

RtlMoveMemory

执行载荷

NtCreateThreadEx

NtQueueApcThread

GetThreadContext

SetThreadContext

ResumeThread


3.3       提权技术分析

DBatLoader加载器为了绕过UAC实现提权,需要让程序在受信任的目录中执行,并且程序还需要带有有效的数字签名。

其中DBatLoader加载器为了在受信任的目录中执行,使用了模拟受信任目录技术。该技术将会创建一个新的目录,该目录和受信任的目录之间有一个空格的区别,但是却能欺骗UAC让其以为程序在受信任的目录中运行。

图 3‑8DBatLoader加载器模拟的受信任目录

之后DBatLoader加载器使用了易受DLL劫持的可执行文件,该程序具有合法的数字签名并且能够自动提权,但是会优先加载同目录下的DLL。DBatLoader加载器通过这种白加黑的方式,绕过UAC的限制实现提权。

图 3‑9DBatLoader加载器用于白加黑的白文件

3.4       持久化技术分析

DBatLoader加载器通过向HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run写入注册表项实现持久化。

图 3‑10DBatLoader加载器写入注册表

3.5       反调试技术分析

DBatLoader加载器在第二阶段会通过IsDebuggerPresent和CheckRemoteDebuggerPresent检测是否有调试器的存在。

图 3‑11DBatLoader加载器通过IsDebuggerPresent检测是否存在调试器

4.攻击流程

DBatLoader加载器主要通过钓鱼邮件进行传播。攻击者通过投递钓鱼邮件,诱导受害者运行邮件附件中的恶意程序加载器。当加载器运行时,该加载器会先从自身资源文件中读取包含第二阶段载荷的图片,通过图片隐写术进行解密并运行DBatLoader加载器第二阶段。在第二阶段中,加载器会从公共的文件托管网站下载加密的配置文件。之后DBatLoader加载器会根据该配置文进行持久化并篡改Windows Defender白名单。最后DBatLoader加载器会从配置文件中解密待投递的恶意代码家族并通过注入的方式运行。

图 4‑1DBatLoader攻击流程

5.样本分析

5.1 样本标签

表 5‑1二进制可执行文件

病毒名称

Trojan/Win32.DBatLoader

原始文件名

Crane Motor Specification,Docx.exe

MD5

23434BF113A4651076ECD2898A6C1069

处理器架构

Intel 386 or later processors and compatible processors

文件大小

1.15 MB (1,209,856字节)

文件格式

BinExecute/Microsoft.EXE[:X86]

时间戳

1992-06-19 22:22:17(Delphi程序默认时间戳)

数字签名

加壳类型

编译语言

Borland Delphi(2006)

VT首次上传时间

2024-10-14 04:26:54

VT检测结果

52/73

5.2  DBatLoader加载器第一阶段

DBatLoader加载器第一阶段中存在大量劫持AMSI API的函数的代码以规避反病毒引擎的扫描,但是此部分代码存在缺陷,该功能并未实现。

图 5‑1DBatLoader加载器有缺陷的hook API实现

DBatLoader加载器第一阶段对下一阶段载荷采取了多层加密。该加载器首先从资源文件中加载包含下一阶段载荷的图片,并通过图片隐写术把加密的载荷读取出来。

图 5‑2DBatLoader加载器读取资源文件

其中DBatLoader加载器会从图片中逐行以蓝绿红的顺序读取字节以获取隐写信息,其中图片隐写所占用的bit数记录在了读取的前3个字节上。随后该加载器通过隐写术的方式读取了32bit信息,用来获取加密载荷的总字节数。之后该加载器将继续从图片中读取信息直到获得全部的加密载荷。

图 5‑3DBatLoader加载器读取隐写图片

随后DBatLoader加载器逐字节对第二阶段载荷加0x80并在载荷头部添加一个字符“M”成对第二阶段载荷的解密。

图 5‑4DBatLoader加载器解密第二阶段载荷

最后DBatLoader加载器将二阶段载荷映射进内存并调用入口点进入第二阶段。

图 5‑5DBatLoader加载器加载二阶段载荷

5.3 DBatLoader加载器第二阶段

DBatLoader加载器第二阶段通过在主函数逻辑中设置一个计时器来触发第二阶段恶意逻辑。

图 5‑6DBatLoader加载器设置计时器

在DBatLoader加载器第二阶段中,有着和第一阶段一样的规避反病毒引擎逻辑,但是因为设计缺陷导致功能未能实现。


图 5‑7第二阶段规避反病毒引擎逻辑

在DBatLoader加载器第二阶段,部分字符串被一种异或算法加密。当需要解密字符串时,加载器会先逐字符拼接形成一个异或密钥,随后加载器会逐字节地将加密字符串的低8位与密钥的低8位异或解密,以获得明文字符串。

图 5‑8DBatLoader加载器解密字符串算法

在DBatLoader加载器第二阶段,程序会将要投递的载荷下载地址存放在第一阶段载荷当中。在第二阶段,DBatLoader加载器会在第一阶段载荷文件中搜索特定的字符串,以定位加密配置的位置。

图 5‑9DBatLoader加载器获取加密配置

当获取到加密配置后,DBatLoader加载器会用配置中的一个整数用作解密密钥,解密加密的字符串,以获取投递目标载荷的下载地址。

图 5‑10DBatLoader加载器解密载荷下载地址算法

之后DBatLoader加载器将通过WinHttpRequest对象下载投递的载荷。

图 5‑11DBatLoader加载器下载载荷

当DBatLoader加载器下载载荷后,程序会base64解码后多次添加偏移量来解密载荷。

图 5‑12DBatLoader加载器解密下载的载荷

随后DBatLoader加载器通过一个特定的字符串分割载荷,得到载荷的配置文件。当加载器解密配置文件后,会根据配置文件选择是否进行篡改反病毒引擎策略、持久化、线程注入、APC注入、进程镂空等操作。

图 5‑13DBatLoader加载器读取配置文件

5.3.1 DBatLoader加载器篡改Windows Defender白名单

当配置文件中启动篡改Windows Defender白名单功能时,加载器会通过自身代码和释放的bat脚本来将特定文件扩展名加入白名单中。

图 5‑14去混淆后的用于修改Windows Defender策略的脚本

DBatLoader加载器会创建一个路径中带有一个额外空格的C:\Windows \SysWOW64目录来模拟可信目录,随后会释放一个具有自动提权能力且易被DLL劫持的合法的easinvoker.exe用来提权。最后加载器会释放一个会被easinvoker.exe加载的恶意netutils.dll,该DLL会将exe、bat、pif程序加入Windows Defender白名单。

图 5‑15netutils.dll中用于添加文件扩展名白名单的核心载荷

5.3.2        DBatLoader加载器通过设置自启动项实现持久化

当启用持久化功能时,DBatLoader加载器以配置文件中malware_filename作为文件名将自身复制到C:\Users\Public\Libraries\malware_filename.PIF,并在C:\Users\Public\下创建文件malware_filename.url,并将其加入到注册表HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run下以实现自启动的功能。

图 5‑16DBatLoader加载器创建的用于持久化的.url文件

如果启用了保存配置文件功能,DBatLoader加载器还会将下载的还未被解密的配置文件以malware_filename作为文件名保存到C:\Users\Public\Libraries\下,以供后续使用。

图 5‑17DBatLoader加载器保存下载的配置文件

5.3.3        DBatLoader加载器执行目标载荷

DBatLoader加载器会尝试寻找系统中是否存在SndVol.exe,如果不存在则会注入程序到iexpress.exe。

图 5‑18DBatLoader加载器选择注入的程序

随后DBatLoader加载器会将配置文件中的目标载荷多层解密,获得真实恶意载荷。

图 5‑19DBatLoader加载器对恶意载荷的加密算法

之后DBatLoader加载器会根据配置文件,选择程序的注入方式。如果启用了APC注入功能,则DBatLoader加载器会通过APC注入方式注入到目标进程。

图 5‑20DBatLoader加载器通过APC注入执行恶意代码

如果启用了线程注入功能,则DBatLoader加载器通过线程注入方式将载荷注入到目标进程。

图 5‑21DBatLoader加载器通过线程注入执行恶意代码

如果APC注入和线程注入都未启用,则DBatLoader加载器通过进程镂空的方式将载荷注入到目标进程。

图 5‑22DBatLoader加载器通过进程镂空执行恶意代码

通过解密分析,最终确定投递的目标载荷为Snake Keylogger,该键盘记录器家族曾在此前发布的分析报告中进行过详细分析[1],此处不宜赘述,感兴趣的读者可前往阅读。

图 5‑23DBatLoader加载器投递的最终载荷

6.IoCs

IoCs

23434BF113A4651076ECD2898A6C1069

5D707EF2DB982821B0246CE6AA1300C1

6D23FE871B2064C6D13580A5745F23CB

CE875D76D02C456326D6381881281667

7.样本对应的ATT&CK映射图谱

图 7‑1技术特点对应ATT&CK的映射

具体ATT&CK技术行为描述表:

表 7‑1ATT&CK技术行为描述表

ATT&CK阶段/类别

具体行为

注释

持久化

利用自动启动执行引导或登录

通过添加注册表自启动项实现持久化

提权

滥用提升控制权限机制

通过模拟可信目录的方式进行提权

执行流程劫持

在提权的过程中通过劫持了easinvoker.exe执行流程

防御规避

规避调试器

第二阶段通过IsDebuggerPresent和CheckRemoteDebuggerPresent检测调试器

削弱防御机制

将部分文件扩展名加入Windows Defender白名单

删除信标

在提权结束后会清理提权使用的文件

混淆文件或信息

通过图片隐写术加密第二阶段载荷

使用多种古典加密算法加密载荷

部分字符串使用算法加密

动态解析API

提权脚本中使用大量无用字符进行混淆

进程注入

通过DLL注入、APC注入或进程镂空的方式投递目标载荷

8.防御建议

针对此类威胁,安天建议企业增强业务人员的安全意识,降低组织被攻击的可能性。企业员工日常应注意邮件使用,避免运行未知来源邮件附件或者访问邮件中可疑网络链接。

另外,终端作为安全防护的基石,建议企业在办公机、服务器等节点上部署企业级终端安全防护系统。面向终端设备,安天可为企业用户提供安天智甲终端防御系统,为终端提供病毒查杀、主动防御、勒索防护、主机管控、网络防护等多种能力,实现有效防御各类威胁。

9.参考资料

[1] 安天.Trojan/BAT.DbatLoader病毒详解与防护-计算机病毒百科[R/OL].(2025-03-14)

https://www.virusview.net/malware/Trojan/BAT/DbatLoader

[2] 安天.利用OneNote文档投递Snake Keylogger的钓鱼活动分析[R/OL].(2023-04-18)

https://www.antiy.cn/research/notice&report/research_report/20230418.html

# 网络安全 # 恶意代码 # 网络安全报告
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
  • 0 文章数
  • 0 关注者
文章目录