勒索软件漏洞?在不支付赎金的情况下解密文件

news2025/2/26 19:32:22

概述

在上一篇文章中,笔者对BianLian勒索软件进行了研究剖析,并且尝试模拟构建了一款针对BianLian勒索软件的解密工具,研究分析过程中,笔者感觉构建勒索软件的解密工具还挺有成就感,因此,笔者准备再找一款新兴勒索软件研究一下。于是,笔者就尝试搜索了一下近期活跃的勒索软件,发现了一篇名为《研究人员利用漏洞解密HomuWitch勒索软件》的报告,报告称研究人员发现了一个HomuWitch勒索软件漏洞,该漏洞能够为所有HomuWitch受害者创建免费解密工具,而HomuWitch勒索软件最早出现时间为2023年7月。相关报告截图如下:

基于报告中的内容,笔者感觉挺好奇,想详细探究一下此勒索软件漏洞到底是怎么回事。于是,笔者准备从如下角度开展研究剖析:

  • HomuWitch勒索软件功能分析:基于静态分析及动态调试对其功能进行分析
  • HomuWitch勒索软件漏洞研究:探究其漏洞成因及漏洞利用方法
  • 模拟构建勒索解密工具:模拟构建一款针对HomuWitch勒索软件的解密工具

HomuWitch功能分析

通过模拟使用HomuWitch勒索软件,笔者发现此勒索软件运行后的行为与BianLian勒索软件略有一些不同,不同点如下:

  • 外联功能:HomuWitch勒索软件将外联发送系统基本信息,同时还将外联获取勒索信内容
  • 弹窗功能:HomuWitch勒索软件勒索加密后,将弹出一个窗体,用于展示勒索信内容
  • 修改桌面壁纸:HomuWitch勒索软件勒索加密后,将修改桌面壁纸

互斥对象

通过分析,发现此样本运行后,将创建互斥对象,用于确保同一系统中只运行一个单一实例程序,对比多个HomuWitch勒索软件程序,发现其互斥对象名均相同,相关互斥对象名信息如下:

样本hash互斥对象名
6A4031B90648996EDC96A2613770DFEDghfdujhuiGYGyftgfTshyhrshdemjutdgjndtgFUYfuyhFTU&FK
39FB8A39EF0AE859010229792B18A433ghfdujhuiGYGyftgfTshyhrshdemjutdgjndtgFUYfuyhFTU&FK
C76D1FFE5F002C50351831497E27288DghfdujhuiGYGyftgfTshyhrshdemjutdgjndtgFUYfuyhFTU&FK
4C94CDD785AEBEDCF2EB3FE4A8B1B7A6ghfdujhuiGYGyftgfTshyhrshdemjutdgjndtgFUYfuyhFTU&FK
7EDC06AE0340336DD0F0CB1DC3BA291BghfdujhuiGYGyftgfTshyhrshdemjutdgjndtgFUYfuyhFTU&FK
739B13103A0AE7DB5E975408BD022DC9ghfdujhuiGYGyftgfTshyhrshdemjutdgjndtgFUYfuyhFTU&FK

相关代码截图如下:

外联发送系统基本信息

通过分析,发现此样本运行后,将收集系统基本信息,并将其组合发送至外链C&C处,发送的基本信息有:

  • 设备ID
  • 系统语言:基于当前应用程序的用户界面区域性的名称
  • 国家/地区信息:外链ipapi.co/country_code/地址获取,否则基于当前系统区域设置的显示名称
  • 用户名

相关代码截图如下:

待加密目录

通过分析,发现HomuWitch勒索软件在开始执行加密行为前,将遍历驱动器,并将(总磁盘大小-磁盘空闲空间大小)小于3GB的磁盘中的目录添加至待加密目录中,推测此代码目的为识别USB外置设备。

HomuWitch勒索软件的默认待加密目录为:桌面、Downloads、用户目录

相关代码截图如下:

勒索加密逻辑

通过分析,梳理HomuWitch勒索软件的加密逻辑如下:

  • 待加密目录:
桌面
Downloads
用户目录
磁盘使用空间小于3GB的磁盘中的目录
  • 待加密文件后缀:
".pdf"、".doc"、".docx"、".ppt"、".pptx"、".xls"、".xlsx"、".py"、".rar"、".zip"、".7z"、".txt"、".mp4"、".JPG"、".jpeg"、".PNG"、".HEIC"、".csv"、".rtf"、".bbbbbbbbb"
  • 待加密文件大小
