
Hive v5 file decryption algorithm
过去几个月的工作对于揭示 Hive v5-5.2 的恶意文件加密机制是必要的。 工作分为两部分:
我要感谢伟大的 @rivitna 在这几个月的工作中给予的支持、交流和建议! 请留意 rivitna 的 github,其中包含大量关于 Hive 勒索软件及其他内容的有用信息。
在本 readme 中,你将找到一些关于文件解密算法的信息,如需更完整地了解其工作原理,请参阅 PoC。 密钥流是加密后的明文。明文是一组 0xA00000 字节,并在其末尾附加了前 0x2FFF00 字节,总计 0xCFFF00 字节。这些字节是使用 2022 年 7 月发布的第一部分中已经讨论过的弱算法创建的。 下面是一个明文的示例:

本文档中分析和引用的 Hive 样本选自 此列表,该列表由 @rivitna 创建,在此致以我最诚挚的感谢。 要了解勒索软件的复杂性,请查看 Microsoft 威胁情报中心(MSTIC)发布的这篇分析。
Hive 勒索软件在加密每个文件时会使用明文(即解密后的密钥流)。加密文件时,Hive 勒索软件会计算两个整数,它们对应明文中的精确位置(偏移量),并按照以下公式用于加密文件:

其中 c = i % 0x2FFF00 和 d = i % 0x2FFD00,i 为字节计数器。
写入文件之前的前置操作包括:

同样,在这种情况下,明文也发挥着根本作用。实际上,它被用于:
然而,第一个偏移量是使用明文的固定位置加密的,并且对于每个 Hive 5/5.1/5.2 样本都不同。 这是一种魔法值。在许多 Hive 5/5.1 的产物中,这个魔法值会明确地显示在内存引用中,例如本例中的 0x98072A:

或者这个案例 0x7539D:

但在下一条证据中,for 循环略有不同,其编写方式没有明确显示我们需要识别的魔法值。这涉及一个属于 Hive 5.2 的产物:

在这种情况下,可以使用发布工具中的偏移量暴力破解功能,使用一个具有已知扩展名的文件和相应的解密后的密钥流。通过加密文件的文件头与未加密文件的文件头,可以确定解密器必须从哪个偏移量开始解密文件。
文件加密模式可以有两个值:0xFB 或 0xFF
有关未加密块大小和明文偏移量计算的更多信息,请参阅 PoC 代码。
该程序提供两个选项:

https://github.com/rivitna/Malware/blob/main/Hive/Hive_samples.txt