当前位置:   article > 正文

Lockbit 3.0勒索病毒加密程序分析_lockbit 3.0 ransom

lockbit 3.0 ransom

01 背景

        在2022年,LockBit是全球规模最大的勒索软件变种,且在2023年继续肆虐。自2020年1月以来,使用LockBit的附属机构已针对各个规模的关键基础设施领域的组织进行了攻击,包括金融服务、食品和农业、教育、能源、政府和紧急服务、医疗保健、制造和交通等。LockBit勒索软件运营采用了勒索软件即服务(RaaS)模式,招募合作伙伴利用LockBit勒索软件工具和基础设施进行勒索软件攻击。由于这一行动中存在大量未连接的附属机构,观察到的LockBit勒索软件攻击在策略、技术和程序(TTP)方面呈现出明显的差异。这种观察到的勒索软件TTP差异给致力于维护网络安全和防范勒索软件威胁的组织带来了重大挑战。

        对于安全研究人员来说,LockBit 3.0 是一个挑战,因为每个恶意软件实例都需要一个独特的密码才能运行,没有这个密码,分析将变得极其困难或不可能。此外,该恶意软件受到严格的分析保护,并利用大量未记录的内核级 Windows 函数。

        然而,在 2022 年 9 月,Twitter 用户 3xp0rtblog 宣布该勒索软件的构建器已被 ali_qushji 泄露,可以从 GitHub 上下载。

标图 1:LockBit 3.0 Builder 在 Twitter 上泄露题

        "招募合作伙伴":是指LockBit勒索软件运营者主动寻找和吸纳其他人或组织作为合作伙伴或下属(关键基础设施领域的组织的员工),共同参与勒索软件攻击活动。

图片
图 2:LockBit 3.0 构建器标题

        一旦提取完成,构建器将包含图2中展示的文件,其中Build目录是空的。通过运行Build.bat文件(包括图3中展示的内容),可以自动执行构建过程,并使用勒索软件的独特实例填充Build目录。生成的文件将呈现为图4所示。

图片
标图 3:Build.bat 的内容题

        构成 Build.bat 的命令,清除 Build 目录,然后调用 keygen 以生成公钥和私钥加密密钥。builder.exe构建工具提供各种命令行选项,生成不同版本的 LockBit 3.0 勒索软件。

    在Build.bat文件中,可以使用以下命令来实现:

    清除Build目录:

del /s /q Build\*

    调用keygen生成公钥和私钥加密密钥:

Keygen

    生成LockBit 3.0勒索软件的不同变体:

  1. builder --variant=variant1
  2. builder --variant=variant2
  3. builder --variant=variant3
标图 4:Build.bat 的内容题

02 生成文件说明

  • LB3.exe – 已编译的勒索软件,不需要密码;

  • LB3Decryptor.exe – 勒索软件的解密器,适用于此处的所有变体;

  • LB3_pass.exe – 与 LB3 相同.exe但需要密码才能运行。密码和说明可在此目录中的Password_exe.txt中找到;

  • LB3_RelectiveDLL_DLLMain.dll – 旨在反射加载并在内存中执行的勒索软件版本;

  • LB3_Rundll32.dll – 勒索软件的 DLL 版本,不需要密码;

  • LB3_Rundll32_pass.dll – 勒索软件的 DLL 版本,需要在 Password_dll.txt 文件中找到的密码;

  • Password_dll.txt – 包含密码和使用说明LB3_Rundll32_pass.dll;

  • Password_exe.txt – 包含密码和使用说明LB3_pass.exe;

  • priv.key – 此版本唯一的私有加密密钥,用于加密受害者文件;

  • pub.key – 此版本独有的公共加密密钥,用于生成各种字符串,将此勒索软件实例与受害者联系起来。

keygen.exe

        Build.bat 文件首先调用的可执行文件是 keygen.exe。它会为每个构建生成一个独特的加密密钥对和解密标识。根据其描述,Keygen 似乎严重依赖于 MIRACL,这是一个被开发人员广泛认为是椭圆曲线密码学黄金标准的开源 SDK 的 C 软件库。生成的密钥经过 base64 编码并保存到 priv.key 和 pub.key 文件中,然后将公钥的前八个字节转换为十六进制值并保存到 DECRYPTION_ID.txt 文件中,该文件用作唯一的受害者识别号。

builder.exe

        根据前面的图4,builder.exe 文件会创建两个执行文件、三个动态链接库和两个文本文件。

        它需要现有的 config.json(图 2)和上一步中生成的 priv.key/pub.key 文件,如图 4 所示,builder.exe 文件本身也包含基本组件。在其资源部分有四个执行文件模板,每个用于构建加密器的 DLL 和 EXE 以及解密程序。

