攻击者总是能找到各种创造性的方法来绕过防御功能并达到他们的目的,例如通过打包程序、加密程序和代码稠浊来实现。
然而,躲避检测以及最大化兼容性的最佳方法之一是利用操作系统自身的功能。

在打单软件威胁的背景下,一个值得把稳的情形是利用加密 DLL ADVAPI32.dll 中存在的导出函数,例如 CryptAcquireContextA、CryptEncrypt 和 CryptDecrypt。
通过这种办法,攻击者可以确保恶意软件在支持此 DLL 的各种版本的操作系统中运行并仿照正常行为。

而在最近的一次事宜相应中,另一种奥妙的技能引起了安全研究职员的把稳:利用原生 BitLocker 功能加密并盗取解密密钥。
BitLocker 的最初目的是办理丢失、被盗或不当退役设备导致数据被盗或透露的风险,然而,威胁者创造这种机制可以被重新用于实现恶意目的,且效果非常好。

phpadodbsql2008ShrinkLocker应用原生 BitLocker 功效加密并窃取解密密钥 jQuery

在该事宜中,攻击者能够支配并运行一个高等 VBS 脚本,该脚本利用 BitLocker 进行未经授权的文件加密。
安全研究职员在墨西哥、印度尼西亚和约旦创造了此脚本及其修正版本。
本文将详细剖析在事宜相应事情中得到的恶意代码,并供应缓解此类威胁的建议。

这不是我们第一次看到 BitLocker 用于加密驱动器并索要赎金。
以前,攻击者在访问和掌握关键系统后,会利用此 Microsoft 实用程序来加密这些系统。
然而,在这种情形下,攻击者采纳了额外的方法来最大限度地扩大攻击造成的危害,并阻碍对事宜的有效相应。

VBScript 剖析

一个有趣的征象是,攻击者没有像威胁者常日做的那样费心稠浊大部分代码。
对此最合理的阐明是,当脚本实行时,他们已经完备掌握了目标系统。
它以 Disk.vbs 的形式存储在 C:\ProgramData\Microsoft\Windows\Templates\ 中。

它的第一行包含一个函数,该函数利用 ADODB.Stream 工具将字符串转换为其二进制表示形式。
此函数稍后用于编码要在 HTTP POST 要求中发送的数据。

Stream_StringToBinary 函数

脚本紧张功能的第一步是利用 Windows 管理规范 (WMI) 在 Win32_OperatingSystem 类的帮助下查询有关操作系统的信息。
对付查询结果中的每个工具,脚本都会检讨当前域是否与目标不同。
如果不同,脚本将自动完成。

之后,它会检讨操作系统的名称是否包含“xp”、“2000”、“2003”或“vista”,如果 Windows 版本与个中任何一个匹配,脚本将自动完成并删除自身。

实行的初始条件

此后,脚本连续依赖 WMI 查询有关操作系统的信息。
然后,它会实行磁盘大小调度操作,这些操作可能会因操作系统版本检讨的结果而异。
这些操作仅在固定驱动器(DriveType = 3)上实行。
文件系统中常日存在以下驱动器类型:

恶意软件不会考试测验在网络驱动器(DriveType = 4)上实行相同操作的可能缘故原由是为了避免触发网络上的检测工具。

为了调度 Windows Server 2008 或 2012 中确当地驱动器大小,脚本会检讨主启动分区并保存此信息。
它会保存不同分区的索引,然后利用 diskpart 实行以下操作:

·将每个非启动分区的大小缩小 100 MB。
这将在启动卷以外的每个分区中创建 100 MB 的未分配空间;

·将未分配空间拆分为新的 100 MB 主分区;

·利用覆盖选项格式化分区,这会在必要时逼迫先卸载卷,并为每个分区分配文件系统和驱动器号;

·激活分区;如果缩小过程成功,则将“ok”保存为变量,以便脚本可以连续。

Windows Server 2008 和 2012 中脚本实行的磁盘大小调度操作

如果操作成功,代码将利用实用程序 bcdboot 和之前保存为启动卷的驱动器号在新的主分区上重新安装启动文件。

重新安装勾引文件

其他操作系统版本的分区缩小操作类似,但出于兼容性缘故原由,利用不同的代码段实现。
下面的示例显示了运用于 Windows 版本 7、8 和 8.1 的过程。

