简介
2022 年 2 月 23 日,ESET 威胁研究团队 披露了一系列发现,涉及一个数据擦除恶意软件活动,该活动影响了乌克兰各地的数百个系统,名为 HERMETICWIPER。Elastic 此前发布了关于 “流血熊行动”的研究,该行动以类似的破坏意图针对乌克兰资产。
恶意软件擦除器仍然是对手试图对其有效载荷所影响的系统造成严重破坏的常用策略。通常,这类恶意软件旨在擦除系统可能拥有的任何驱动器的内容,导致最终用户的个人数据丢失。这类有效载荷的许多最近示例都包含篡改启动过程的策略,HERMETICWIPER 也不例外。
利用 Elastic Agent 7.9+ 及以上版本的客户可以免受这种特定恶意软件的侵害,并且正在进行进一步的研究以提高检测效果。
恶意软件擦除器和乌克兰目标
不幸的是,今年这并非乌克兰系统首次成为数据擦除有效载荷的目标 - Microsoft 发布了有关影响乌克兰境内系统的类似观察到的攻击的调查结果,但最初影响的系统数量要少得多。该出版物概述说,此特定早期活动的攻击目标集中在全国的多个政府机构、非营利组织和信息技术组织。
恶意软件阶段分析
HERMETICWIPER 由在塞浦路斯 注册的 Hermetica Digital Ltd. 进行数字签名,并嵌入来自 EaseUS Partition Manager 的 4 个合法驱动程序文件,这些文件使用 MS-DOS 实用程序 (mscompress) 进行压缩。Hermetica Digital Ltd. 已撤销代码签名证书。
执行后,HERMETICWIPER 会创建一个内核模式服务,并通过 DeviceIoControl API 函数与之交互。主要目标是破坏任何连接的物理驱动器,并使系统数据无法恢复。
以下是使用 Windows 事件日志和 Elastic Agent 在安装阶段生成的事件摘要。
在安装过程之后,HERMETICWIPER 通过使用 GetDiskFreeSpaceW Windows API 函数计算每个扇区中的字节数和每个群集中的扇区数来确定每个分区的大小。
恶意软件与 IOCTL 接口交互,将参数 IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS 和值 0x560000 传递给设备驱动程序,以便检索根驱动器 (\\.\C) 的物理位置。根驱动器对应于 Windows 用于启动的卷,其标识对于实现破坏性影响至关重要。
枚举每个可访问物理驱动器的 NTFS/FAT 引导扇区和随机文件物理偏移量,然后使用 CryptGenRandom API 函数和一系列 FSCTL_GET_RETRIEVAL_POINTERS 和 FSCTL_MOVE_FILE IOCTL 的输出覆盖这些偏移量。
一旦系统崩溃或重新启动,系统将无法启动,并且数据已损坏。
有趣的功能
与不同的勒索软件系列类似,HERMETICWIPER 在擦除过程中会避免特定的关键文件夹和文件。这可确保机器仍然可以运行,并且不会在稍后阶段影响磁盘擦除/文件损坏过程。
当将目标文件排队等待擦除时,观察到的另一种有趣的技术是通过将值 ::$INDEX_ALLOCATION 连接到文件名来访问它们。这个有据可查的 NTFS 技巧是一种额外的方法,可以绕过目标文件的访问控制列表 (ACL) 权限,从而在访问这些文件时提供更高的可靠性。
HERMETICWIPER 还在执行期间修改两个注册表设置 (ShowCompColor 和 ShowInfoTip),将这些键值设置为 0。在 Windows 中,当用户选择压缩 NTFS 目录/文件时,有一个设置允许用户在 Windows 资源管理器中将它们区分开来,显示为蓝色代表压缩数据,或绿色代表加密数据。这是恶意软件尝试在机器上发生磁盘损坏之前,不会因目录/文件上的不同颜色而使用户产生任何可疑行为。
粉碎组件分析
恶意软件通过在特定磁盘地址写入预生成的随机数据来擦除特定的目标文件夹/文件。它通过在二进制文件中设置 4 个不同的粉碎队列来完成此操作。
每个队列的用途及其功能尚未确定,但在示例的不同点使用。粉碎队列由目标链接列表组成,其中包含目标大小的随机预生成数据(在排队时生成)、磁盘号以及带有磁盘地址和大小的“文件”部分链接列表。
HERMETICWIPER Structure for ShredTarget function
struct ctf::ShredTarget
{
ctf::ShredTarget *p_next;
ctf::ShredTarget *p_prev;
ctf::FilePart *p_parts;
int disk_number;
uint8_t *p_random_filled_buffer;
int p_random_filled_buffer_size;
};
HERMETICWIPER Structure for FilePart function
struct ctf::FilePart
{
ctf::FilePart *p_next;
ctf::FilePart *p_prev;
uint64_t start_address;
uint64_t size;
};
HERMETICWIPER targeting file, folder, and disk partitions
ctf::QueueFileShred
ctf::QueueFolderShred
ctf::callback::IfPathContainNtUserQueueFileShred
ctf::callback::QueueNtfsBitmapAndLogAttributeShred
ctf::callback::QueueFileShredIfNotSymlink
ctf::callback::QueuePartitionFirstClusterShred
ctf::callback::QueuePartitionShred
恶意软件强调以下针对粉碎的项目。
- 如果出现问题或服务启动后删除的驱动程序
- 如果驱动程序启动出现问题,则恶意软件进程本身
- 磁盘的分区第一个群集(最多枚举 100 个)
- 用于存储 Windows 还原点的系统卷信息直接信息
有趣的是,如果计算机不属于域控制器,它将针对更多资产
在对先前描述的不同目标进行排队后,该示例会为其每个队列启动不同的同步/异步粉碎线程
然后,线程启动器将为每个目标启动一个新线程。
然后,粉碎线程将遍历目标的文件部分,并使用驱动程序在指定磁盘上的地址处进行写入。
驱动程序分析
用户模式组件加载的驱动程序与属于 Eldos Rawdisk 的驱动程序非常相似,并且先前已被像 Shamoon 和 Lazarus 这样的威胁参与者利用。不同之处在于,HERMETICWIPER 滥用属于 EaseUS Partition Master(一款合法的磁盘分区软件)的驱动程序 (epmntdrv.sys)。
加载驱动程序后,它会创建一个名为 \Device\EPMNTDRV 的设备,并创建一个符号链接以暴露给用户模式。然后,它使用以下入口点初始化驱动程序对象。
查看处理 IRP_MJ_CREATE 请求的调度函数,我们可以看到驱动程序构建了符号链接 \Device\HarddiskX\Partition0 的名称,并将指向其文件对象的指针保存在驱动程序的文件对象 fs 上下文中。然后,驱动程序使用卷管理器设备对象来获取指向磁盘设备堆栈中最高级别设备对象的指针。
之后,它会遍历堆栈以查找磁盘驱动程序,该驱动程序是 Microsoft 存储类驱动程序,它实现了所有存储设备通用的功能。找到后,它会将指向其设备对象的指针保存在文件对象结构的 FsContext2 字段中。
转到处理写入请求的函数,我们可以看到它构建了一个异步输入输出请求包 (IRP),这是一个用于驱动程序之间相互通信的 API,并将其转发到卷管理器设备。IRP 中使用的缓冲区由 内存描述符列表 (MDL) 驱动程序函数描述。最后,提供一个完成例程,该例程将释放 MDL 并释放 IRP 使用的内存。
读取请求在概念上与写入请求类似,换句话说,IoBuildsynchronousFsdRequest() API 函数在向驱动程序发送 IRP 时使用 IRP_MJ_READ 驱动程序函数而不是 IRP_MJ_WRITE 驱动程序函数。最后,处理 I/O 控制代码的例程会找到卷管理器所在的堆栈中最高的设备对象,并调用 IoBuildDeviceIoControlRequest() 将包含 I/O 控制代码的 IRP 转发到相应的驱动程序。
总而言之,该驱动程序的功能非常简单。它充当用户空间和底层文件系统驱动程序之间的代理,允许原始磁盘扇区操作,从而规避 Windows 操作系统的安全功能。
预构建检测引擎警报
以下现有的公开检测规则也可用于检测赛门铁克威胁情报团队和 ESET 描述的一些已使用的后渗透技术 [1][2][3]
- 通过 WMI 执行可疑 Cmd(通过 Impacket WMI 部署擦除器)
- 直接出站 SMB 连接 (SMB 传播器)
- 通过 RPC 远程启动的服务 (Remcom)
- 横向工具传输(通过文件共享暂存 PE 以进行远程执行)
- 通过 Windows 实用程序进行的潜在凭据访问
- 通过 LSASS 内存转储进行的潜在凭据访问
- 从不寻常的目录执行进程
- 从不寻常的目录执行 - 命令行
- 计划任务执行
- 计划任务创建
- 可疑的 MSHTA 执行
YARA 规则
rule Windows_Wiper_HERMETICWIPER {
meta:
Author = "Elastic Security"
creation_date = "2022-02-24"
last_modified = "2022-02-24"
os = "Windows"
arch = "x86"
category_type = "Wiper"
family = "HERMETICWIPER"
threat_name = "Windows.Wiper.HERMETICWIPER"
description = "Detects HERMETICWIPER used to target Ukrainian organization"
reference_sample = "1bc44eef75779e3ca1eefb8ff5a64807dbc942b1e4a2672d77b9f6928d292591"
strings:
$a1 = "\\\\?\\C:\\Windows\\System32\\winevt\\Logs" wide fullword
$a2 = "\\\\.\\EPMNTDRV\\%u" wide fullword
$a3 = "tdrv.pdb" ascii fullword
$a4 = "%s%.2s" wide fullword
$a5 = "ccessdri" ascii fullword
$a6 = "Hermetica Digital"
condition:
all of them
}
可观察对象
可观察对象 | 类型 | 参考 | 备注 |
---|---|---|---|
1bc44eef75779e3ca1eefb8ff5a64807dbc942b1e4a2672d77b9f6928d292591 | SHA-256 | 擦除器恶意软件 | HERMETICWIPER |
0385eeab00e946a302b24a91dea4187c1210597b8e17cd9e2230450f5ece21da | SHA-256 | 擦除器恶意软件 | HERMETICWIPER |
3c557727953a8f6b4788984464fb77741b821991acbf5e746aebdd02615b1767 | SHA-256 | 擦除器恶意软件 | HERMETICWIPER |
2c10b2ec0b995b88c27d141d6f7b14d6b8177c52818687e4ff8e6ecf53adf5bf | SHA-256 | 擦除器恶意软件 | HERMETICWIPER |
工件
还提供下载的工件,它们以 ECS 和 STIX 格式组合在一个 zip 包中。
参考文献
本文档中引用了以下研究
- https://twitter.com/ESETresearch/status/1496581903205511181
- https://twitter.com/juanandres_gs/status/1496607141888724997
- https://elastic.ac.cn/security-labs/operation-bleeding-bear
- https://therecord.media/microsoft-data-wiping-malware-disguised-as-ransomware-targets-ukraine-again/
- https://opencorporates.com/companies/cy/HE419469
- https://www.easeus.com/partition-manager
- https://docs.microsoft.com/en-us/windows/win32/devio/device-input-and-output-control-ioctl-
- https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getdiskfreespacew
- https://docs.microsoft.com/en-us/windows/win32/secauthz/access-tokens
- https://docs.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-findresourcew
- https://docs.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-loadresource