图 5:builder.exe 资源标题

按 ID 对每个资源进行描述:

  • 100 – 解密器模板文件

  • 101 – 可执行模板文件

  • 103 – DLL 模板文件

  • 106 – 启用反射加载的 DLL 模板文件

配置文件 config.json 包含通常与勒索软件相关的选项,包括目标文件夹、要排除的文件以及需要终止的进程。如图 6 所示,它还包含用于调整勒索软件行为的设置选项,如下所示的默认选项可以在构建器中找到。

图片
标图 6:配置选项题

        此构建器配置允许针对特定目标环境调整生成的勒索软件。除了这些配置之外,还有以下选项:

  • 要排除的主机、文件、文件夹和文件扩展名

  • 停止和删除的流程和服务

  • 命令和控制域、URL 或 IP 的列表

  • 在受影响的系统上尝试的用户名和密码列表

        由于此勒索软件是高度可配置的,因此可能有许多不同的代码路径。

03 LockBit分析

  Lockbit 3.0 使用了多种反分析技术来阻碍静态以及动态分析:

  1. 入口使用保护壳保护

  2. 代码保护

  3. 函数混淆

  4. 动态解析

  5. 函数解密计算跳转

  6. 反调试技术

  7. 反沙盒技术

        对于安全研究人员来说,LockBit 3.0 是一个挑战,因为每个恶意软件实例都需要一个独特的密码才能运行,没有这个密码分析将变得极其困难,也就意味着无法进行沙盒动态分析,该密码保存在生成器的目录下:

图片

        程序入口进行了加壳混淆:

图片

图片

        该入口通过start的call函数进行解密:

图片

图片

        当恶意软件运行完loc_40639C函数后后,保护壳被脱掉:

图片

图片

        函数解密计算跳转:

图片

        勒索软件会检查调试器:

HEAP_TAIL_CHECKING_ENABLED(0x20)

 HEAP_VALIDATE_PARAMETERS_ENABLED (0x40000000)

LockBit 3.0 检查其PEB(过程环境块)中的值,以检查是否设置了:HEAP_VALIDATE_PARAMETERS_ENABLED。

图片

        执行NtSetInformationThread 函数,函数参数的值为0xFFFFFFFE 和0x11,这会让勒索软件的线程无法被调试器的断点捕获到。

        在程序中,初始的反汇编代码集用于提高可读性,如图 16 所示。这段代码明显不正常,这些代码在调用 kernel32.ExitProcess() 函数后才执行,也就意味着永远无法执行到,只是模仿正常程序的一些函数使用,使其看起来似乎是个正常程序。

图片
标图 16:输入函数题

         LockBit 的函数都是通过hash运算进行匹对指定的函数名称,从而获取地址,“prepare_address_table_lookups”函数(如图 16 所示),该函数包含一个预先生成的哈希表,用于存储一组函数调用,从C:\Windows\System32 文件夹中手动查找所需的 DLL,并手动加载每个函数,进行哈希匹配,找到函数地址。创建哈希表和函数地址后,恶意软件执行完该函数,会释放并清除所有内存,以防止被分析。

        如图 16 所示,“check_priv_elevate_if_needed”函数顾名思义。权限提升是通过复制访问令牌来获取特权组中的成员身份来实现的。为了复制令牌,LockBit 3.0 执行了几个步骤:

  1. 它将通过专门检查域管理员组中的成员身份来检查它是否已经具有足够的权限。

  2. 如果权限不够,它将尝试向自身授予一个预定义列表中包含 15 个特权常量的访问令牌,其中大多数在以非特权用户身份运行时测试失败。

  3. 之后,如果仍然没有所需的权限,LockBit 3.0 将找到操作系统进程explorer.exe,并直接调用 ZwOpenProcessToken 函数来读取explorer.exe 的访问令牌。然后,它调用 NtDuplicateToken 函数,传入新获取的令牌句柄,以请求对副本的扩展属性进行读取和写入访问。

  4. 获得管理员权限

    图片
    图 17:复制explorer.exe进程令牌标题

         main 函数中的恶意软件做的第一件事就是检查并创建同步互斥锁。如果存在互斥锁,则进程将退出,确保一次只运行一个勒索软件实例。互斥锁是通过首先获取在pub.key文件中找到的提供的公钥的 MD5 哈希来创建的。生成的 MD5 哈希字符串格式为“{%08X-%04X-%04X-%02X%02X-%02X%02X %02X %02X %02X}”。接下来,计算此格式化字符串的 MD4 哈希值,并将结果传递给格式字符串“Global\%.8x%.8x%.8x%.8x”。例如,完成的互斥体值类似于

