ESET 研究人员发现了 Dolphin,这是一个复杂的后门,扩展了 ScarCruft APT 组织的武器库
ESET 研究人员分析了 ScarCruft APT 组织使用的一个以前未报告的后门。 我们将其命名为 Dolphin 的后门具有广泛的间谍功能,包括监控驱动器和便携式设备以及泄露感兴趣的文件、键盘记录和截屏以及从浏览器窃取凭据。 它的功能是为选定的目标保留的,在使用不太高级的恶意软件进行初始妥协后,后门会部署到这些目标。 与其他 ScarCruft 工具一样,Dolphin 滥用云存储服务——特别是 Google Drive——进行 C&C 通信。
在我们的调查过程中,我们看到了后门的持续发展以及恶意软件作者试图逃避检测。 我们分析的早期 Dolphin 版本的一个显着特征是能够修改受害者登录的 Google 和 Gmail 帐户的设置以降低其安全性,最有可能保持对受害者电子邮件收件箱的访问。
在这篇博文中,我们提供了对 Dolphin 后门的技术分析,并解释了它与之前记录的 ScarCruft 活动的联系。 我们将在 阿瓦尔 2022 会议。
- ESET 研究人员分析了 Dolphin,这是 ScarCruft APT 组织使用的一个以前未报告的后门。
- Dolphin 仅部署在选定的目标上; 它会在受感染系统的驱动器中搜索有趣的文件,并将它们泄露到 Google 云端硬盘。
- 该后门被用作 2021 年初多阶段攻击的最终有效载荷,涉及对韩国在线报纸的水坑攻击、Internet Explorer 漏洞利用和另一个名为 BLUELIGHT 的 ScarCruft 后门。
- 自 2021 年 XNUMX 月首次发现 Dolphin 以来,ESET 研究人员已经观察到多个版本的后门,其中威胁行为者改进了后门的功能并试图逃避检测。
- 我们分析的早期 Dolphin 版本的一个显着特征是能够修改受害者登录的 Google 和 Gmail 帐户的设置以降低其安全性。
ScarCruft 简介
ScarCruft,也称为 APT37 或 Reaper,是一个至少从 2012 年开始运作的间谍组织。它主要针对韩国,但其他亚洲国家也成为目标。 ScarCruft 似乎主要对政府和军事组织以及与朝鲜利益相关的各个行业的公司感兴趣。
海豚概述
2021 年,ScarCruft 对一家关注朝鲜的韩国在线报纸进行了水坑攻击。 该攻击由多个组件组成,包括一个 Internet Explorer 漏洞和 shellcode,导致一个名为 BLUELIGHT 的后门,据报道 泛滥 和 卡巴斯基.
在这些报告中,BLUELIGHT 后门被描述为攻击的最终有效载荷。 然而,在分析攻击时,我们通过 ESET 遥测发现了第二个更复杂的后门,它通过 BLUELIGHT 部署在选定的受害者身上。 我们根据在可执行文件中找到的 PDB 路径将此后门命名为 Dolphin。
虽然 BLUELIGHT 后门在利用后对受感染的机器执行基本的侦察和评估,但 Dolphin 更为复杂,并且仅针对选定的受害者手动部署。 这两个后门都能够从命令中指定的路径泄露文件,但 Dolphin 还主动搜索驱动器并自动泄露带有 ScarCruft 感兴趣的扩展名的文件。
图 1 概述了导致执行 Dolphin 后门的攻击组件。
海豚分析
以下部分提供了对 Dolphin 组件及其功能的分析。
该分析基于我们发现的第一个后门版本 1.9(基于代码中找到的字符串)以及有关新版本更改的附加信息。 可以在以下位置找到版本更改的摘要说明 海豚进化 部分。
海豚安装程序
随后的部分描述了在分析的攻击场景中负责执行 Dolphin 后门的安装程序和加载程序组件。
值得注意的是,此安装程序和已部署的加载程序并非 Dolphin 独有,之前曾被视为与其他 ScarCruft 恶意软件一起使用。
安装程序 shellcode 遵循以下主要目标:
- 下载并部署 Python 解释器
- 生成并部署带有其有效负载的加载链
- 确保加载链的持久性
安装程序从 OneDrive 下载 CAB 文件,其中包含合法的 Python 2.7 解释器。 CAB 被解压到 %APPDATA%,并且根据体系结构,解释器最终位于以下目录之一:
- %appdata%Python27(32)
- %appdata%Python27(64)
安装程序为加载链组件生成两个文件路径, 和 , 格式 .
是随机选择的
- %程序数据%
- %民众%
- %APPDATA%微软
- %APPDATA%微软视窗
- % 本地应用程序数据%
- %LOCALAPPDATA%微软
- %LOCALAPPDATA%MicrosoftWindows
和 从现有文件名(无扩展名)中随机选择 %windir%inf*.inf 和 %windir%system32*.dll.
为了生成 Loader 的第 1 步,它使用了一个脚本模板,该模板填充了随机生成的名称(变量、函数)。 带有生成示例的模板如图 2 所示。
然后将脚本写入 .
第 2 步(嵌入在安装程序中)包含加载链的其余部分,包括有效负载,使用从当前时间派生的单字节 XOR 密钥加密并写入 .
为了保持加载链的开始,安装程序设置了一个 Run 注册表值:
HKCUSoftwareMicrosoftWindowsCurrentVersionRun”%appdata%Python27({32|64})pythonw.exe” “” “”
从匹配的现有文件名中随机选择 %WINDIR%inf*.inf, 丢弃 天道酬勤。 延期。
为了在安装后启动加载链,它创建了一个一次性计划任务。
海豚装载机
Dolphin 加载器由 Python 脚本和 shellcode 组成。
第 1 步,Python 脚本,读取指定文件,对其内容进行异或解密,并执行生成的 shellcode。
第 2 步,shellcode,创建一个主机进程(随机 CLI 可执行文件来自 %WINDIR%System32*.exe), XOR-decrypts further shellcode in itself, and injects it into the created process.
第 3 步,另一个 shellcode,异或解密一个嵌入式 PE 文件——Dolphin 后门——并使用自定义 PE 加载程序加载和执行它。
海豚后门
Dolphin 是一个后门,它收集信息并执行其操作员发出的命令。 后门是用 C++ 编写的常规 Windows 可执行文件。 它与用作其 C&C 服务器的 Google Drive 云存储进行通信。
我们根据在可执行文件中找到的 PDB 路径命名后门 Dolphin:
D:开发后门Dolphinx64ReleaseDolphin.pdb
坚持
后门会定期检查并创建自己的持久性,方法是确保每次系统启动时都运行加载程序的第 1 步,通过注册表运行值,与安装程序中的方式相同:
HKCUSoftwareMicrosoftWindowsCurrentVersionRun”%appdata%Python27({32|64})pythonw.exe” “” “”
公司能力
收集计算机和后门的以下基本信息:
- 当前后门配置
- 用户名
- 计算机名
- 本地和外部 IP 地址
- 已安装的安全产品列表
- 内存大小和使用
- 调试器和其他检查工具(例如 Wireshark)的检查结果
- 操作系统版本
- 当前时间
- 恶意软件版本
Dolphin 从 Google Drive 存储下载其操作员发出的命令并执行它们。 执行后,命令的输出被上传。 Dolphin 的大部分功能都是通过命令控制的。
最相关的功能如下所述。
文件外泄
默认情况下,Dolphin 会搜索所有非固定驱动器 (USB),创建目录列表并按扩展名过滤文件。 此搜索可以通过专用命令扩展到固定驱动器 (HDD)。
在默认配置中指定了以下感兴趣的文件扩展名,特定于媒体、文档、电子邮件和证书:
jpg、doc、xls、ppt、hwp、url、csv、pdf、显示、单元格、eml、odt、rtf、nxl、amr、3gp、m4a、txt、msg、密钥、der、cer、docx、xlsx、pptx、音频、mp3
除了这种自动搜索之外,还可以泄露特定文件。
在较新的版本中,默认搜索已扩展到固定驱动器。 获取特定文件的命令得到改进,通过将其缓存/存储在配置中直到完成。
便携式设备
在常规驱动器中,Dolphin 还使用 Windows 便携设备 (WPD) API 搜索智能手机等便携设备。 它创建目录列表并泄露文件。 在我们发现的第一个版本中,此功能似乎正在开发中,原因如下:
- 依赖硬编码路径和受害者计算机上可能不存在的用户名
- 缺少变量初始化——一些变量被假定为零初始化,或者在没有初始化的情况下被取消引用为指针
- 缺少扩展过滤
该代码主要基于 Microsoft 的便携式设备 COM API 代码示例.
除了自动搜索之外,操作员还可以指定要从便携式设备中泄露的单个文件。
在较新的版本中,此功能通过添加扩展过滤来完成和改进。 出于未知原因,删除了从便携式设备检索特定文件的命令。
键盘记录和屏幕截图
Dolphin 记录窗口的击键,其标题包含在其配置中指定的子字符串。 默认值是 铬 和 互联网探索 (原文如此)。 这是通过 GetAsyncKeyState API,记录击键以及窗口名称和当前时间。 屏幕截图也以可配置的间隔拍摄; 默认为每 30 秒一次。
默认情况下启用屏幕截图和键盘记录,并且可以通过命令进行切换。
外壳代码
Dolphin 可以接收用于执行的 shellcode。 shellcode 存储在注册表中,位于以下键之一下:
- HKCU软件MicrosoftWindows当前版本主题经典
- HKCU软件MicrosoftOneDrive更新
- HKCU软件MicrosoftWindows当前版本Internet设置Https软件MicrosoftInternet ExplorerZone (两个子键为一个,可能是编码错误)
它可以在本地执行,也可以在创建和注入的指定单独进程中执行。
在较新的版本中,shellcode 存储在文件中而不是注册表中,存储的 shellcode 在 Dolphin 启动时加载和执行,这在 1.9 版本(我们分析的原始版本)中不是这种情况。
外壳命令
Dolphin 可以执行 shell 命令; 这是通过 en API 及其输出被检索。
窃取凭据
Dolphin 可以以保存的密码和 cookie 的形式从浏览器中检索凭据。 支持以下浏览器:
- 铬系列
- 边缘
- 互联网浏览器
在 2.2 版中,此功能已被删除,大概是为了避免被发现。 它后来在 3.0 版本中恢复,但形式不同。 它现在以 shellcode 的形式从 C&C 动态接收。
谷歌账户
Dolphin 的另一个命令会修改当前登录的 Google 帐户的设置,从而降低其相对于默认设置的安全性。 它从浏览器中窃取登录帐户的现有 cookie,并提出修改设置的请求。
首先,它通过向以下地址发送 HTTP POST 请求来启用通过 IMAP 协议访问 Gmail:
- https://mail.google.com/mail/u/0/?ik=&at=&view=up&act=prefs
然后它通过 HTTP POST 发送一个未记录的 RPC 请求来启用“不太安全的应用程序访问”:
- https://myaccount.google.com/_/AccountSettingsUi/data/batchexecute
这些修改在后门中被称为“thunder access”,可能是对 Thunderbird 电子邮件客户端的引用。 通过 IMAP 使用第三方客户端访问受害者的收件箱可能有助于 ScarCruft 操作员在窃取凭据后保持对受害者电子邮件的访问权限,由于 Google 检测到可疑的登录尝试,仅凭这些可能还不够。
该功能在后门的 1.9 和 2.0 版本中被发现; 它不存在于版本 2.2 或 3.0 中。
数据暂存
Dolphin 将数据泄露到 Google Drive 存储,在上传之前将数据暂存在加密的 ZIP 存档中。 后门还以 MD5 哈希值的形式维护文件列表,以避免多次上传同一文件。 可以通过专用命令重置此列表。
配置
后门包含初始默认配置,该配置在首次运行时保留并在后续运行时加载。 它存储在文件中 %程序数据%.inf,其中 从匹配的现有文件名中随机选择 %windir%inf*.inf. 内容使用带有随机 16 字节密钥和 IV 的 AES CBC 加密,这些密钥和 IV 存储在文件的开头。 该配置使用 JSON 格式,带有类似散列的键。 图 3 显示了解密配置的示例。
可以通过命令修改配置。 除其他外,它包含以下内容:
- 加密密钥
- Google Drive API 访问凭据
- 键盘记录的窗口标题
- 要泄露的文件扩展名列表
海豚进化
自 2021 年 4 月首次发现 Dolphin 以来,我们已经观察到多个版本的后门,其中威胁行为者改进了后门的功能并试图逃避检测。 图 XNUMX 总结了看到的版本; 下面提供了版本更改的更详细说明。
2021 年 2.0 月 – XNUMX 版
2.0 版对 2021 年 XNUMX 月的版本进行了以下更改:
- 动态解析可疑 API 而不是静态导入(例如 GetAsyncKeyState) 添加
- Shellcode 功能完成并改进
- 持久化的 shellcode 存储在文件中而不是注册表中
- 在 Dolphin 启动时加载和执行的持久化 shellcode(之前缺失)
- 便携式设备文件泄露功能完成并改进
- 添加了扩展的渗漏
- 添加了内部存储器和 SD 卡的识别(来自设备 ID)
- 从便携式设备有效地获取文件的命令 NOP
- 改进了设备/驱动器检测和文件泄露
- Dolphin 现在无条件地为所有驱动器和设备(固定驱动器、可移动驱动器、便携式设备)每 30 分钟创建目录列表并按扩展名泄露文件。 以前,它仅适用于可移动驱动器; 默认情况下禁用固定驱动器,用于访问便携式设备的代码存在错误和损坏。
2021 年 2.2 月 – 版本 XNUMX
2.2 版中引入的更改主要集中在检测规避上。 凭证窃取功能和与之相关的命令——凭证窃取和谷歌帐户命令——已被删除。 此版本中的大多数字符串都是 base64 编码的。
2022 年 3.0 月 – 版本 XNUMX
在 3.0 版本中,代码被重组,类被重命名,功能保持不变。 在此版本中,base64 编码的字符串再次为明文。 我们观察到以下额外变化:
- 窃取以不同形式恢复的凭据的命令; 它现在从 C&C 执行 shellcode
- 完全删除从便携式设备获取文件的命令
- 从驱动器获取文件的命令现在缓存/存储在配置中直到完成。 如果中断(例如被计算机关机),它将在下一次运行时完成。 这在发出命令时可能未连接的可移动驱动器的情况下也很有用。
- 添加了互联网连接检查(https://www.microsoft.com); 如果离线则不会执行恶意代码
2.2 和 3.0 版本之间的差异,尤其是字符串编码的差异,表明这些版本可能是由不同的人并行开发的。
结论
Dolphin 是 ScarCruft 大量滥用云存储服务的后门程序的又一新成员。 在选定目标上部署后,它会在受感染系统的驱动器中搜索有趣的文件,并将它们泄露到 Google Drive。 在后门的先前版本中发现的一项不寻常的功能是能够修改受害者的 Google 和 Gmail 帐户的设置以降低其安全性,大概是为了维护威胁参与者的帐户访问权限。 在我们对 Dolphin 后门的多个版本的分析中,我们看到了持续的发展和逃避检测的尝试。
ESET Research 还提供私人 APT 情报报告和数据馈送。 有关此服务的任何查询,请访问 ESET 威胁情报 页面上发布服务提醒。
国际石油公司
SHA-1 | 文件名 | ESET检测名称 | 课程描述 |
---|---|---|---|
F9F6C0184CEE9C1E4E15C2A73E56D7B927EA685B | 无 | Win64/Agent.MS | 海豚后门版本 1.9 (x64) |
5B70453AB58824A65ED0B6175C903AA022A87D6A | 无 | Win32/间谍.Agent.QET | 海豚后门版本 2.0 (x86) |
21CA0287EC5EAEE8FB2F5D0542E378267D6CA0A6 | 无 | Win64/Agent.MS | 海豚后门版本 2.0 (x64) |
D9A369E328EA4F1B8304B6E11B50275F798E9D6B | 无 | Win32/代理.UYO | 海豚后门版本 3.0 (x86) |
2C6CC71B7E7E4B28C2C176B504BC5BDB687C4D41 | 无 | Win64/Agent.MS | 海豚后门版本 3.0 (x64) |
MITRE ATT&CK 技术
该表是使用 12版 MITRE ATT&CK 框架。
战术 | ID | 名称 | 课程描述 |
---|---|---|---|
初始访问 | T1189 | 驾车妥协 | ScarCruft 使用水坑攻击来危害受害者。 |
执行 | T1059.006 | 命令和脚本解释器:Python | Dolphin 加载器 a 使用 Python 脚本。 |
T1059.007 | 命令和脚本解释器:JavaScript | ScarCruft 使用恶意 JavaScript 进行水坑攻击。 | |
T1203 | 利用客户端执行 | ScarCruft 利用 CVE-2020-1380 危害受害者。 | |
T1106 | 原生API | Dolphin 使用 Windows API 函数来执行文件和注入进程。 | |
坚持 | T1053.005 | 计划任务/作业:计划任务 | Dolphin 使用临时计划任务在安装后启动。 |
T1547.001 | 启动或登录自动启动执行:注册表运行键/启动文件夹 | Dolphin 使用运行键来持久化其加载程序。 | |
防御规避 | T1055.002 | 进程注入:可移植可执行注入 | Dolphin 可以注入到其他进程中。 |
T1027 | 混淆的文件或信息 | Dolphin 具有加密组件。 | |
凭证访问 | T1555.003 | 来自密码存储的凭据:来自 Web 浏览器的凭据 | Dolphin 可以从浏览器中获取保存的密码。 |
T1539 | 窃取网络会话 Cookie | Dolphin 可以从浏览器获取 cookie。 | |
药物发现 | T1010 | 应用程序窗口发现 | Dolphin 捕获活动窗口的标题。 |
T1083 | 文件和目录发现 | Dolphin 可以获得文件和目录列表。 | |
T1518.001 | 软件发现:安全软件发现 | Dolphin 获得已安装安全软件的列表。 | |
T1082 | 系统信息发现 | Dolphin 获取各种系统信息,包括操作系统版本、计算机名称和 RAM 大小。 | |
T1016 | 系统网络配置发现 | Dolphin 获取设备的本地和外部 IP 地址。 | |
T1016.001 | 系统网络配置发现:Internet 连接发现 | Dolphin 检查互联网连接。 | |
T1033 | 系统所有者/用户发现 | Dolphin 获取受害者的用户名。 | |
T1124 | 系统时间发现 | Dolphin 获取受害者的当前时间。 | |
购物 | T1056.001 | 输入捕获:键盘记录 | Dolphin 可以记录击键。 |
T1560.002 | 归档收集的数据:通过图书馆归档 | 使用 Zipper 库,Dolphin 在渗出之前压缩和加密收集的数据。 | |
T1119 | 自动收集 | Dolphin 定期从驱动器中收集具有特定扩展名的文件。 | |
T1005 | 来自本地系统的数据 | Dolphin 可以从本地驱动器收集文件。 | |
T1025 | 来自可移动媒体的数据 | Dolphin 可以从可移动驱动器中收集文件。 | |
T1074.001 | 数据暂存:本地数据暂存 | Dolphin 在渗出之前将数据分阶段收集到目录中。 | |
T1113 | 屏幕录制 | Dolphin 可以捕获屏幕截图。 | |
指挥和控制 | T1071.001 | 应用层协议:Web 协议 | Dolphin 使用 HTTPS 与 Google Drive 通信。 |
T1102.002 | Web 服务:双向通信 | Dolphin 与 Google Drive 通信以下载命令和泄露数据。 | |
渗出 | T1020 | 自动渗漏 | Dolphin 会定期泄露收集到的数据。 |
T1567.002 | 通过 Web 服务进行渗透:向云存储渗透 | Dolphin 将数据泄露到 Google 云端硬盘。 |