首页
社区
课程
招聘
[原创]【病毒分析】LockBit 4.0 vs 3.0:技术升级还是品牌续命?最新LockBit 4.0分析报告
发表于: 2025-6-19 09:54 3236

[原创]【病毒分析】LockBit 4.0 vs 3.0:技术升级还是品牌续命?最新LockBit 4.0分析报告

2025-6-19 09:54
3236

前情提要:LockBit 是自2019年以来最活跃的勒索软件组织之一,采用双重勒索策略并具备高度专业化运营能力。尽管在2024年遭遇国际打击并被揭露核心身份,该组织仍迅速恢复并于2025年推出LockBit 4.0版本。2025年5月,其运营数据库泄露暴露了大量内部细节。详情可见【病毒分析】LockBit 4.0 vs 3.0:技术升级还是品牌续命?最新LockBit 4.0分析报告

本文将重点分析我们在该用户受害设备上提取到的 LockBit 4.0 加密器样本,揭示其程序行为及加密特征。在此前的分析中,我们曾对一款盗版LockBit 3.0加密器进行深入研究,发现其在对MSSQL数据库文件加密时,仅加密了文件头部内容,主体数据并未受损。基于这一特征,我们通过修复数据库结构的方式成功实现了数据恢复,相关技术细节可参考文章【成功案例】lockbit家族百万赎金不必付!技术手段修复被加密的数据库,附溯源分析报告。我们将在接下来的两篇文章中,深入解析该版本解密器存在缺陷的技术原因,并免费公开本次成功研发的专属数据恢复工具,欢迎持续关注。

文件名:Restore-My-Files.txt

分析的样本中加密器与提供的解密器不配套,但核心加密算法完全一致,仅存在密钥差别,后文将详细解释.

附件给出的是自实现的可用解密器.

加密前:

加密后:

加密前:

加密后:

加密文件名 = 原始文件名+.(12bytes随机小写hex字符串) ,例如:sierting.txt.12345678abcd

在文件中,在被加密数据之后,多出92bytes附加信息,结构如下:

使用自定义512位类sha512哈希算法生成文件密钥的加密密钥,使用了chacha20-poly1305算法,具体使用chacha20作为文件加密算法,文件加密密钥使用ecdh密钥交换算法(x25519)生成,使用poly1305算法和普通的异或计算字符串校验被加密文件的密钥.

该样本使用自定义加壳器加壳,脱壳方式如下:

使用pe编辑器打开样本文件,去除PE文件头中的aslr配置(动态基址).

入口函数如下:

找到其中的常量跳转,即为跳往oep的指令:

动调程序,下硬件断点并跟进,到达oep:

设置好入口点,自动查找iat即可(如有错误项则删除):

dump修复好后,打开dump修复后文件,改变data(入口点所在段)属性为下图:

保存,即脱壳成功.

假设有两个端点进行密钥交换,为加密端(器)和解密端(器).加密端存有黑客公钥,解密端存有黑客私钥.

加密端加密时候使用随机算法生成每个文件的文件私钥(经过一定处理的随机32bytes长字节串),根据文件私钥和32bytes的数字0x9进行标量乘法,计算出文件公钥写入被加密后的文件,使用文件私钥和黑客公钥生成共享密钥,使用共享密钥进行文件加密.

解密时,读取文件中的文件公钥,与解密器中的黑客私钥进行密钥交换得到与上文相同的共享密钥,然后使用共享密钥解密文件.

使用双线程加密,一个获取路径,一个加密路径对应的文件.

计算计数器的地方有一些干扰指令,但是动调能得出初始结果为1.

先获取随机密钥(32bytes,后作为文件块密钥),然后将其前[0,24]下标对应byte和[8,32]下标对应byte异或,存入新数组v179.

再次生成32bytes随机数,作为x25519的随机标量(文件私钥).

执行x25519标量乘法,即32bytes大数0x9和文件私钥相乘,与黑客公钥交换得到共享密钥v217.

自定义哈希结构体内容(开头部分代码和常数模仿sha512,具有一定迷惑性):

将字节串拼接(共享密钥+文件公钥),使用自定义哈希计算得到64bytes的结果,取前32bytes.

将前面取得的32bytes哈希再次以同样的方法哈希,取前24bytes.

使用得到的24bytes哈希初始化自定义的chacha20密钥ctx,使用自定义的初始化算法.

自定义chacha20结构体内包含数据如下:

和标准chacha20的密钥结构相同,此处使用的是8bytes counter和8bytes nonce这一标准.

然后加密该结构体.样本中算法与标准chacha20的区别就是此处有加密这64bytes数据.

密钥流生成时,key为一个32bytes字节串,拷贝加密后的ctx中的[0:16]字节到key的[0:16]下标处,再拷贝加密后的ctx中的[48:64]字节到key的[16:32]下标处,拷贝B的[16:24]字节,作为加密文件密钥的nonce传入密钥拓展函数.这些密钥数据用于chacha20-poly1305校验以及加密加密文件用的密钥.

使用chacha20-poly1305算法校验密钥,使用前面拓展的密钥流,输入文件公钥和加密文件的密钥,输出16字节校验码.

拷贝16bytes校验码,进行第二次校验,得到最终文件尾部附加信息,先行写入文件.

第二次校验,生成8bytes随机数,与常量字符串经过一系列运算得到12bytes字符串校验值,实际使用该校验值已经能够较精确地判断文件是否被加密.

第二次校验ida伪码如下:

第二次校验c语言代码如下:

文件加密部分掺杂着一些干扰指令,不过不影响分析.

使用64位整数存储文件大小,保证能加密较大的文件.

对于小于1mb的文件,全部加密,对于大于1mb的文件,对如下区间作相应处理:

使用chacha20分块加密写入文件,分块以避免加密时占用过多内存。

样本采用多次hash获取api地址方法,大致上是先hash获取一次模块基址,再hash api名字获取api地址.

例子(调用NtProtectVirtualMemory):

整个样本统一使用以下hash算法:

Hook ETW实现绕过保护.

解密一些字符串,包含chacha20常量(不再赘述) 和校验用字符串"FBIsosite".

解密勒索信.

根据键盘输入法代码检测是否是俄语输入法.

常规提权操作.


参数如下:(为程序的--help选项输出)

原文如下:

使用api获取系统架构和版本.


传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回