小于55MB
  • 加密后文件后缀:
.homuencrypted

相关代码截图如下:

加密算法

通过分析,发现HomuWitch勒索软件将使用C#的DEFLATE压缩算法及AES算法进行勒索加密:

  • 将样本中内置的密钥信息作为Rfc2898算法的password参数
  • 随机生成16字节,将其作为Rfc2898算法的salt参数,同时将其写入勒索加密文件的前16字节中
  • 调用Rfc2898算法迭代计算生成AES CBC运算的key及IV值
  • 调用C#的DEFLATE压缩算法对原始文件数据内容进行压缩
  • 调用AES CBC算法对C#的DEFLATE压缩算法运算后的压缩数据进行加密

相关代码截图如下:

弹窗显示勒索信

结合样本动态行为及逆向分析,发现当HomuWitch勒索软件加密完成后,HomuWitch勒索软件将弹窗,弹窗中的内容为外联请求后的返回信息。

实际运行后弹窗截图如下:(测试环境,因此未实际外联获取返回信息)

相关代码截图如下:

外联地址及加密密钥

通过分析,梳理各HomuWitch勒索软件程序的外联地址及加密密钥信息如下:

样本hash外联地址加密密钥
6A4031B90648996EDC96A2613770DFEDhttps://193.164.150.225:1200/oralcumshot1998
39FB8A39EF0AE859010229792B18A433http://79.137.207.233/oralcumshot1998
C76D1FFE5F002C50351831497E27288Dhttp://78.142.0.42/oralcumshot1998
4C94CDD785AEBEDCF2EB3FE4A8B1B7A6https://193.164.150.225:1200/oralcumshot1998
7EDC06AE0340336DD0F0CB1DC3BA291Bhttps://193.164.150.225:1200/oralcumshot1998
739B13103A0AE7DB5E975408BD022DC9https://193.164.150.225:1200/oralcumshot1998

其他行为

通过分析,发现HomuWitch勒索软件在运行过程中,还具备如下特殊行为:

  • 隐藏自身

  • 清空回收站:勒索加密行为前执行

  • 生成配置文件:用于判断是否执行过勒索加密行为

HomuWitch勒索软件使用问题

在实际使用的过程中,笔者发现HomuWitch勒索软件还存在很多小问题,此类问题将直接导致HomuWitch勒索软件运行失败。(推测:可能HomuWitch勒索软件确实比较新吧,攻击者还未对其进行过很好的优化就直接拿来用了,又或者攻击者对被攻击环境比较熟悉,认为此类问题不会在被攻击环境中触发)

获取磁盘信息异常

根据上述HomuWitch勒索软件的功能分析,发现HomuWitch勒索软件在开始执行加密行为前,将遍历驱动器,由于其未对驱动器类型进行判断,导致其遇到CD/DVD驱动器时,代码将执行异常,然后直接异常退出。相关截图如下:

兼容性不好

通过实际测试使用,发现HomuWitch勒索软件在Win10环境中可成功运行,但是在Win7环境中均无法运行,相关截图如下:

HomuWitch勒索软件漏洞

由于网络中报告称研究人员发现了一个HomuWitch勒索软件漏洞,该漏洞能够为所有HomuWitch受害者创建免费解密工具。因此,笔者就一直在琢磨究竟自己能不能找到报告中描述的漏洞。

通过分析尝试,笔者成功复现了网络中报告描述的内容,成功利用HomuWitch勒索软件自身对被勒索系统中的勒索文件进行了解密。虽然实现了相关流程,但是笔者却认为直接描述为利用HomuWitch勒索软件漏洞实现解密效果有些牵强,描述为利用HomuWitch勒索软件的设计缺陷更合适一些:

  • 应用程序漏洞的名词定义:在软件应用程序中存在的安全弱点或错误,可以被攻击者利用来执行未经授权的操作、获取敏感信息或导致系统崩溃等不良后果。这些漏洞可能是由于设计、编码、配置或部署方面的错误而产生的。
  • HomuWitch勒索软件漏洞(设计缺陷)形成:HomuWitch勒索软件中提供了勒索解密函数,同时勒索加解密算法为对称加密算法,因此导致可直接从HomuWitch勒索软件中提取加解密密钥;若其使用非对称加密算法,则此漏洞(设计缺陷)将无法被利用。