Windows 版本 7、8 或 8.1 中的磁盘大小调度操作

对付 Windows 2008 或 7,分区压缩过程完成后,变量 matchingDrives 会保存以逗号分隔的驱动器号,但条件是文件系统为 NFTS、exFAT、FAT32、ReFS 或 FAT。
代码经由修正,可打印示例:

然后,该脚本添加以下注册表项:

·fDenyTSConnections = 1:禁用 RDP 连接;

·scforceoption = 1:逼迫智能卡身份验证;

·UseAdvancedStartup = 1:哀求利用 BitLocker PIN 进行预启动身份验证;

·EnableBDEWithNoTPM = 1:许可在没有兼容 TPM 芯片的情形下利用 BitLocker;

·UseTPM = 2:如果可用,许可利用 TPM;

·UseTPMPIN = 2:如果可用,许可利用带有 TPM 的启动 PIN;

·UseTPMKey = 2:如果可用,许可利用带有 TPM 的启动密钥;

·UseTPMKeyPIN = 2:如果可用,许可利用带有 TPM 的启动密钥和 PIN;

·EnableNonTPM = 1:许可在没有兼容 TPM 芯片的情形下利用 BitLocker,须要 ·USB 闪存驱动器上的密码或启动密钥;

·UsePartialEncryptionKey = 2:哀求利用带有 TPM 的启动密钥;

·UsePIN = 2:哀求利用带有 TPM 的启动 PIN。

如果脚本检测到缺点,它将重新启动系统。

注册表修正

通过动态剖析恶意软件,我们可以确认实行的注册表变动:

此外,有多个函数实行这些操作,每个函数都是为不同版本的 Windows 设计的。
在某些条件下,它会通过远程做事器管理工具的 ID 266 检讨 BitLocker 驱动器加密工具是否处于活动状态。
然后,恶意软件会检讨 BitLocker 驱动器加密做事 (BDESVC) 是否正在运行。
如果没有,它会启动该做事。

BDESVC 验证

该脚本还将新启动分区的标签变动为攻击者的电子邮件,如下图所示,以便受害者可以联系他们。

驱动器标签修正

攻击者的电子邮件作为驱动器标签

之后,恶意软件会禁用用于保护 BitLocker 加密密钥的保护程序并将其删除。
删除方法可能因操作系统版本而异。
在 Windows Server 2008 或 Windows 7 场景中,这是通过 VBS 功能实现的,之后脚本利用 PowerShell 逼迫删除保护程序。

完成删除后,它可以利用数字密码作为保护器和加密功能。

保护器删除

删除默认保护器的缘故原由是为了避免用户规复密钥,如下例所示:

BitLocker密钥的规复

接下来,恶意软件利用以下元素的随机乘法和更换来天生 64 个字符的加密密钥:

·一个包含数字 0-9 的变量;

·著名的全字母句子“敏捷的棕色狐狸跳过了

·分外字符。

该密码的随机性由受影响系统的各种元素(例如已用内存和网络统计信息)组成的种子实现。
稍后,这些信息将发送给攻击者。
我们在自己的环境中测试了密钥天生逻辑,对脚本进行了轻微修正后,就能看到天生的密码。

密钥天生过程

然后,代码将先前天生的加密密钥转换为安全字符串(一种防止在内存中创建字符串工具的 PowerShell 选项),并有效地在驱动器上启用 BitLocker。

然后,脚本利用以下选项创建 HTTP POST 要求工具:

·利用 WinHTTP 版本 5.1。

·接管法语。

·忽略 SSL 缺点(httpRequest.Option(4) = 13056 à WinHttpRequestOption_SslErrorIgnoreFlags)。

·禁用重定向(httpRequest.Option(6) = false à WinHttpRequestOption_EnableRedirects)。

攻击者利用域名trycloudflare.com来稠浊其真实地址。
该域名是合法的,属于CloudFlare,用于为开拓职员供应快速隧道。
攻击者配置的子域名是scottish-agreement-laundry-further。

创建要求

该恶意软件还将有关机器和天生的密码的信息作为 POST 要求的有效负载,如下图所示。

POST 要求中要发送的信息

该脚本还包含一个循环,如果发生缺点,则会考试测验将信息发送给攻击者五次。

重试程序

