概述
Hive勒索病毒家族于2021年6月被首次发现,之后也保持着非常活跃的攻击趋势。同时hive也对自身进行了多次的版本更迭。本次样本为Rust语言的变异版本。
该hive病毒样本同样采用了非对称+对称算法的加密方案,但是在文件加密阶段使用的对称加密算法有别于主流加密方式。Hive在加密文件时并未采用标准的对称加密算法,如AES、DES、salsa20、RC4等,而是使用了自定义的流加密方式。
名词解释
该样本隶属于 Hive 家族。Hive家族通常通过钓鱼邮件,远程桌面协议,漏洞利用进行攻击。
相关攻击工具:Cobalt Strike、Coroxy、ConnectWise Automate 端点管理漏洞等
相关文件(IoCs)
windows_x64_encrypt.exe:样本主程序
MD5: 109652cfb3*9cdc0e4
SHA1: 8c315_*_7d2519d70485965c5f
SHA256: dac0e015c3669dcec**bd7fee51e87f193016ae529
样本危害
a. 重要文件无法读取
b. 关键数据被损坏
c. 被感染者需要通过缴纳高额赎金才能获取解密密钥恢复数据文件的正常使用,多数情况即使缴纳了高额的赎金也未必能正常恢复数据
传播方式
Hive家族通常通过钓鱼邮件,远程桌面协议,漏洞利用等方式进行下发。
样本行为
1、停止可能妨碍攻击链的相关工具服务和进程
1.1、遍历进程
通过遍历进程快照寻找指定进程。


1.2、尝试模拟trustedinstaller.exe和winlogon.exe的进程令牌

1.3、停止的服务和进程
与大多数复杂的恶意软件一样,Hive 会停止安全解决方案和其他可能妨碍其攻击链的相关工具的服务和进程。Hive 尝试模拟trustedinstaller.exe和winlogon.exe的进程令牌,以便它有足够的权限可以停止Microsoft Defender Antivirus 以及其他服务。
- 停止以下服务
windefend, msmpsvc, kavsvc, antivirservice, zhudongfungyu, vmm, vmwp, sql, sap, oracle, mepocs, veeam, backup, vss, msexchange, mysql, sophos, pdfservice, backupexec, gxblr, gxvss, gxclmgrs, gxvcd, gxcimgr, gxmmm, gxvsshwprov, gxfwd, sap, qbcfmonitorservice, qbidpservice, acronisagent, veeam, mvarmor, acrsch2svc
- 结束相关进程
dbsnmp, dbeng50, bedbh, excel, encsvc, visios, firefox, isqlplussvc, mspub, mydesktopqos, notepad, ocautoupds, ocomm, ocssd, onenote, outlook, sqbcoreservice, sql, steam, tbirdconfig, thunderbird, winword, wordpad, xfssvccon, vxmon, benetns, bengien, pvlsvr, raw_agent_svc, cagservice, sap, qbidpservice, qbcfmonitorservice, teamviewer_service, teamviewer, tv_w32, tv_x64, cvd, saphostexec, sapstartsrv, avscc, dellsystemdetect, enterpriseclient, veeam, thebat, cvfwd, cvods, vsnapvss, msaccess, vaultsvc, beserver, appinfo, qbdmgrn, avagent, spooler, powerpnt, cvmountd, synctime, oracle, wscsvc, winmgmt, sql
内存视图:

2、启动进程
作为其勒索软件活动的一部分,Hive 通常会执行删除备份并阻止数据恢复的进程及指令。版本之间存在差异,有些样本可能不会执行所有进程。
进程及指令为如下信息:
- “vssadmin.exe delete shadows /all /quiet”
- “wbadmin.exe delete systemstatebackup”
- “wbadmin.exe delete catalog -quiet”
- “bcdedit.exe /set {default} recoveryenabled No”
- “bcdedit.exe /set {default} bootstatuspolicy ignoreallfailures”
- “wbadmin.exe delete systemstatebackup -keepVersions:3”
2.1、删除Windows备份目录



2.2、删除卷影拷贝

2.3、通过bcdedit命令修改Windows启动设置


3、勒索信
内存视图如下所示:

下图为勒索信内容,其中Login和Password为示例账户信息

被勒索后需要使用上述账号密码进行登录勒索网站,其目的是用来辨别受害者。
4、加密
本样本使用的加密方式为:椭圆曲线 Diffie-Hellmann (ECDH) 与 Curve25519和 XChaCha20-Poly1305 (使用 ChaCha20 对称密码的认证加密)。
它不同于其他勒索病毒在每个文件中嵌入一个加密密钥,而是在内存中生成两组密钥,使用它们来加密文件,然后将这些密钥集写入它加密的驱动器的根目录,两者都使用 .key 扩展名。
为了指示使用哪个密钥集来加密文件,将包含相应加密密钥的 .key 文件名称添加到磁盘上加密文件的名称中,后跟一个下划线,然后是一个 Base64 字符串。一旦经过 Base64 解码,该字符串将包含两个偏移量,每个偏移量指向相应.key文件中的不同位置。这样,攻击者可以使用这些偏移量解密文件。
4.1、密钥集生成
分配了大小为 0xCFFF00 字节的缓冲区。使用两个自定义函数生成随机字节,并填充该缓冲区。该缓冲区的前 0xA00000 字节由随机字节填充,剩余的 0x2FFF00 字节从缓冲区前0x2FFF00字节中复制。
每个缓冲区的内容是一个密钥集。由于分配了两个缓冲区,因此有两个密钥集。在加密过程中,恶意软件从其中一个密钥集中为每个文件随机选择不同的密钥,并通过将密钥的字节序列与文件内容进行异或运算来使用它们来加密文件。
密钥集生成代码:

get_random_byte代码:

准备密钥集的自定义散列:

4.2、加密过程
在计算哈希并解密其他几个字符串后,加密过程采取以下步骤:
1、使用上面介绍的相同功能生成victim_private_key

2、使用 ECDH 和 Curve25519生成victim_public_key 。参数是victim_private_key,basepoint是9,后跟31个0

3、为 XChaCha 算法生成一个 24 字节的随机数

4、使用带有 Curve25519 的 ECDH生成shared_secret 。参数是victim_private_key和hive_public_key。然后,使用带有hive_public_key(作为随机数)的 shared_secret(作为密钥)使用 ChaCha20 派生密钥

5、使用 Poly1305-XChaCha20 加密密钥集。用于加密的值是密钥集、derived_key、nonce 和嵌入的关联数据 (AD)。此函数对密钥集进行加密,并在加密密钥缓冲区的末尾添加一个 16 字节的身份验证标签

到此密钥集最终被加密完。nonce、victim_public_key、当前加密的密钥集和身份验证标签依次复制到一个新的缓冲区。这个缓冲区(我们标记为encrypted_structure_1)被视为一个新的密钥集,它使用上述相同的方法再次加密,但使用第二个hive_public_key。这一次,该函数输出新的 nonce、victim_private_key等。只有关联的数据是相同的。
最后, second_nonce、second_victim_public_key和加密的encrypted_structure_1的新缓冲区被写入该样本正在加密的驱动器的根目录(例如C:\)。create_extension函数根据之前创建的自定义散列的前六个字节生成 Base64 字符串。这个 Base64 字符串作为文件名,文件的扩展名就是“.key”。
根据自定义散列的前六个字节生成 Base64 字符串:

使用 Base64 字符串作为文件名:

4.3、下图说明该样本的加密流程:

如上图所示,“密钥集加密流程”执行了两次。在第一轮中,加密原始值。在第二轮中,它以“encrypted_structure_1”作为被加密数据执行。在第二次执行中,除了AD(关联数据)和 Basepoint 9以外数据均发生改变。
因此,以下值在第二次执行中均为新值:victim_private_key、victim_public_key、hive_public_key、nonce、shared_secret和derived_key。
4.4、文件加密
两个密钥文件都写入磁盘后,多线程文件加密开始执行。在加密每个文件之前,恶意软件会根据字符串列表检查其名称和扩展名。如果匹配,则不会加密该文件。例如,如果 .exe 在字符串列表中,则扩展名为 .exe 的文件将不会被加密。并且该列表是在运行时加密和解密的。
Comments