Global\ea4ee28880136cbc44dff4ad5a53561f。 

        接下来,LockBit 3.0 检查操作系统是否正常启动。如果 Windows 在安全模式下启动,勒索软件不会运行其大部分功能,而是设置一个注册表项以在下次正常启动时运行。 

        在互斥锁就位并满足引导类型后,可执行文件的主要用途将以多线程方式启动。每个线程都具有其任务的特征。有些在进程的生命周期内连续运行,而另一些则仅临时运行一次以执行特定任务。 

停止服务:Windows Defender

        第一个线程会删除 Windows 安全服务。这是通过利用 Trusted Installer 服务来实现的。Trusted Installer 是一个被广泛使用的受信任的安装程序,通常以其显示名称“Windows 模块安装程序”而知名,它主要用于下载和安装 Windows 更新和可选组件。如果 Trusted Installer 未在运行,则会启动该服务,并复制其访问令牌句柄,以允许当前线程访问大多数其他正在运行的服务。

        利用这个令牌,LockBit 3.0 枚举正在运行的服务,并停止并删除与 config.json 中预定义的服务之一匹配的任何服务。完成后线程将退出,并且不会再次启动。

图片
标图 18:通知 Windows 安全中心已停止题

        在测试期间,短暂地显示一个小任务栏通知,通知用户 Windows 安全中心服务已停止。但是,由于该服务不仅已停止,而且还被删除,因此无法使用 Windows 通知重新启动该服务。

服务

描述

wscsvc

Windows 安全中心服务

Sppsvc

Microsoft 软件保护服务-许可

Wdboot

Windows defender ELAM(早期启动反恶意软件)驱动程序

Wdfiter

Windows defender微型筛选器驱动程序

Wdnisdrv

Windows defender防病毒网络检查系统驱动程序

Wdnissvc

Windows defender网络检查服务

Windefend

Windows defender服务

        请务必考虑 Windows 安全服务是此处的目标,因为这些服务列在默认的config.json 文件中。如果威胁参与者使用此构建器列出其他服务,则很可能会停止其他服务。

图片
图 19:服务已停止和删除标题

        删除服务之后,恶意软件将启动几个额外的线程。图 20 中的屏幕截图展示了运行时间最长的线程。第一个优先级是启动处理 Windows 回收站中文件的线程,然后是用于监视和终止 SQL 进程的线程。接下来有一个专门用于将赎金记录写入目录的线程。最后启动的线程是用于对文件进行加密的线程。在下面的屏幕截图中,有三个线程专门用于此操作,但线程数量是动态的,并且会根据可用的系统资源以及排队等待加密的项目的数量和类型而增加或减少。例如,标识为加密的网络资源与本地系统上的网络资源是分开处理的。

图片
标图 20:一些 LockBit 3.0 线程 题

04 Lockbit3特性

        LockBit 勒索病毒为LockBit 2.0 升级版本,包含先前2.0所有功能,初始载荷交付给第三方C2(如Cobalt Strike)进行处理。

        LockBit 只在管理员权限执行,如果不存在权限则进行 Bypass UAC技术进行管理员权限提升。

        LockBit 3.0 将自身备份写入%programdata%目录,然后从此处启动进程。

        LockBit 3.0 加密阶段的速度极快,即使传播到相邻主机也同样如此。LockBit 3.0勒索软件的有效负载能够在不到一分钟的时间内完全加密我们的测试主机。

        在执行过程中,LockBit 3.0勒索软件会对桌面背景进行更改。

1、回收站的文件无法恢复

        存在一个专门的线程来处理在回收站中找到的文件。回收站中的文件并未进行加密;相反,每个文件的内容会被替换为由0x10000字节块中随机生成的字节,然后再将其删除。因此,即使使用解密工具,回收站中的所有文件都无法恢复。

2、终止sql检查

         一个独立的线程持续运行,监视并停止任何 SQL 进程。它通过每隔两秒获取一次服务列表来实现此目的。每个服务名称都会传递给isSQL()函数,该函数会查找与字符串"SQL"不区分大小写的任何匹配项。如果名称包含此序列,则会终止该进程。与许多其他线程不同,该线程在进程的生命周期内一直运行,以确保在LockBit 3.0执行勒索活动时,SQL进程不会超过两秒钟运行。

图片
标题图 21:停止SQL进程