漏洞OR设计缺陷?

为了寻找此漏洞,笔者也是对HomuWitch勒索软件的反编译源码进行了详细阅读,虽然花费了一些时间,没有直接找到漏洞,不过也是找到了HomuWitch勒索软件中的一些有意思的代码:

  • 在反编译代码中发现勒索解密函数:DecryptFile(string inputFilePath, string outputFilePath)
  • 在反编译代码中发现勒索解密函数的调用流程:HomuCrypt.DecryptFile(text, Path.Combine(Path.GetDirectoryName(text), Path.GetFileNameWithoutExtension(text)));

相关代码截图如下:

基于此,笔者推测,此款HomuWitch勒索软件的勒索逻辑为:当被害者支付赎金后,攻击者向其反馈解密密钥,然后被害者在HomuWitch勒索软件中填写解密密钥实现勒索解密。

为了验证笔者的猜想,笔者尝试在网络中搜索了一下HomuWitch勒索软件的窗体截图,发现HomuWitch勒索软件的窗体中确实提供了一个填写密钥的输入框,相关截图如下:

缺陷利用

尝试将【外联地址及加密密钥】章节中提取的密钥信息填写至窗体密钥输入框中,笔者发现,可直接利用HomuWitch勒索软件对系统进行勒索解密。

加密后系统截图如下:(桌面壁纸被修改,窗体程序只能通过任务管理器关闭)

解密后系统截图如下:(桌面壁纸被修改,释放bat文件自删除)

仔细琢磨了一下,这便是网络中报告提到的勒索软件漏洞吧。。。纯纯的为了吸引眼球。。。

手动解密尝试

为了更直观的复现其勒索解密流程,笔者尝试将C#的DEFLATE压缩算法及AES算法的输出内容进行了提取,并基于CyberChef工具实现了手动解密,详细情况如下:

备注:笔者使用其他编程语言一直无法模拟实现C#的DEFLATE压缩算法,因此最终只能选择直接调用C#代码实现DEFLATE压缩算法

#***************************加密************************
#原始文件内容
61 61 61 61 61 61 61 61 61 61 61 0D 0A 62 62 62
62 62 62 62 62 62 62

#  C#的DEFLATE压缩算法运算后
4B 4C 84 03 5E AE 24 38 00 00

#AES CBC算法运算后
BF 74 17 D5 2F 80 6A 19 D0 F4 1F 43 EF 85 77 C6
85 7F C3 C0 88 9E 55 03 A9 54 F7 40 80 0C DA F1

#***************************解密************************
#提取Rfc2898算法的salt参数
BF 74 17 D5 2F 80 6A 19 D0 F4 1F 43 EF 85 77 C6

#样本内置的password值
oralcumshot1998

#调用Rfc2898算法迭代计算生成AES CBC运算的key及IV值
37ee14845f1a7c040dbcc0ebcd2e88a9a5df0ae0bfbf5f525d8a48a24d3f1595
8b5e39cc073a81ef4a4d7c17ffdbd470

#调用AES CBC算法解密
4b4c84035eae24380000

#  C#的DEFLATE解压缩算法需要调用C#代码使用

相关截图如下:

模拟构建勒索解密工具

虽然我们可直接利用HomuWitch勒索软件实现勒索解密行为,但笔者基于研究目的,还是决定模拟构建一款勒索解密工具:

  • 此次使用的编程语言为C#
  • 借助everything文件搜索工具,提取系统中的勒索后缀(.homuencrypted)文件列表。
  • 基于上述HomuWitch勒索软件的加解密原理,模拟构建针对HomuWitch勒索软件的解密工具,解密还原原始文件,并将勒索后缀文件重命名为“.bak”文件后缀。

代码实现

代码结构如下:

  • Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading;
using System.IO.Compression;
using System.Security.Cryptography;


