将Windows BitLocker功能变成勒索软件

将二进制空间安全设为”星标⭐️”

第一时间收到文章更新


摘要



将Windows BitLocker功能变成勒索软件

BitLocker是微软公司开发的一款磁盘加密软件, 首次引入于Windows Vista操作系统, 虽然BitLocker的最初目的是解决丢失、被盗或被淘汰的设备导致数据被盗或泄漏的风险, 但攻击者仍然找到了将其应用到恶意领域, 并且效果出乎意料的好。



攻击过程分析



将Windows BitLocker功能变成勒索软件

攻击者通过运行一个高级VBS脚本, 实现了利用BitLocker进行未经授权的文件加密。该脚本文件被命名为:Disk.vbs,并存储在:C:ProgramDataMicrosoftWindowsTemplates目录下。该脚本的第一行包含一个函数, 该函数使用ADODB.Stream对象将字符串转换成二进制表示形式, 函数的主要作用是对HTTP POST请求中的数据进行编码,函数内容如下图:

将Windows BitLocker功能变成勒索软件

脚本主要功能实现的第一步是利用WMI在Win32_OperatingSystem类的帮助下查询有关操作系统的信息。对于查询结果中的每个对象, 脚本都会检查当前域是否与目标不同。如果不同, 脚本将自动完成。之后, 脚本会检查操作系统名称是否包含: xp20002003vista, 如果Windows版本与其中任何一个匹配, 脚本将自动完成并删除自身。如图:

将Windows BitLocker功能变成勒索软件

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

$DriveType_map = @{
0 = 'Unknown'
1 = 'No Root Directory'
2 = 'Removable Disk'
3 = 'Local Disk'  This is the DriveType searched by the malware.
4 = 'Network Drive'
5 = 'Compact Disc'
6 = 'RAM Disk'
}

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

要在 Windows Server 2008 或 2012 中调整本地驱动器的大小,该脚本会检查主启动分区并保存此信息。它保存不同分区的索引,然后使用diskpart执行以下操作:

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

  • 将未分配的空间分成新的 100 MB 主分区;

  • 使用覆盖选项格式化分区,该选项会强制卷在必要时先卸载,并为每个分区分配一个文件系统和一个驱动器号;

  • 激活分区;

  • 如果缩减过程成功,则将“ok”保存为变量,以便脚本可以继续。

将Windows BitLocker功能变成勒索软件

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

将Windows BitLocker功能变成勒索软件

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

将Windows BitLocker功能变成勒索软件

对于 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:允许使用启动密钥和 PIN 与 TPM(如果可用);

  • EnableNonTPM = 1:允许没有兼容 TPM 芯片的 BitLocker,需要 USB 闪存驱动器上的密码或启动密钥;

  • UsePartialEncryptionKey = 2:需要使用带有 TPM 的启动密钥;

  • UsePIN = 2:要求使用带有 TPM 的启动 PIN。

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

将Windows BitLocker功能变成勒索软件

通过动态分析恶意软件,可以确认执行的注册表更改:

HKLMSOFTWAREPoliciesMicrosoftFVEUseTPMPIN: 0x00000002
HKLMSOFTWAREPoliciesMicrosoftFVEUseTPMKey: 0x00000002
HKLMSOFTWAREPoliciesMicrosoftFVEUseTPMKeyPIN: 0x00000002
HKLMSOFTWAREPoliciesMicrosoftFVEEnableNonTPM: 0x00000001
HKLMSOFTWAREPoliciesMicrosoftFVEUsePartialEncryptionKey: 0x00000002
HKLMSOFTWAREPoliciesMicrosoftFVEUsePIN: 0x00000002
HKLMSOFTWAREWOW6432NodePoliciesMicrosoftFVEUseAdvancedStartup: 0x00000001
HKLMSOFTWAREWOW6432NodePoliciesMicrosoftFVEEnableBDEWithNoTPM: 0x00000001
HKLMSOFTWAREWOW6432NodePoliciesMicrosoftFVEUseTPM: 0x00000002
HKLMSOFTWAREWOW6432NodePoliciesMicrosoftFVEUseTPMPIN: 0x00000002
HKLMSOFTWAREWOW6432NodePoliciesMicrosoftFVEUseTPMKey: 0x00000002
HKLMSOFTWAREWOW6432NodePoliciesMicrosoftFVEUseTPMKeyPIN: 0x00000002
HKLMSOFTWAREWOW6432NodePoliciesMicrosoftFVEEnableNonTPM: 0x00000001
HKLMSOFTWAREWOW6432NodePoliciesMicrosoftFVEUsePartialEncryptionKey: 0x00000002
HKLMSOFTWAREWOW6432NodePoliciesMicrosoftFVEUsePIN: 0x00000002

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