3、删除卷影副本

        有一个线程专门用于删除卷影副本。卷影副本是卷的快照,它在一个明确定义的时刻复制卷上保存的所有数据。这是通过调用 IWbemProvider COM 对象并启动进程内服务器以允许对 Windows 管理界面进行查询来完成的。使用它来执行 WMI 查询“SELECT * FROM Win32_ShadowCopy”,然后删除每个返回的卷影副本。

4、写赎金记录

        勒索赎金线程会检索并解密嵌入在config.json中定义的勒索赎金地址。该注释将被写入每个未标记为排除的目录中。它的文件名由九个字母数字字符组成,后跟“.README.txt”(例如xEC9do6g6.README.txt)。前缀“.README.txt”是以先前生成的互斥GUID的MD5哈希的前6个字节进行base64编码而得到的。由于这种方法,系统上留下的所有赎金票据都具有相同的名称,但对于该系统是唯一的。

5、加密

        文件使用 Salsa-20 算法进行加密。在加密线程期间,包含私钥的内存通过大量使用 RtlEncryptMemory 和 RtlDecyptMemory 进行保护,这使得私钥仅在必要时在内存中以未加密的方式可用。

6、域控制器发现

        另一个线程会尝试使用在配置中找到的用户名和密码登录受感染的系统。默认情况下,配置文件(config.json)中的用户名和密码与管理账户相关联。如果有任何登录成功,将评估令牌成员身份是否属于域管理员组,如果是,则进行复制操作。然后,另一个线程会查找并枚举可用的域控制器,获取每个控制器的名称,并尝试使用成功的用户名和密码进行远程登录。

7、连接的驱动器和共享网络资源

        其他线程会检查连接的驱动器和网络资源,特别关注安装操作系统的驱动器和网络资源。无论情况如何,这些新发现的路径都将传递给生成其他加密线程的函数。

8、网络流量

        命令和控制流量会通过TLS 1.2发送到config.json文件中列出的地址。不幸的是,在此TLS层下,变量及其值是经过AES加密的,并且每个请求的顺序都会被打乱。然而,POST请求的整体格式是一致的,如图22所示。我们始终可以观察到一个POST请求,后跟"/?"和一长串URL样式的variable=value对,用&符号分隔,然后是HTTP/1.1字段。User-Agent字符串是随机的,因此不应包含在签名中,但Connection、Accept-Encoding、Content-Type和Cache-Control字段是常量。数据部分的基本格式也是一致的,但长度可能会有所不同。

图片
图 22:POST请求标题

        尽管如果没有加密密钥,解密截获的网络流量几乎是不可能的,但以下示例提供了对传输信息的一般理解。

图片
图 22:JSON 格式的 Exfil 数据标题

9、加密后修改壁纸

        加密后,桌面背景将更改为黑色,并带有白色文本,类似于图 23 中的示例。

图片
图 23:勒索桌面标题

10、解密器

        由于解密器是与构建器一起生成的,我们对其进行了操作和使用的测试。在运行时,将显示一个窗口,用户需要点击右侧的大按钮,上面标有“解密所有加密文件”。点击后,随着文件的解密,"所有解密文件"的计数器会逐渐增加。如图所示,应用程序将一直保持打开状态,但CPU使用率将停止处理文件,表明解密已完成。

        回收站没有恢复,所有卷影副本也已被擦除。对于所有常规文件,解密器确实有效,文件已正确恢复,并且LockBit桌面背景已被删除。

图片
LockBit 3.0 解密器标题

05 MITRE ATT&CK TIDs 

策略

id

名字

描述

执行TA0002

T1559.001

组件对象模型

用于删除卷影副本

T1106

原生 API

大量使用 Windows 本机 API 调用

T1047

WMI

用于删除卷影副本

持久性TA0003

T1547.001

注册表运行项

如果在安全模式下启动,则将注册表设置为在下次正常启动时启动。

权限提升TA0004

T1134.001

令牌模拟

使用已知令牌启动进程,目的是复制令牌。

防御规避TA0005

T1562.001

禁用或修改工具

停止和删除 Windows 安全服务

T1562.002

禁用 Windows 事件日志记录

停止和删除负责事件日志记录的服务

T1562.004

禁用系统防火墙

停止和删除 Windows 防火墙的服务。

T1562.009

安全模式启动

在安全模式下启动时更改行为。

T1078.001

默认帐户

尝试使用默认管理员凭据登录

发现TA0007

T1083

文件和目录发现

遍历挂载的磁盘和文件系统

T1135

网络共享发现

遍历所有共享网络资源

T1120

外围设备发现

定位可移动存储设备

T1057

进程发现

查找要停止的特定进程

T1018

远程系统发现

查找域控制器和 DNS 服务器

T1082

系统信息发现