namespace ConsoleApplication1
{
    class Program
    {
        public static void DecryptFile(string inputFilePath, string outputFilePath)
        {
            string password = "oralcumshot1998";
            using (FileStream fileStream = new FileStream(inputFilePath, FileMode.Open))
            {
                using (FileStream fileStream2 = new FileStream(outputFilePath, FileMode.Create))
                {
                    using (Aes aes = Aes.Create())
                    {
                        byte[] bytes = Encoding.UTF8.GetBytes(password);
                        byte[] array = new byte[16];
                        fileStream.Read(array, 0, array.Length);
                        Rfc2898DeriveBytes rfc2898DeriveBytes = new Rfc2898DeriveBytes(bytes, array, 10000);
                        byte[] bytes2 = rfc2898DeriveBytes.GetBytes(32);
                        byte[] bytes3 = rfc2898DeriveBytes.GetBytes(16);
                        using (ICryptoTransform cryptoTransform = aes.CreateDecryptor(bytes2, bytes3))
                        {
                            using (CryptoStream cryptoStream = new CryptoStream(fileStream, cryptoTransform, CryptoStreamMode.Read))
                            {
                                using (DeflateStream deflateStream = new DeflateStream(cryptoStream, CompressionMode.Decompress))
                                {
                                    deflateStream.CopyTo(fileStream2);
                                }
                            }
                        }
                    }
                }
            }
        }