将Windows BitLocker功能变成勒索软件

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

将Windows BitLocker功能变成勒索软件

将Windows BitLocker功能变成勒索软件

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

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

将Windows BitLocker功能变成勒索软件

删除默认保护器的原因是为了避免用户恢复密钥,如下例所示。

将Windows BitLocker功能变成勒索软件

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

  • 一个包含数字 0–9 的变量;

  • 著名的全字母句子“The quick brown fox jumps over the lazy dog”,有小写和大写两种形式,其中包含英文字母表的所有字母;

  • 特殊字符。

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

将Windows BitLocker功能变成勒索软件

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

If Len((CreateObject("WScript.Shell").Exec("powershell.exe -Command ""$protectors = (Get-BitLockerVolume -MountPoint " & drives(i) & ").KeyProtector; 
if ($protectors -ne $null) { foreach ($protector in $protectors) { Remove-BitLockerKeyProtector -MountPoint "
 & drives(i) & " -KeyProtectorId $protector.KeyProtectorId } }""")).stdout.readall) > 0 Then: End If

If Len((CreateObject("WScript.Shell").Exec("powershell.exe -Command $a=ConvertTo-SecureString " & Chr(34) & Chr(39) & strRandom & Chr(39) & Chr(34) & " -asplaintext -force;Enable-BitLocker " & drives(i) & " -s -qe -pwp -pw $a")).stdout.readall) > 0 Then: End If

If Len((CreateObject("WScript.Shell").Exec("powershell.exe -Command Resume-BitLocker -MountPoint " & drives(i) & " ")).stdout.readall) > 0 Then: End If

然后,脚本使用以下选项创建 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。如图:

将Windows BitLocker功能变成勒索软件

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

将Windows BitLocker功能变成勒索软件

该脚本还包含一个循环,如果发生错误,则会尝试将信息发送给攻击者五次。

将Windows BitLocker功能变成勒索软件

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

将Windows BitLocker功能变成勒索软件

删除 BitLocker 保护器并配置驱动器加密后,该脚本将执行以下步骤来掩盖其踪迹。

它验证主机名是否是该恶意软件的目标,然后删除文件:

  • Policies{31B2F340-016D-11D2-945F-00C04FB984F9}MACHINEPreferencesScheduledTasksScheduledTasks.xml

  • scriptsLogin.vbs

  • scriptsDisk.vbs

  • C:ProgramDataMicrosoftWindowsTemplatesDisk.vbs

将Windows BitLocker功能变成勒索软件

然后,该脚本使用wevtutil清除 Windows PowerShell 和 Microsoft-Windows-PowerShell/Operational 日志。它会打开系统防火墙并删除其所有规则。它还会删除任务VolumeInitVolumeCheck。最后,恶意软件会执行强制关机。

If Len((CreateObject("WScript.Shell").Exec("wevtutil cl ""Windows PowerShell""")).stdout.readall) > 0 Then: End If
If Len((CreateObject("WScript.Shell").Exec("wevtutil cl ""Microsoft-Windows-PowerShell/Operational""")).stdout.readall) > 0 Then: End If
If Len((CreateObject("WScript.Shell").Exec("netsh advfirewall set allprofiles state on")).stdout.readall) > 0 Then: End If
If Len((CreateObject("WScript.Shell").Exec("netsh advfirewall firewall delet rule name=all")).stdout.readall) > 0 Then: End If
If Len((CreateObject("WScript.Shell").Exec("schtasks /Delete /TN ""VolumeInit"" /F")).stdout.readall) > 0 Then: End If
If Len((CreateObject("WScript.Shell").Exec("schtasks /Delete /TN ""VolumeCheck"" /F")).stdout.readall) > 0 Then: End If

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

将Windows BitLocker功能变成勒索软件


缓解措施



将Windows BitLocker功能变成勒索软件

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

  • 使用强大、配置正确的 EPP 解决方案来检测试图滥用 BitLocker 的威胁;

  • 实施托管检测和响应 (MDR)来主动扫描威胁;

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

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

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

  • 监视与 VBS 执行和 PowerShell 相关的事件,并将记录的脚本和命令保存到外部存储库,存储可能在本地删除的活动;

  • 经常进行备份、离线存储并进行测试。

参考网址:https://securelist.com/ransomware-abuses-bitlocker/112643/



将Windows BitLocker功能变成勒索软件
将Windows BitLocker功能变成勒索软件

点个在看你最好看

原文始发于微信公众号(二进制空间安全):将Windows BitLocker功能变成勒索软件

版权声明:admin 发表于 2024年6月5日 上午9:02。
转载请注明:将Windows BitLocker功能变成勒索软件 | CTF导航

相关文章