获取有关操作系统的特定信息

横向移动 TA0008

T1021.002

Windows 管理员共享

用于与远程网络共享交互的有效帐户的用户

指挥与控制TA0011

T1071.001

Web 协议

使用 HTTP 与 C2 通信

T1573

加密通道

TLS 1.2 标准

外泄TA0010

T1041

通过 C2 通道外泄

在 POST 请求中发送基本系统信息

冲击TA0040

T1485

数据销毁

删除回收站和卷影副本

T1486

数据加密以防影响

勒索软件

T1491.001

内部污损

桌面已更改

06 入侵指标 (IOC)

IOC

描述

C2BC344F6DDE0573EA9ACDFB6698BF4C

MD5生成器文件

d6ae7dc2462c8c35c4a074b0a62f07cfef873c77

SHA1 生成器文件

a736269f5f3a9f2e11dd776e352e1801bc28bb699e47876784b8ef761e0062db

SHA256生成器文件

71c3b2f765b04d0b7ea0328f6ce0c4e2

MD5 注册机文件

bf8ecb6519f16a4838ceb0a49097bcc3ef30f3c4

SHA1 注册机文件

ea6d4dedd8c85e4a6bb60408a0dc1d56def1f4ad4f069c730dc5431b1c23da37

SHA256 注册机文件

4d388f95a81f810195f6a8dfe86be755

MD5 资源 100

cb6fdb25a15b7797890fadc2b823984f93da5368

SHA1 资源 100

cc3d006c2b963b6b34a90886f758b7b1c3575f263977a72f7c0d1922b7feab92

SHA256 资源 100

87308ec0a44e79100db9dbec588260ec

MD5 资源 101

939ff7e5eeaccb0c2f4ee080a8e403e532b6317a

SHA1 资源 101

03b8472df4beb797f7674c5bc30c5ab74e8e889729d644eb3e6841b0f488ea95

SHA256 资源 101

4655a7ac60ed48df9b57648db2f567ef

MD5 资源 103

02ea524429ba2aefac63fed27e924ab3659f8c00

SHA1 资源 103

a0db5cff42d0ee0de4d31cff5656ed1acaa6b0afab07d19f9f296d2f72595a56

SHA256 资源 103

23a30838502f5fadc97e81f5000c4190

MD5 资源 106

9c1142122370c9b28b13aa147c6e126b3be50845

SHA1 资源 106

ae993930cb5d97caa5a95b714bb04ac817bcacbbf8f7655ec43e8d54074e0bd7

SHA256 资源 106

07 Yara规则

  1. import "pe"
  2. rule LockBit_3_dll
  3. {
  4. meta:
  5. author = "VMware TAU" //bdana
  6. date = "2022-Oct-12"
  7. description = "Identifies LockBit 3.0 DLL encryptor by exported function names."
  8. rule_version =1
  9. yara_version = "4.2.3"
  10. exemplar_hash = “c2529655c36f1274b6aaa72911c0f4db7f46ef3a71f4b676c4500e180595cac6
  11. condition:
  12. pe.exports("del") and
  13. pe.exports("gdel") and
  14. pe.exports("gdll") and
  15. pe.exports("gmod") and
  16. pe.exports("pmod") and
  17. pe.exports("sdll") and
  18. pe.exports("wdll")
  19. }
  20. rule LockBit_3_exe
  21. {
  22. meta:
  23. author = "VMware TAU" //bdana
  24. date = "2022-Oct-12"
  25. description = "Identifies LockBit 3.0 exe encryptor section names, and artifact section names."
  26. rule_version =1
  27. yara_version = "4.2.3"
  28. exemplar_hash =5202e3fb98daa835cb807cc8ed44c356f5212649e6e1019c5481358f32b9a8a7
  29. strings:
  30. $text = ".text" ascii wide
  31. $itext = ".itext" ascii wide
  32. $data = ".data" ascii wide
  33. $rdata = ".rdata" ascii wide
  34. $idata = ".idata" ascii wide
  35. $xyz = ".xyz" ascii wide
  36. $reloc = ".reloc" ascii wide
  37. $bss = ".bss" ascii wide
  38. condition:
  39. #text > 2 and
  40. #itext > 1 and
  41. #data > 1 and
  42. #rdata > 2 and
  43. #idata > 3 and
  44. $reloc and
  45. $bss and $xyz and not
  46. for any i in (0..pe.number_of_sections-1) : (
  47. pe.sections[i].name == ".xyz" or
  48. pe.sections[i].name == ".bss"
  49. )
  50. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/364662
推荐阅读
相关标签
  

闽ICP备14008679号