        static void Main(string[] args)
        {
            string filePath = "C:\\Users\\admin\\Desktop\\11.txt";

            try
            {
                using (StreamReader sr = new StreamReader(filePath))
                {
                    string line;

                    while ((line = sr.ReadLine()) != null)
                    {
                        Console.WriteLine(line);
                        string suffix = ".homuencrypted";
                        if (line.EndsWith(suffix))
                        {
                            string srcname = line.Substring(0, line.Length - suffix.Length);
                            DecryptFile(line, srcname);
                            File.Move(line, line + ".bak");
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("读取文件时发生错误:" + e.Message);
            }
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1585455.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Elasticsearch8.x 设置密码

文章目录 一、环境说明二、使用elasticsearch-reset-password工具修改1、elasticsearch-reset-password工具位置2、设置密码 一、环境说明 elasticsearch版本:8.13.0 系统版本:Ubuntu 18.04.6 二、使用elasticsearch-reset-password工具修改 1、elast…

Mac环境 llamafile 部署大型语言模型LLM

文章目录 Github官网本地部署 llamafile 是一种可在你自己的电脑上运行的可执行大型语言模型(LLM),它包含了给定的开放 LLM 的权重,以及运行该模型所需的一切。让人惊喜的是,你无需进行任何安装或配置。 Github https…

2023年上半年信息系统项目管理师——综合知识真题与答案解释(1)

2023年上半年信息系统项目管理师 ——综合知识真题与答案解释(1) 零、00时光宝盒 1009 Rejections 1009 拒绝 Once, there was an old man, who was broke, living in a tiny house and owned a beat-up car. 有一次,有一个老人,他破产了&#…

VTK 动画:框架、流程与实现

VTK 动画:框架、流程与实现 VTK 动画:框架、流程与实现vtkAnimationCue 和 vtkAnimationScene 简介vtkAnimationScene 类的重要方法vtkAnimationCue 类的重要方法VTK 动画的基本流程实例:一个简单的 VTK 动画演示程序 VTK是一个非常强大的图形…

报表控件 Stimulsoft 常见问题:从代码启用缓存

Stimulsoft Ultimate (原Stimulsoft Reports.Ultimate)是用于创建报表和仪表板的通用工具集。该产品包括用于WinForms、ASP.NET、.NET Core、JavaScript、WPF、PHP、Java和其他环境的完整工具集。无需比较产品功能,Stimulsoft Ultimate包含了…

Day 20 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

最大二叉树 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构建最大二叉…

django模板的继承

模板的继承 我们在访问一些访问的网站 这些网站页面整体都差不多 , 只是某一些局部在变化。 模板的继承, 就是自己先选好一个想要继承的模板页面 {% extends home.html %}​ 在继承之后子页面跟模板页面长的是一模一样的, 你需要在模板页面…

Burpsuite+MuMu模拟器12抓包

写在前面 高版本的安卓不能直接安装证书了,比较麻烦。步骤如下。 前置工作 安装adb https://blog.csdn.net/x2584179909/article/details/108319973 安装openssl https://blog.csdn.net/zyhse/article/details/108186278 下载证书 看一下自己的IP burp添加…

Linux Ubantu安装配置教程

Ubuntu是一个基于Linux的开源操作系统,它遵循GNU通用公共许可证,用户可以自由使用、复制、分发和修改。它提供直观易用的桌面环境,适合新手和有经验用户。Ubuntu有强大的软件中心,支持多硬件架构,注重安全和稳定&#…

AcWing 112. 雷达设备 解题思路及代码

先贴个题目: 以及原题链接: 112. 雷达设备 - AcWing题库https://www.acwing.com/problem/content/114/ 这题如果直接枚举点肯定是不行的,但可以把每个小岛的可能雷达设置点抽象成x轴上的线段进行贪心,我们的选点尽量选在线段的重合…

element vue 日期时间组件封装

一、背景 年、月、周、日的时间范围类型&#xff0c;选择对应的日期类型&#xff0c;会传参给后端一个dateType参数&#xff0c;用于后端判断&#xff0c;进行数据抽稀。 二、实现效果 三、代码 完整代码&#xff1a; //年月周日&#xff0c;组件封装 //vue3 setup <scrip…

element-ui中el-radio-group组件绑定点击事件触发多次的解决办法

1、需求 电商首页需求&#xff0c;需要做个单选框&#xff0c;然后点击选中切换图标方向及更换价格升倒序&#xff0c;如下图&#xff1a; 从官网文档看&#xff0c;单选框支持change event&#xff0c;使用click加载按钮处不会触发选中 但是使用 click.native 事件不做处理…

【XR806开发板试用】在 xr806 上移植 LVGL

本文参与极术社区的《基于安谋科技STAR-MC1的XR806开发板试用》活动。 不多废话&#xff0c;直接开搞&#xff0c;先上效果图 准备 开发环境啥的&#xff0c;已经有很多文章了&#xff0c;这里就不再提搭建开发环境的相关内容了。 一个屏幕(1.8’ 128x160) LVGL源码(v8.0.2…

ros 自定义package:在rviz中创建可显示markers的工具包(python)

在rviz中创建可显示markers的工具包 1. 创建using_makers工具包2. rviz部署和测试 1. 创建using_makers工具包 在catkin_ws工作空间下 cd ~/catkin_ws/srccatkin_create_pkg using_markers rospy visualization_msgsmkdir ~/catkin_ws/src/using_markers/scripts/添加basic_s…

D1084 5A低压差电压调整器应用方案,内含电流限制和热保护功能,防止任何过载时产生过高的结温

1、 概述&#xff1a; D1084是一款具有5A输出能力、低压差为1.5V的三端稳压器。输出电压可通过电位器调节或1.5V, 1.8V, 3.3V三个固定电压版。内含电流限制和热保护功能&#xff0c;防止任何过载时产生过高的结温。D1084系列电路有标准TO-220、TO-263和TO-252封装形式。 2、 典…

大话设计模式——21.中介者模式(Mediator Pattern)

简介 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变它们之间的交互 UML图 应用场景 大量的连接使得一个对象不可能在没有其他对象的支持下工作&#xff0c;系统表现为一个不可分割的…

redis过期监听机制

转自&#xff1a;https://www.cnblogs.com/wangyunhong/articles/16505079.html 1.redis配置 1.打开conf/redis.conf 文件&#xff0c;取消注释&#xff1a;notify-keyspace-events Ex 2.重启redis 3.如果设置了密码需要重置密码&#xff1a;config set requirepass **** 3…

新鲜出炉!这一套二手平台管理系统,太牛了,直接领取【带源码】

​今天给大家分享一套基于SpringbootVue的二手平台管理系统源码&#xff0c;在实际项目中可以直接复用。(免费提供&#xff0c;文末自取) 一、系统运行图&#xff08;设计报告和接口文档&#xff09; 1、登陆页面 2、后台页面 3、设计报告包含接口文档 二、系统搭建视频教程 …

JVM常用参数一

jvm启动参数 JVM&#xff08;Java虚拟机&#xff09;的启动参数是在启动JVM时可以设置的一些命令行参数。这些参数用于指定JVM的运行环境、内存分配、垃圾回收器以及其他选项。以下是一些常见的JVM启动参数&#xff1a; -Xms&#xff1a;设置JVM的初始堆大小。 -Xmx&#xff1…

了解CSS中的BFC以及用法

目录 一 常见的定位方案 1. 普通流&#xff08;所有元素默认为普通流的定位&#xff09; 2. 浮动 3. 绝对定位 二 BFC 1. 定义 2. 触发条件 3. 作用 &#xff08;1&#xff09; 避免外边距重叠 ​&#xff08;2&#xff09;清除浮动 &#xff08;3&#xff09; 阻…