1. 引言
随着网络攻击技术的不断演变,恶意代码加载器逐渐成为恶意代码执行的关键组成部分。此类加载器是一种用于将各种恶意代码加载到受感染的系统中的恶意工具,通常负责绕过系统安全防护,将恶意代码注入内存中并执行,为后续的特洛伊木马类型恶意代码的部署奠定基础。加载器的核心功能包括持久性机制、无文件内存执行以及多层次规避技术。
安天 CERT 将近几年历史跟踪储备的典型恶意加载器家族有关信息汇总成专题报告,在未来几个月依次发布,并持续追踪新的流行加载器家族。本项目专题将聚焦加载器技术细节,深入挖掘其在攻击链中的核心功能,包括其混淆技术、加密机制以及注入策略等。此外,我们也会不断完善自身安全产品能力,采取有效技术方案进一步提升针对加载器的识别率和准确率,帮助用户组织提前发现并阻止潜在威胁。
2. 概述
DBatLoader 加载器最初于 2020 年被发现,主要被用于投放包括 Snake Keylogger、Formbook 和 Agent Tesla 在内的多种恶意代码家族。DBatLoader 加载器的加载过程分为两个阶段,其中第一阶段主要用于规避反病毒引擎的检测,并在内存中解密运行第二阶段载荷。在第二阶段过程中,DBatLoader 加载器采用 "DDR"(Dead Drop Resolvers)技术,从公共代码托管网站上下载并解密待投递的恶意代码家族,而后通过多种手法将其注入到其他程序内以实现隐蔽运行。
DBatLoader 加载器通过不断更新其生存技巧来规避反病毒引擎的检测。它大量运用了混淆技术,从加密和隐藏特征两个维度对程序进行隐蔽处理。DBatLoader 加载器使用异或加密和移位加密对字符串和不同阶段的载荷加密处理。为了提高隐蔽性,该加载器还采用了图片隐写术和在代码中穿插无用字符串的方法以隐藏恶意代码特征。除此之外,DBatLoader 加载器还会将指定扩展名的文件加入 Windows Defender 白名单来规避查杀,以便实施后续攻击行为。
该加载器详细信息参见安天病毒百科 [ 1 ] 。
图 2-1 长按识别二维码查看 DBatLoader 加载器详细信息
3.DBatLoader 加载器生存技术举例分析
DBatLoader 加载器为了逃避和绕过安全检测,使用了多种生存技术,其中包括:混淆技术、注入技术、提权技术、持久化技术和反调试技术。
3.1 混淆技术分析
为了减少文件特征,阻碍分析人员逆向分析,DBatLoader 加载器采用了多种文件混淆技术,其中包括技术如下:穿插无用指令、图片隐写、脚本字符串拼接、载荷多层加密、去除文件魔术头、字符串加密、动态加载函数。
3.1.1 穿插无用指令
在 DBatLoader 加载器的每个阶段载荷中,均有大量重复的尝试 hook AMSI(即 Antimalware Scan Interface,Windows 反恶意软件扫描接口)的代码,这些代码使原本的程序执行流程变得分散,即增加了逆向分析的难度,又减少了程序执行流程本身带来的二进制特征。
图 3-1 DBatLoader 加载器使用大量重复的指令填充程序
3.1.2 使用图片隐写术
DBatLoader 加载器通过图片隐写术,可以将恶意载荷信息写入到图片中,使其从计算机视角来看和普通图片别无二致,进而达到隐藏目标载荷的目的。当需要获取目标载荷时,该加载器通过特定的算法读取图片,从而将信息还原出来。
图 3-2 DBatLoader 隐写载荷后的图片
3.1.3 脚本字符串拼接
DBatLoader 加载器通过将 bat 脚本指令进行分割,并在其中穿插无用变量,在运行时使用拼接变量的方式进行还原,以降低文件特征并实现干扰逆向人员分析的目的。
图 3-3 DBatLoader 加载器混淆过后的 bat 脚本
3.1.4 多层加密载荷
DBatLoader 加载器通过多层加密载荷,以去除载荷特征并增加逆向难度。
图 3-4 DBatLoader 加载器加密函数
3.1.5 破坏文件特征
DBatLoader 加载器通过故意在加密的载荷中去除一个字节以破坏载荷解密后的文件特征,去除的字节由加载器运行时还原,以避免载荷被解密后检测。
图 3-5 DBatLoader 加载器第一阶段解密后的载荷
3.1.6 加密字符串
DBatLoader 加载器通过将部分字符串(如注入的程序名,自启动注册表路径等)进行加密以防止字符串被作为特征进行识别检测。
图 3-6 DBatLoader 字符串加密算法
3.1.7 函数动态加载
DBatLoader 加载器通过调用 GetProcAddress 来动态加载函数以防止导入函数所带来的文件特征。
图 3-7 DBatLoader 加载器动态加载函数
3.2 注入技术分析
DBatLoader 加载器提供了三种注入方式,分别为线程注入、APC 注入和进程镂空,并且最终会根据载荷的配置文件选择注入方式。
其中调用的 API 如表 3-1 所示,DBatLoader 加载器在注入过程中都尽量使用了 ntdll.dll 的导出函数,而不是直接使用 kernel32.dll 的导出函数,以减少调用链的长度,降低被 hook 的可能性。
表 3-1 DBatLoader 加载器注入过程使用的 API
创建进程 CreateProcessAsUserW WinExec 修改内存 NtOpenProcess NtUnmapViewOfSection ZwAllocateVirtualMemory NtReadVirtualMemory WriteVirtualMemory RtlMoveMemory 执行载荷 NtCreateThreadEx NtQueueApcThread GetThreadContext SetThreadContext ResumeThread
3.3 提权技术分析
DBatLoader 加载器为了绕过 UAC 实现提权,需要让程序在受信任的目录中执行,并且程序还需要带有有效的数字签名。
其中 DBatLoader 加载器为了在受信任的目录中执行,使用了模拟受信任目录技术。该技术将会创建一个新的目录,该目录和受信任的目录之间有一个空格的区别,但是却能欺骗 UAC 让其以为程序在受信任的目录中运行。
图 3-8 DBatLoader 加载器模拟的受信任目录
之后 DBatLoader 加载器使用了易受 DLL 劫持的可执行文件,该程序具有合法的数字签名并且能够自动提权,但是会优先加载同目录下的 DLL。DBatLoader 加载器通过这种白加黑的方式,绕过 UAC 的限制实现提权。
图 3-9 DBatLoader 加载器用于白加黑的白文件
3.4 持久化技术分析
DBatLoader 加载器通过向 HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionRun 写入注册表项实现持久化。
图 3-10 DBatLoader 加载器写入注册表
3.5 反调试技术分析
DBatLoader 加载器在第二阶段会通过 IsDebuggerPresent 和 CheckRemoteDebuggerPresent 检测是否有调试器的存在。
图 3-11 DBatLoader 加载器通过 IsDebuggerPresent 检测是否存在调试器
4. 攻击流程
DBatLoader 加载器主要通过钓鱼邮件进行传播。攻击者通过投递钓鱼邮件,诱导受害者运行邮件附件中的恶意程序加载器。当加载器运行时,该加载器会先从自身资源文件中读取包含第二阶段载荷的图片,通过图片隐写术进行解密并运行 DBatLoader 加载器第二阶段。在第二阶段中,加载器会从公共的文件托管网站下载加密的配置文件。之后 DBatLoader 加载器会根据该配置文进行持久化并篡改 Windows Defender 白名单。最后 DBatLoader 加载器会从配置文件中解密待投递的恶意代码家族并通过注入的方式运行。
图 4-1 DBatLoader 攻击流程
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-1 DBatLoader 加载器有缺陷的 hook API 实现
DBatLoader 加载器第一阶段对下一阶段载荷采取了多层加密。该加载器首先从资源文件中加载包含下一阶段载荷的图片,并通过图片隐写术把加密的载荷读取出来。
图 5-2 DBatLoader 加载器读取资源文件
其中 DBatLoader 加载器会从图片中逐行以蓝绿红的顺序读取字节以获取隐写信息,其中图片隐写所占用的 bit 数记录在了读取的前 3 个字节上。随后该加载器通过隐写术的方式读取了 32bit 信息,用来获取加密载荷的总字节数。之后该加载器将继续从图片中读取信息直到获得全部的加密载荷。
图 5-3 DBatLoader 加载器读取隐写图片
随后 DBatLoader 加载器逐字节对第二阶段载荷加 0x80 并在载荷头部添加一个字符 "M" 成对第二阶段载荷的解密。
图 5-4 DBatLoader 加载器解密第二阶段载荷
最后 DBatLoader 加载器将二阶段载荷映射进内存并调用入口点进入第二阶段。
图 5-5 DBatLoader 加载器加载二阶段载荷
5.3 DBatLoader 加载器第二阶段
DBatLoader 加载器第二阶段通过在主函数逻辑中设置一个计时器来触发第二阶段恶意逻辑。
图 5-6 DBatLoader 加载器设置计时器
在 DBatLoader 加载器第二阶段中,有着和第一阶段一样的规避反病毒引擎逻辑,但是因为设计缺陷导致功能未能实现。
图 5-7 第二阶段规避反病毒引擎逻辑
在 DBatLoader 加载器第二阶段,部分字符串被一种异或算法加密。当需要解密字符串时,加载器会先逐字符拼接形成一个异或密钥,随后加载器会逐字节地将加密字符串的低 8 位与密钥的低 8 位异或解密,以获得明文字符串。
图 5-8 DBatLoader 加载器解密字符串算法
在 DBatLoader 加载器第二阶段,程序会将要投递的载荷下载地址存放在第一阶段载荷当中。在第二阶段,DBatLoader 加载器会在第一阶段载荷文件中搜索特定的字符串,以定位加密配置的位置。
图 5-9 DBatLoader 加载器获取加密配置
当获取到加密配置后,DBatLoader 加载器会用配置中的一个整数用作解密密钥,解密加密的字符串,以获取投递目标载荷的下载地址。
图 5-10 DBatLoader 加载器解密载荷下载地址算法
之后 DBatLoader 加载器将通过 WinHttpRequest 对象下载投递的载荷。
图 5-11 DBatLoader 加载器下载载荷
当 DBatLoader 加载器下载载荷后,程序会 base64 解码后多次添加偏移量来解密载荷。
图 5-12 DBatLoader 加载器解密下载的载荷
随后 DBatLoader 加载器通过一个特定的字符串分割载荷,得到载荷的配置文件。当加载器解密配置文件后,会根据配置文件选择是否进行篡改反病毒引擎策略、持久化、线程注入、APC 注入、进程镂空等操作。
图 5-13 DBatLoader 加载器读取配置文件
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-15 netutils.dll 中用于添加文件扩展名白名单的核心载荷
5.3.2 DBatLoader 加载器通过设置自启动项实现持久化
当启用持久化功能时,DBatLoader 加载器以配置文件中 malware_filename 作为文件名将自身复制到 C:UsersPublicLibrariesmalware_filename.PIF,并在 C:UsersPublic 下创建文件 malware_filename.url,并将其加入到注册表 HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionRun 下以实现自启动的功能。
图 5-16 DBatLoader 加载器创建的用于持久化的 .url 文件
如果启用了保存配置文件功能,DBatLoader 加载器还会将下载的还未被解密的配置文件以 malware_filename 作为文件名保存到 C:UsersPublicLibraries 下,以供后续使用。
图 5-17 DBatLoader 加载器保存下载的配置文件
5.3.3 DBatLoader 加载器执行目标载荷
DBatLoader 加载器会尝试寻找系统中是否存在 SndVol.exe,如果不存在则会注入程序到 iexpress.exe。
图 5-18 DBatLoader 加载器选择注入的程序
随后 DBatLoader 加载器会将配置文件中的目标载荷多层解密,获得真实恶意载荷。
图 5-19 DBatLoader 加载器对恶意载荷的加密算法
之后 DBatLoader 加载器会根据配置文件,选择程序的注入方式。如果启用了 APC 注入功能,则 DBatLoader 加载器会通过 APC 注入方式注入到目标进程。
图 5-20 DBatLoader 加载器通过 APC 注入执行恶意代码
如果启用了线程注入功能,则 DBatLoader 加载器通过线程注入方式将载荷注入到目标进程。
图 5-21 DBatLoader 加载器通过线程注入执行恶意代码
如果 APC 注入和线程注入都未启用,则 DBatLoader 加载器通过进程镂空的方式将载荷注入到目标进程。
图 5-22 DBatLoader 加载器通过进程镂空执行恶意代码
通过解密分析,最终确定投递的目标载荷为 Snake Keylogger,该键盘记录器家族曾在此前发布的分析报告中进行过详细分析 [ 1 ] ,此处不宜赘述,感兴趣的读者可前往阅读。
图 5-23 DBatLoader 加载器投递的最终载荷
6.IoCs
IoCs
5D707EF2DB982821B0246CE6AA1300C1
6D23FE871B2064C6D13580A5745F23CB
CE875D76D02C456326D6381881281667
7. 样本对应的 ATT&CK 映射图谱图 7-1 技术特点对应 ATT&CK 的映射
具体 ATT&CK 技术行为描述表:
表 7-1 ATT&CK 技术行为描述表
ATT&CK 阶段 / 类别 | 具体行为 | 注释 |
持久化 | 利用自动启动执行引导或登录 | 通过添加注册表自启动项实现持久化 |
提权 | 滥用提升控制权限机制 | 通过模拟可信目录的方式进行提权 |
执行流程劫持 | 在提权的过程中通过劫持了 easinvoker.exe 执行流程 | |
防御规避 | 规避调试器 | 第二阶段通过 IsDebuggerPresent 和 CheckRemoteDebuggerPresent 检测调试器 |
削弱防御机制 | 将部分文件扩展名加入 Windows Defender 白名单 | |
删除信标 | 在提权结束后会清理提权使用的文件 | |
混淆文件或信息 | 通过图片隐写术加密第二阶段载荷 | |
使用多种古典加密算法加密载荷 | ||
部分字符串使用算法加密 | ||
动态解析 API | ||
提权脚本中使用大量无用字符进行混淆 | ||
进程注入 | 通过 DLL 注入、APC 注入或进程镂空的方式投递目标载荷 |
8. 防御建议
针对此类威胁,安天建议企业增强业务人员的安全意识,降低组织被攻击的可能性。企业员工日常应注意邮件使用,避免运行未知来源邮件附件或者访问邮件中可疑网络链接。
另外,终端作为安全防护的基石,建议企业在办公机、服务器等节点上部署企业级终端安全防护系统。面向终端设备,安天可为企业用户提供安天智甲终端防御系统,为终端提供病毒查杀、主动防御、勒索防护、主机管控、网络防护等多种能力,实现有效防御各类威胁。
8.1 智甲助力用户防御加载器威胁
经过测试,安天智甲终端安全系列产品(以下简称 " 智甲 ")依托安天自研威胁检测引擎和内核级主动防御能力,可以有效查杀和防御本次发现病毒样本。
智甲可对本地磁盘进行实时监测,对新增文件自动化进行病毒检测,针对此次威胁,当用户通过接收邮件附件、微信传输、网络下载等方式将 DBatLoader 加载器存储至本地时,智甲会立即对该病毒进行告警并清除恶意文件,防止用户启动文件导致终端遭受攻击。
图 8-1 发现病毒时,智甲第一时间捕获并发送告警
智甲还为用户提供统一管理平台,管理员可通过平台集中查看网内威胁事件详情,并批量进行处置,提高终端安全运维效率。
图 8-2 智甲管理中心助力管理员实现高效的终端安全管理
9. 安天澜砥威胁检测分析垂直大模型
安天澜砥威胁检测分析垂直大模型能对样本进行自动化分析,解析内容如下:
判定结果:
根据提供的日志,分析工具判定该文件为 Trojan.Win32.Bandan [ Backdoor ] ,即一个用于后门的特洛伊木马。
评估日志中的结果准确度:
准确度:95%
详细解释:
1. 特征匹配:
○ 字符串匹配: 日志中多处出现与已知恶意字符串匹配的特征,例如:
■ "Delphi.",可能表明该文件是用 Delphi 编写的,这是一种常见的后门编写语言。
■ "mail.ru>",可能用于进行远程控制或信息窃取。
■ "Darkick",可能是恶意软件的作者或隐藏身份的标识。
■ "Trojan.Win32.Bandan",明确指出了该文件属于特定的后门类型。
○ 异常指令和调用: 日志中包含大量的汇编指令和特定的 API 调用,这些调用通常用于隐藏活动、监听网络流量或执行命令。
■ 例如,"FF 95 E4 B2 9E B2 C0 CB EB EB 89 82 E7 BC E4 80" 等,可能涉及代码混淆或指令重写。
■ "87 00 00 07 07 07 00 00 00 80 BB BB 00 00 00 00 00 80 00 07 07 07 00 00 80 33 00 00 00 00 00 00",可能是代码段的填充或异常处理。
■ "28 2D 2F 29 31 31 32 31 32 2D 32 34 2D 33 37 29 49 46 53 54 52 56 59 51 5B 62 4F 63 64 5F 67 67 67 60 67 52 63 69 55 67 6A 60 7B 84 79 95 96 92",可能涉及数据加密或解密操作。
2. 异常行为特征:
○ 代码混淆: 日志中多次出现大量的重复或混淆的指令,如 "FF 95 E4 B2 9E B2 C0 CB EB EB 89 82 E7 BC E4 80",这表明代码可能经过混淆处理,隐藏真实意图。
○ 异常指令序列: 多次出现的异常指令序列和不规则的指令组合,可能用于绕过安全检测或隐藏恶意功能。
○ 多线程和进程控制: 日志中提到的多线程创建和进程管理,可能用于建立隐藏的后门会话或执行后台任务。
3. 文件结构分析:
○ 大量数据段和代码段: 日志显示文件包含大量的数据段和代码段,这些段可能被恶意软件用于隐藏或加载恶意代码。
○ 异常的段偏移和大小: 多处出现异常的段偏移和大小,如 "FF 95 E4 B2 9E B2 C0 CB EB EB 89 82 E7 BC E4 80",可能用于动态代码加载或执行。
4. 可疑的 API 调用:
○ 网络通信: 多次出现与网络通信相关的 API 调用,如 "socket"、"connect"、"send" 等,可能用于建立远程连接或数据传输。
○ 进程操作: "CreateRemoteThread"、"OpenProcess" 等调用,可能用于在远程进程中注入恶意代码或建立后门会话。
5. 文件特征:
○ 异常的文件大小: 文件大小为 1,209,856 字节,与典型的可执行文件大小相比,可能表明该文件进行了压缩或加密,以逃避检测。
○ 特征片段缺失: 多处出现 ?? 表示未被选中作为特征使用,可能表示这些数据被排除在分析之外。
结论:
基于上述特征匹配和行为分析,分析工具判定该文件为 Trojan.Win32.Bandan [ Backdoor ] ,其行为特征与已知的后门木马行为高度一致。日志中的检测结果准确度较高,建议对该文件进行进一步的隔离和分析。
准确度解释:
• 高准确度(95%)基于日志中明确的恶意字符串、异常指令和 API 调用,以及文件特征的匹配,系统认为该文件具有高风险。
• 低误报率: 由于该判定基于已知的恶意特征,较少受到误报可能,但不排除极少数极不常见的变种被误判的可能性。
按照国标草案给出威胁分类为 Trojan.Win32.Bandan,自动提取特征生成的 YARA 规则如下:
rule Trojan.Win32.Bandan:Trojan
{
meta:
description = " 这是一段由 VILLM V2 模型生成的 YARA 规则。用于检测 Trojan.Win32.Bandan"
strings:
$a = {FF FF FF FF 01 00 00 00 ?? 00}
condition:
#a > 100
}
安天澜砥威胁检测分析垂直大模型是国内首个通过国家网信办备案的威胁检测生成式算法。模型基于安天赛博超脑 20 余年积累的海量样本特征工程数据训练而成,训练数据包括文件识别信息、判定信息、属性信息、结构信息、行为信息、主机环境信息、数据信息等,支持对不同场景下向量特征进行威胁判定和输出详实的知识理解,形成应用不同需求和场景的多形态的检测方式,提升后台隐蔽威胁判定能力,进一步为安全运营赋能。
图 9-1 安天澜砥威胁检测分析垂直大模型样本分析结果
参考资料
[ 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
登录后才可以发布评论哦
打开小程序可以发布评论哦