最近,Telekom Security CTI 通过我们参与的信任小组获悉了通过网络钓鱼电子邮件分发的新恶意软件活动。恶意垃圾邮件活动使用窃取的电子邮件线程来引诱受害者用户单击其中包含的超链接,从而下载恶意软件。
其中一个恶意软件样本被错误归因于 Emotet,也加剧了人们对这一恶意软件活动的关注。尽管这种归因后来被证明是自动检测规则的误报匹配,但它还是引起了安全研究社区对这一新活动的关注。
基于使用类似的初始感染例程(AutoIt 脚本)和观察到的 C2 通信协议,初步分析很快发现了与 DarkGate 恶意软件的显着相似性,这与过去对同一恶意软件系列的分析相匹配。进一步的分析证实了这一初步归因,因为嵌入的字符串和包含的功能清楚地将该样本识别为 DarkGate 恶意软件系列的一部分。
对样本的进一步分析揭示了对 DarkGate 功能的详细了解,特别是内置规避技术、恶意软件配置及其功能。我们的结果与最近关于 DarkGate 的其他出版物一致。此外,我们提供了一种配置提取方法,在我们看来,它比现有的方法更加强大和灵活。
我们还收集并总结了有关该演员的可用信息,他显然是 DarkGate 的唯一开发者。该攻击者在多个网络犯罪论坛上宣传了 DarkGate 恶意软件,并发布了与我们的分析结果相匹配的恶意软件功能信息。此外,该演员还发布了几个演示视频,其中显示了 DarkGate 后端面板的详细信息。
鉴于该恶意软件的开发者最近开始将该恶意软件出租给有限数量的附属机构,因此当前 DarkGate 恶意软件活动的激增是合理的。在此之前,该恶意软件仅由开发者私人使用。可以预期,MaaS 计划的引入将导致涉及 DarkGate 恶意软件的恶意软件活动更加频繁,这意味着该恶意软件可能会在未来数月乃至数年内构成持续威胁。
感染链概述
在过去的几周里,Telekom Security 观察到了一个感染链,其中初始有效负载是通过 MSI 安装程序文件传递的。受害者可以通过单击他们收到的网络钓鱼消息中包含的链接来获取此文件。该链接最初可能指向流量分配系统 (TDS)。如果满足攻击者设置的要求,TDS 会将受害者用户重定向到 MSI 下载的最终负载 URL。当用户打开下载的MSI文件时,就会触发DarkGate感染。稍后将描述感染过程的细节。
此外,Telekom Security 还观察到了不同活动的样本,其中初始有效负载以 Visual Basic 脚本形式提供。在这种情况下,我们不知道初始有效负载到底是如何传递给受害者用户的。该脚本经过混淆处理并包含诱饵/垃圾代码,最终会调用curl
Windows 预装的二进制文件,从攻击者控制的服务器下载 AutoIt 可执行文件和脚本文件。此后,感染链的工作方式与本文档中描述的其他活动完全相同。
初始有效载荷
MSI 变体
在初始有效负载以 MSI 文件形式交付的活动中,该文件似乎是由 www.exemsi.com 的“MSI Wrapper”软件生成的,从文件元数据中可以看出:
Application Verifier x64 External Package - UNREGISTERED - Wrapped using MSI Wrapper from www.exemsi.com
对于此感染链,初始有效负载是独立的,这意味着所有其他有效负载都嵌入到文件中,并且不需要从外部源提取更多有效负载来完成 DarkGate 感染。具体来说,该文件包含 AutoIt 可执行文件和由安装程序执行的相应脚本。
VBS变体
对于初始有效负载以 VBS 文件形式交付的活动,样本包含大量垃圾函数,如下面的屏幕截图所示。真正的感染代码隐藏在几个字符串中,这些字符串还通过插入随机垃圾序列进行混淆。去除这个混淆层后,脚本逻辑很容易阅读并且相当简单。该脚本将生成一个cmd.exeshell ShellExecute,并使用curl当前 Windows 安装中默认附带的二进制文件来下载 AutoIt 可执行文件和相应的 AutoIt 脚本。这两个文件都将放置在C:驱动器上新创建的文件夹中。值得注意的是,至少在一种情况下,我们观察到脚本正在复制curl
二进制文件复制到新文件夹并从那里调用它,这很可能是威胁行为者试图逃避现有的 EDR 检测规则。
AutoIt脚本分析
AutoIt 脚本与.au3通常用于纯文本脚本的文件扩展名捆绑在一起。相反,它包含一个预编译的脚本,通常会使用该.a3x扩展。我们可以看到它是来自 magic bytes 的编译脚本AU3!EA06,由于某种原因,它不在文件的开头,而是遵循一长串 base64 编码的数据(我们将在下面回到这一点!)。
将文件从 重命名为 后,可以使用myAut2Exe反编译该脚本(可以在此处找到预编译的二进制文件) 。对反编译脚本的分析表明,该脚本的唯一目的是执行包含为十六进制编码字符串的 shellcode:.au3.a3x
上面的屏幕截图仅显示了创建 shellcode 字符串的完整序列的摘录。BinaryToString然后,该字符串被解码为二进制数据,并使用和函数调用写入新分配的内存区域DllStructCreate。最后执行两条命令。这些命令被混淆为十六进制编码的字符串。解码这些字符串揭示了它们的目的,即使新分配的内存区域可执行并VirtualProtect使用以下命令调用 shellcode CallWindowProc:
DllCall("kernel32.dll", "BOOL", "VirtualProtect", "ptr", DllStructGetPtr($MFCKuCoyGW), "int", BinaryLen($MzrsVimcSw), "dword", 0x40, "dword*", $oldprotect)
DllCall("user32.dll", "lresult", "C"&chr(97)&"llWindowProc", "ptr", DllStructGetPtr($MFCKuCoyGW), "hwnd", 0, "uint", 0, "wparam", 0, "lparam", 0)
稍后我们将看到,如果我们只对最终的 DarkGate 恶意软件负载感兴趣,则实际上不需要提取和分析该 shellcode。然而,在接下来的部分中,我们将快速浏览其余的感染链步骤,以简要概述整个过程。
Shellcode分析
shellcode 以堆栈字符串的形式嵌入 PE 文件,如下面的屏幕截图所示(MZP
构造字符串开头的特征标头)。shellcode 的唯一目的是加载并最终执行这个 PE 文件。我们没有分析这个过程的所有细节。相反,我们模拟了 shellcode,将完整的 PE 文件写入堆栈,然后转储相应的内存部分以进行进一步分析。
初始滴管/加载器分析
从上一步中提取的 PE 文件相当小(~15 KB)。当在沙箱中执行它时,我们收到以下错误消息。显然,该文件是某种加载程序,需要额外的资源才能正常运行。
当使用调试器跟踪加载程序时,很明显它正在尝试查找并读取.au3上述脚本文件。如果.au3找到该文件,则程序继续执行,并且可以看出加载程序访问脚本文件中存在的 Base64 编码序列来解码并执行另一个 PE 文件。
正如其他研究人员已经描述的那样,该过程的具体情况如下:在脚本文件中,存在多个以字符分隔的 Base64 字符串|。加载程序将使用这些字符串中的第二个来计算单字节 XOR 密钥。第三个 base64 字符串包含最终的有效负载,即 DarkGate 恶意软件样本。执行 Base64 解码后,加载程序应用 XOR 密钥和最终的 NOT 操作来显示解密的 PE 文件。
应该指出的是,研究人员可以轻松实施此过程,以便对利用此加密过程的 DarkGate 恶意软件样本进行静态解密。此外,由于仅使用单字节 XOR 密钥,加密 PE 文件的可能排列数量非常有限。出于以下几个原因,这可能会有所帮助:
1、为了实施 YARA 规则来搜寻/检测使用 AU3 技术加密的 DarkGate 有效负载:我们创建了一个脚本,用于计算特征MZ标头的所有 256 种可能的排列。
2、对加密的 DarkGate 有效负载执行暴力解码:如果文件以某种方式填充或解密过程的某些细节发生变化,我们仍然可以通过探测所有 256 种可能的排列并检查结果来解密有效负载预期的特征模式。
显然,这种强力过程也会产生误报结果。因此,需要仔细验证解密的有效负载。
DarkGate 恶意软件分析
通过上述步骤,我们能够解压主要有效负载二进制文件,即 DarkGate 恶意软件本身。该示例使用Delphi 进行编程和编译。在对样本进行逆向工程时,Ghidra 最初无法重建所使用的 Delphi 库函数和对象。使用Dhrake项目(它使用交互式 Delphi Reconstructor (IDR)生成的输出)极大地帮助使反编译的示例更具可读性。
为了反转样本,我们有以下主要目标:
1、了解如何提取 C2 服务器和其他配置数据
2、识别恶意软件使用的防御规避机制和反分析技术
3、大致了解恶意软件的功能
两统治一切?
我们对解压/解密的 DarkGate 恶意软件样本的分析表明,除了一些人类可读的字符串之外,还存在大量 Base64 编码的字符串。然而,通过应用标准的 Base64 解码不可能揭示任何有意义的内容。正如其他研究人员已经指出的那样,字符串加密使用 base64,但使用非标准字母表/表格。该二进制文件包含多个函数,这些函数接收编码的字符串和字母表作为输入,并输出解码的字符串。
值得注意的是,有两种不同的字母表用于不同的目的:一种字母表用于解码整个二进制文件中使用的不同字符串,而另一种字母表仅用于解码样本配置。
我们对 DarkGate 样本的进一步分析表明,至少有一个字母字符串频繁变化。因此,为了提供强大的字符串和配置解码器,我们需要识别每个分析样本所使用的字母表。我们当然可以通过在每个二进制文件中搜索相关函数并提取引用的字符串来做到这一点,但即使只有一小部分代码或构建过程发生变化,这也很容易出错。
因此,我们可以利用相关字符串的特征:这些字符串始终具有相同的长度,并且包含 Base64 字母表的每个字符恰好一次。基本上我们正在寻找相同字符的不同排列的字符串。我们可以轻松地实现这一点,首先使用正则表达式搜索潜在的候选者[A-Za-z0-9+/=]{64},然后检查哪个候选者恰好包含每个预期字符一次,我们通过简单地对字符串的所有字符进行排序并将结果与给定的参考字符串进行比较来实现。这是一种稳健的方法,成功识别了我们分析的所有样本的两个自定义字母字符串。
提取并解析配置
一旦我们找到了解码编码的 Base64 字符串的方法,访问和转储恶意软件配置就变得相当简单:配置数据包含在两个不同的字符串中。其中一个字符串保存所使用的 C2 服务器的地址,而另一个字符串是包含所有其他配置参数和标志的键值列表。
1=No每个配置值都以 0 到 20 范围内的数字键给出,例如,使用或来设置控制启动/持久行为的标志1=Yes。通过逆向工程,我们确定了大多数使用的标志和值的用途。我们的配置提取器将所有已知标志转换为更易于理解的格式,并以 JSON 格式输出结果:
{
"anti_analysis": false,
"anti_debug": false,
"anti_vm": false,
"c2_ping_interval": 4,
"c2_port": 7891,
"c2_servers": [
"http://80.66.88.145"
],
"check_disk": true,
"check_ram": true,
"check_xeon": false,
"crypter_au3": true,
"crypter_dll": false,
"crypter_rawstub": false,
"crypto_key": "bIWRRCGvGiXOga",
"flag_14": 4,
"flag_18": true,
"flag_19": true,
"internal_mutex": "bbbGcB",
"min_disk": 50,
"min_ram": 4096,
"rootkit": true,
"startup_persistence": true
}
各个标志的含义如下:
anti_analysis(6) 和anti_vm(3) - 启用对常见沙箱和 VM 解决方案使用的典型硬件/驱动程序标识符是否存在的检查。
anti_debug(17) - 启用定期检查调试器是否附加到进程。
c2_ping_interval(16) - 设置对 C2 服务器的两次“ping”之间使用的初始睡眠间隔。该值是自适应的,可以通过 C2 协议的各种功能进行更改。
c2_port(0) - 设置用于 C2 通信的端口。由于 C2 服务器的实际地址存储在不同的字符串中,因此所有配置的服务器都使用相同的端口。
c2_servers- 不是键值列表的一部分,而是存储在单独的字符串中。可存放多个服务器,并用|字符分隔
check_disk(5) 和check_ram(8) - 允许检查最小磁盘/RAM 大小。如果启用,将使用min_disk(4) 和(7)的值。min_ram
check_xeon(9) - 启用 CPU 检查以确定是否使用 Xeon 处理器。
crypter_au3(13)、crypter_dll(12) 和crypter_rawstub(11) - 配置样本使用哪种打包/加密机制。这些标志用于许多不同的功能(rootkit、持久性、自我更新等),以触发适用于每种机制的适当程序逻辑。
crypto_key(15) - 在 C2 通信协议中使用,对提交的数据进行加密。我们还没有对此进行详细分析。
internal_mutex(10) - 显然用于同步 DarkGate 恶意软件的不同线程或进程的互斥体的名称。我们还没有对此进行详细分析。
rootkit(2) - 启用不同的机制,使用进程空洞技术将恶意软件代码注入其他进程。
startup_persistence(1) - 启用恶意软件的持久性功能,可以将恶意软件代码的副本写入磁盘并创建注册表运行密钥。
flag_XX对于我们尚不知道其用途的标志,我们只需维护配置输出中的数值即可。
监视配置标志的特定组合可能是跟踪和识别恶意软件的不同活动或附属机构的潜在方法。例如,可以看到从另一个 DarkGate 样本获得的以下配置与上面的配置有很大不同。
{
"anti_analysis": false,
"anti_debug": false,
"anti_vm": false,
"c2_ping_interval": 32,
"c2_port": 80,
"c2_servers": [
"http://a-1bcdn.com",
"http://avayacloud.com.global.prod.fastly.net",
"http://intranet.mcasavaya.com"
],
"check_disk": false,
"check_ram": false,
"check_xeon": false,
"crypter_au3": true,
"crypter_dll": false,
"crypter_rawstub": false,
"crypto_key": "nqSRmVfSEQwfgo",
"flag_14": 32,
"flag_18": true,
"flag_19": true,
"internal_mutex": "dEcCaG",
"min_disk": 100,
"min_ram": 4096,
"rootkit": true,
"startup_persistence": true
}
更多 DarkGate 功能和 TTP
在以下段落中,我们将总结有关 DarkGate 恶意软件的功能和 TTP 的进一步分析结果。
持续
如果启用,恶意软件会将自身的副本写入磁盘并创建注册表运行键以在重新启动之间持续执行。
权限提升
对于删除系统还原点等任务,恶意软件可以提升系统权限。
防御规避
如上所述,该示例包含多种函数来逃避典型的分析工具。当启用相应的功能并且样本检测到与其中一项检查相匹配的环境时,它将简单地终止该进程。
此外,该恶意软件还会寻找多种知名的反病毒产品,并可能根据结果改变其行为。找到的反病毒产品也将被传送回 C2 服务器。
该恶意软件还可能伪装其存在,并将其自身注入到合法的 Windows 进程中,具体取决于所使用的配置。
凭证访问
该恶意软件包含多种功能,可以从受害者系统窃取密码、cookie 或其他机密数据。目标程序范围从网络浏览器到电子邮件软件以及其他软件,例如 Discord 或 FileZilla。值得注意的是,该恶意软件使用Nirsoft 发布的多个合法免费软件工具来提取机密数据。
发现
该恶意软件能够查询不同的数据源,以获取有关操作系统、登录用户、当前运行的程序和其他信息。此信息将发送到 C2 服务器,并可在威胁参与者的面板中获取。
收藏
除了上面已经描述的机制之外,恶意软件还可以在通过 C2 通道请求时从受害者系统收集任意文件。
命令与控制
在一些初始化函数之后,恶意软件继续执行我们识别为“C2 主循环”的函数。在这个循环中,恶意软件定期轮询C2服务器以获取新指令,执行接收到的命令,最后将结果发送回C2服务器。
每个命令都由一个数值标识,我们分析的 C2 主循环包含 100 多个不同的命令。我们没有彻底分析所有包含的命令和功能,但粗略地概述了大多数命令属于以下类别之一:
1、信息收集:收集系统信息或其他相关数据
2、自我管理:启动或停止恶意软件组件,控制恶意软件设置
3、自我更新:更新恶意软件,下载附加组件
4、Stealer:从各种程序和数据源窃取数据
5、Cryptominer:启动、停止和配置 Cryptominer
6、RAT:启动VNC连接、截图、执行命令
7、文件管理:浏览目录,从受害者系统下载文件
下面可以看到由不同命令触发的一些示例性功能的摘录。
DarkGate面板
开发者提供了几个简短的视频,其中展示了一些后端面板的功能。最初,开发人员通过主窗口的菜单按钮打开“存根构建器”。通过几个选项卡,附属机构可以设置恶意软件的不同配置选项:
此外,还存在一个“LNK 漏洞利用构建器”来掩盖恶意内容的真实性质:
当开发人员在虚拟机中执行构建的恶意软件时,受害者系统在面板中可见:
可通过上下文菜单在受害者系统上执行不同的命令:
最后,开发人员提供了集成文件管理器的简短演示,用于查看受害者系统上的目录内容:
威胁者信息
自 2023 年 6 月 16 日起,一位名为RastaFarEyexss.is的用户一直在网络exploit.in犯罪论坛上为 DarkGate Loader 做广告。该用户似乎是该恶意软件的唯一开发者,并表示自 2017 年以来已投入超过 20,000 小时的工作来开发该项目。
该攻击者提供了不同的定价模型(1 天 = 1,000 美元、1 个月 = 15,000 美元、1 年 = 100,000 美元),并声称未来可能会提高价格。此外,该行为者似乎限制了最多 10 个附属机构(“插槽”)的访问,以“保持该项目的私密性”。
该攻击者将 DarkGate 宣传为“渗透测试人员/红队人员的终极工具”,并且它具有“您在任何地方都找不到的功能”。此外,该行为者多次宣称该工具完全无法被常见的反病毒产品检测到。
首次发布后,参与者经常提供有关错误修复、新功能和其他更改的更新。
联系地址
该攻击者提供了以下联系地址:
电子邮件:coding_guru@exploit.im
毒性:09B950550CAD95899AC17C0B1384CD55C9BD81396B19EFFE2E80839D641D3221860ADEA89733
电报:https://t.me/evtokens
语言和地点
该攻击者主要用英语xss.is在网络犯罪论坛上发帖,并用英语开发了面板和恶意软件。然而,从一些观察到的语法错误可以假设英语不是演员的母语。exploit.in
当演员收到俄语问题时,他们也能用俄语提供答案。该演员还在 Telegram 上使用西里尔字母作为用户名Растафарай,可以音译为Rastafarai。
除了许多英文字符串之外,我们分析的 DarkGate 样本还包含一些西班牙语字符串,例如administrador de tareas(任务管理器)。此外,该演员发布的演示视频显示,系统区域设置和键盘布局设置为西班牙语。视频还显示,攻击者维护的受害者虚拟机使用来自西班牙的 IP 地址连接到面板。但是,该地址可能属于 VPN 或匿名服务。
IOCs
DarkGate C2 服务器
149.248.0.82
179.60.149.3
185.143.223.64
185.8.106.231
45.89.65.198
5.34.178.21
80.66.88.145
89.248.193.66
a-1bcdn.com
avayacloud.com.global.prod.fastly.net
drkgatevservicceoffice.net
intranet.mcasavaya.com
onlysportsfitnessam.com
reactervnamnat.com
sanibroadbandcommunicton.duckdns.org
xfirecovery.pro
转载来源:https://github.security.telekom.com/2023/08/darkgate-loader.html
图片来源网络侵权可联系删除