通过一些调度,我们能够打印发送给攻击者的数据,如下图所示。
请把稳,数据包括打算机名称、Windows 版本、受影响的驱动器和密码字符串。
因此,受害者的 IP 地址也将记录在攻击者的做事器上,从而许可他们跟踪每个受害者。

要发送的信息

删除 BitLocker 保护器并配置驱动器加密后,脚本将实行以下步骤来粉饰其踪迹。
它会验证主机名是否是此恶意软件的目标,然后删除文件:

·\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\ScheduledTasks\ScheduledTasks.xml

·\scripts\Login.vbs

·\scripts\Disk.vbs

·C:\ProgramData\Microsoft\Windows\Templates\Disk.vbs

删除操作

然后,该脚本利用 wevtutil 打消 Windows PowerShell 和 Microsoft-Windows-PowerShell/Operational 日志。

它会打开系统防火墙并删除其所有规则,还会删除 VolumeInit 和 VolumeCheck 任务,末了,恶意软件会实行逼迫关机。

关机后,受害者将看到 BitLocker 屏幕。
如果用户考试测验利用规复选项,他们将看不到任何内容,只会看到一条:“您的 PC 上没有其他 BitLocker 规复选项”。

BitLocker 规复屏幕

策略、技能和程序

剖析显示,该威胁者对 VBScript 措辞以及 Windows 内部和实用程序(例如 WMI、diskpart 和 bcdboot)有深入的理解。
以下是针对此场景确定的 TTP。

文物和数字取证

由于脚本实行确当地活动包括清理其痕迹、打消一些日志和为实行而创建的任务,以及末了加密全体驱动器,因此获取取证证据来识别恶意活动并找到解密的机会并不随意马虎。

幸运的是,部分脚本内容和实行的命令已被第三方做事注册并记录,并被网络起来进行剖析。
这使我们能够从部分受影响的系统中获取加密密钥转换后的安全字符串。

已获取安全字符串

在其他地方,我们考试测验网络存储对 C2 的 POST 要求的网络日志。
但是,Web 活动日志的最常见配置包括 GET,但不包括 POST 要求。

终极得到了 POST 要求。
该案例供应了记录 POST 流量的情由,并确保所有关键系统活动都转发到中心存储库,该存储库有足够的空间来存储建议保留期(六个月或更永劫光)的数据,以避免在攻击者从各个别系中删除所有痕迹后丢失证据。

末了,客户根本举动步伐中的一些系统仍未加密,最初被认为未受到影响。
然而,后来创造它们确实受到了影响,但这些系统中没有配置 BitLocker。
这使我们能够获取脚本本身,剖析其行为并网络进一步的证据。

规复

虽然我们可以得到威胁者为创建加密密钥而履行的一些密码和固定值,但脚本包含一些变量值,并且每个受影响的系统都不同,这使得解密过程变得困难。

网络用于种子的网络信息

缓解方法

鼓励公司利用 BitLocker 或其他加密工具(例如 VeraCrypt)来保护公司机密。
但是,必须采纳一些预防方法,以避免攻击者滥用。

·利用强健、配置精确的 EPP 办理方案来检测试图滥用 BitLocker 的威胁;

·履行托管检测和相应 (MDR) 来主动扫描威胁;

·如果启用了 BitLocker,请确保利用强密码并将规复密钥存储在安全的位置;

·确保用户只有最小权限。
这样,他们就无法自行启用加密功能或变动注册表项;

·启用网络流量日志记录和监控。
配置 GET 和 POST 要求的日志记录。
如果发生传染,对攻击者域发出的要求可能包含密码或密钥;

·监控与 VBS 实行和 PowerShell 干系的事宜,并将记录的脚本和命令保存到外部存储库,存储可能在本地删除的活动;

·常常进行备份、离线存储并测试它们。

结论

这次事宜相应和恶意软件剖析证明攻击者不断改进策略以躲避检测。
在这次事宜中,安全研究职员不雅观察到攻击者滥用原生 BitLocker 功能,进行未经授权的数据加密。
VBS 脚本表明参与这次攻击的恶意分子对 Windows 内部机制管窥蠡测。
只管脚本剖析一点也不繁芜,但这种威胁很难检测,由于可以轻松修正工件内部的唯一字符串以绕过 YARA 规则。
因此,在这种情形下,最好的检测方法是行为剖析,它将运用程序实行的不同操作关联起来以得出结论。