勒索软件分析_Conti

news2024/11/15 7:30:58

0. Conti介绍

勒索软件即服务(Ransomware as a Service,RaaS)变体 Conti 推出还不到两年,已经进行了第七次迭代。Conti被证明是一种敏捷而熟练的恶意软件威胁,能够自主和引导操作,并具有无与伦比的加密速度。截至 2021 年 6 月,Conti独特的功能集已帮助其附属公司从 400 多个组织勒索数百万美元。

1. Conti攻击概述

Conti的行为与大多数勒索软件类似,但它经过精心设计,更加高效且更具规避性。具体来说,Conti在混淆能力、运行速度以及文件加密方面进行持续优化,其主要特征包括:

混淆能力提升:自早期的Conti(2019 年末)通过简单的 XOR 机制来隐藏在运行时解析的 API 名称。从2020年6月开始,Conti还采用了字符串混淆的自定义编码函数。

运行速度提升:Conti使用多达32个并发CPU线程进行文件加密操作,并且从2020年9月开始Conti将加密算法从AES切换为CHACHA。

文件加密优化:2020年9月后,Conti添加了新的文件加密逻辑(部分加密)。2021年1月后,Conti在加密过程中引入C++ 队列和锁,取代了原先使用的IoCompletionPorts。

2. 勒索软件影响

Conti由所谓的TrickBot团伙开发和维护,主要通过RaaS隶属模式运营。Conti勒索软件源自Ryuk的代码库,并依赖于相同的TrickBot基础设施。Conti 样本于 2019 年 10 月左右首次出现,截至2021年6月已经发生399 起Conti攻击,攻击事件统计如下图所示。

3. 勒索软件分析

测试版本

导入函数:Conti使用LoadLibraryA和GetProcAddress手动链接导入函数,所有 API 的名称均使用字节0x99进行简单的XOR编码。此版本中未对DLL的名称进行编码,除了一些来自Rstrtmgr.dll的可选导入之外。除此之外,GetProcAddress函数最终会确保它拥有它正在寻找的所有强制API。否则,它使用 ExitProcess退出程序。

加载资源:Conti会加载 PE 文件中的两个资源。第一个将用作赎金票据的文本(在最早的版本中设置为“测试票据”),而第二个是用逗号分隔的字符串列表,通过这些字符串可以过滤目标文件。这允许对上述资源进行简单修改可以实现定制化的勒索攻击,而无需重新编译勒索软件。

加密前操作:Conti首先通过命令行(所有命令字符串均通过字节 0x99 进行异或编码)删除系统驱动器上的卷影副本,之后通过命令行停止系统上约170项服务,然后迭代系统上正在运行的所有进程并终止“sql”相关的进程。完成上述操作之后,Conti查询系统中处理器的数量,并创建两倍于处理器数量的IoCompletionPort与处理器数量的线程。

目标文件获取:Conti在创建线程后,Conti查找系统上所有驱动器,并运行其逻辑(目标文件过滤)来选择每个驱动器上的目标文件。遍历所有驱动器后,Conti使用所有线程从GetIpNetTable返回所有IP地址,对每个IP地址调用NetShareEnum获取网络共享列表,并获取目标文件。

文件加密:Conti的文件加密主要通过其迭代函数与加密函数实现,(1)迭代函数会获取一个文件夹作为参数,并通过FindFirstFile API搜索文件夹中的所有文件。(2)加密函数首先从PE文件数据部分加载RSA公钥,之后从IoCompletionPorts中获取目标文件路径,然后通过AES+RSA对目标文件进行混合加密,最后将文件的扩展名改为“.CONTI”并对下一个目标文件进行加密。

正式版本

目标文件获取:Conti在以迭代的方式在各驱动器上并行搜索目标的文件。具体来说,Conti会为每个驱动器创建一个新线程,并以驱动器根路径作为参数通过迭代函数获取目标文件。这是一个很好的补充,可以提高速度。

文件加密:Conti在以前的版本中,加密的 AES 密钥和原始文件大小都在加密之前写入文件的末尾。然而,在此版本中,只有在文件完全加密后才会写入原始文件大小。

改进版本v1

命令行参数:Conti引入加密模式、网络位置等命令行参数,方便攻击者实施自定义勒索攻击。

函数导入:Conti使用自定义编码函数代替简单的单字节 XOR,且更多字符串被混淆。

加密前操作:Conti减少了 36 个服务的停止,创建互斥体以避免不同实例之间的相互干扰。

目标文件获取:Conti通过GetIpNetTable中的本地IP(如,192.168.*)查找共享文件。

改进版本v2

命令行参数:FAdded支持对其他命令行参数的支持。在此版本中,可以将目录列表指定为搜索要加密的感兴趣文件的目标。此外,可以给出一个日志记录标志,尽管它直到更高版本才实现。

函数导入:在大多数情况下,Conti 不会嵌入 DLL 的普通名称及其所需的导出,而是仅保留所需字符串的哈希值。通过哈希仅找到 kernel32.dll。其余的 DLL 名称嵌入在可执行文件中,现已进行模糊处理,并使用 LoadLibraryA API 加载。选择的 API hash函数是 Murmur2A8,其常量种子设置为 0x5B2D,用于小写 ASCII 字符串。

新实现的钩子删除逻辑在加载所有必要的 DLL 后发生。对于每个加载的 DLL,Conti 会读取磁盘上的文件并遍历其中的所有导出,查找前几个字节的差异。如果在磁盘版本和内存版本之间发现任何此类差异,则内存中的字节将被从磁盘读取的字节替换。钩子删除函数中使用的 API 是通过加载时链接的 LoadLibraryA 和 GetProcAddress 获取的,这又是一个新添加,没有经过将 API 切换为运行时加载的 API 的重构。

加载资源:这两个资源已被删除。勒索字条内容已移至可执行文件的数据部分,同时删除了加密特定文件模式而不是默认文件模式的功能。我们推测作者发现后一个功能不值得支持,因为我们从未见过它在实践中使用。

加密前操作:删除服务的能力已被删除。允许删除卷影副本的功能以不同的方式实现,在本示例的逻辑中更进一步。如果选择本地加密模式,该示例将通过使用 WMIC9 运行命令来删除在 ROOT\CIMV2 上查询 Win32_ShadowCopy 时找到的卷影副本。与之前使用 vssadmin10 删除固定数量的驱动器相比,这些驱动器可能启用也可能未启用卷影副本,甚至可能未安装在磁盘上,甚至可能会丢失带有卷影副本的驱动器。

重新实现已删除的功能,为从 IoCompletionPorts 读取而创建的线程数量又恢复到基于系统上可用处理器的数量。这次,它取决于勒索软件的执行模式,在指定“仅本地”或“仅网络”加密的情况下为每个处理器创建一个线程,如果同时使用两种模式,则创建两倍的线程。有趣的是,此版本中的重新实现使用了从 GetNativeSystemInfo 查询返回的错误值,使用 dwActiveProcessorMask 而不是 dwNumberOfProcessors。这个小bug在后续版本中得到修复。

目标文件获取:“169.*”形式的地址被添加到 IP 地址列表中以搜索共享。现在使用 inet_ntoa API,而不是使用 InetNtopW 将地址转换为宽字符串,使字符串只有字节大小。不是执行 32 个线程来搜索这些 IP 地址上的共享,而是只有一个线程在做脏活。

在寻找网络共享的过程中还有一项额外的检查。首先使用恶意软件手动创建的套接字检查地址是否有 445 上的开放端口。然后,仅对应答检查的 IP 调用 NetShareEnum API。此更改应该会减少在没有任何地址的地址上查询共享的噪音。

文件加密:不同的文件采用不同的逻辑进行加密。我们有一个包含 171 个扩展名的新列表,其中文件的全部内容都被加密,然后还有另一个包含 20 个扩展名的列表,其中仅对文件的某些部分进行了加密。最后,其余文件按大小进行分类。

加密算法由AES改为ChaCha。密钥仍然是按文件随机生成的,并在使用二进制文件数据部分中嵌入的 RSA 公钥加密后写入文件末尾。

加密文件的扩展名已从 .CONTI 更改为 .YZXXX,这可能有助于避免根据已知的扩展名更改检测到勒索软件。

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

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

相关文章

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月26日,星期日

每天一分钟,知晓天下事! 2024年5月26日 星期日 农历四月十九 1、 医保局:支持将符合条件的村卫生室纳入医保定点,方便农村居民就医。 2、 网传养老金储备严重不足?央视辟谣:这笔钱二十多年来从未动用过&a…

SAP HCM WPBP的几个变量含义

WPBP起源 WPBP是SAP HCM的主数据的集合内表,集合、内表这两个名词如何理解,集合就是多个主数据的汇总,内表是ABAP的几个数据结构,就和我们EXCEL的多行一行。 wpbp数据来源 WPBP的主数据来源于SAP HCM 0000、0001、0007、0027、0008信息类型的汇总,SAP HCM是以时间轴为核心…

Linux/Ubuntu 中安装 ZeroTier,实现内网穿透,2分钟搞定

相信很多人都有远程连接家中设备的需求,如远程连接家中的NAS、Windows等服务,所以会涉及到一个内网穿透工具的使用,如果没有公网IP的情况下,推荐大家使用ZeroTier,这是一款强大的内网穿透工具。 mac和windows版的操作…

Python实现SMA黏菌优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 黏菌优化算法(Slime mould algorithm,SMA)由Li等于2020年提出&…

LeetCode刷题之HOT100之二叉树的直径

2024/5/25 阴天。这几天睡眠质量都非常好,一切似乎都在慢慢上升。先把题做了 1、题目描述 2、逻辑分析 题目要求就是给一个二叉树,求出两个节点之间的最大长度即为二叉树的直径。怎么做呢?我想不出来。看一下题解吧。题解给出的解法是深度优…

Elasticsearch集群许可证过期问题解决方法汇总

最近在使用elasticsearch的过程中,使用elastic-head进行可视化展示集群的状态和信息,从2024年5月18日突然elastic-head无法现在集群的状态界面啦,elasticsearch集群状态是正常,命令如下: curl -X GET "localhost:9200/_cluster/health?pretty" 在google页面上通过…

小程序的这些知识你知道吗?

一:导航传参 无论是编程式还是声明式导肮传参都是在url?keyvalue&key1value1,无论是否是tabbar页面. 对于回退页面,没办法传参. 这个参数是,跳转到页面的时候,跳转到另一个页面,这个页面就是刚开始执行,等数据执行之后,触发onload,传递的参数放在内存中,跳转是内部底层触…

SpringBoot学习小结之RocketMQ

文章目录 前言一、架构设计1.1 架构图1.2 消息1.3 工作流程 二、部署2.1 单机2.2 集群 三、Springboot Producter3.1 准备3.2 pom依赖、yml 配置3.3 普通消息3.4 顺序、批量、延迟消息3.5 事务消息 四、Springboot Consumer4.1 配置4.2 普通Push消费4.3 回复4.4 集群和广播4.5 …

华为造车布局全曝光,对标奔驰、迈巴赫等

文 | Auto芯球 作者 | 雷慢 这一刻,我承认我格局小了, 就在刚刚,余承东曝光了华为智选车的布局计划, 华为问界、智界、享界等,将全面对标奔驰、迈巴赫、劳斯莱斯等车系, 这布局,确实是世界…

Spring MVC+mybatis 项目入门:旅游网(二) dispatcher与controller与Spring MVC

个人博客:Spring MVCmybatis 项目入门:旅游网(二)dispatcher与controller与Spring MVC | iwtss blog 先看这个! 这是18年的文章,回收站里恢复的,现阶段看基本是没有参考意义的,技术老旧脱离时代…

大规模团队的数据库开发,如何用OceanBase工具快速建立企业级账号体系

前言 为了让数据库开发的安全性与可靠性得以充分保障,数据库开发工具的管控能力显得尤为关键。构建一个健全的账号体系,能够协助开发团队实现对数据库开发工具的全方位管控,从而有效防范各类数据安全隐患,确保数据库开发的顺利进…

深度神经网络——什么是混淆矩阵?

概述 混淆矩阵是一种在机器学习和数据科学中广泛使用的分析工具,用于评估分类模型的性能。它通过比较实际类别和模型预测的类别来提供模型性能的详细信息。以下是混淆矩阵的一些关键点: 结构:混淆矩阵是一个表格,通常有两行两列&…

毫米波雷达模块在智能家居安全系统中的关键技术分析

随着智能技术的不断发展,智能家居已经成为了现代生活的一部分。而智能家居安全系统作为智能家居的重要组成部分,其功能不仅仅是对家庭进行监控和报警,更是通过各种感知技术对家庭安全进行全方位的保障。在智能家居安全系统中,毫米…

Go语言的中间件(middleware)是如何实现的?

文章目录 Go语言的中间件(Middleware)是如何实现的?中间件的工作原理中间件的实现步骤示例代码总结 Go语言的中间件(Middleware)是如何实现的? 在Go语言中,中间件(Middleware&#…

C语言学习笔记之指针(一)

目录 什么是指针? 指针和指针类型 指针的类型 指针类型的意义 指针-整数 指针的解引用 指针 - 指针 指针的关系运算 野指针 什么是野指针? 野指针的成因 如何规避野指针? 二级指针 什么是指针? 在介绍指针之前&#…

使用Pyecharts构建Map对象无法显示颜色--解决

我们在做数据可视化的过程中,可能需要使用到地图作为数据可视化的工具; 包括世界地图、国家地图、省市区地图等; 如果在你设置好颜色数据匹配后,可视化地图未显示对应数据的颜色,那么请检查是否出现以下情况&#xf…

Hadoop运行wordcount实例任务卡在job running的多种情况及解决方法

第一种:配置问题 这是别人的图片,据楼主排查解决是因为hosts配置问题… 现象:各种无法运行、启动 解决办法: 1、修改日志级别 export HADOOP_ROOT_LOGGERDEBUG,console 查看下详细信息,定位到具体问题解决 第二种&…

【JavaSE】/*类和对象(上)*/

目录 一、什么是类,什么是对象 二、类和对象的关系 三、学习类和对象的目的 四、怎样创建一个类 4.1 语法形式 4.2 创建示例 示例一:日期对象 示例二:小狗对象 示例三:学生对象 4.3 注意事项 4.4 修改public修饰的主类…

Day06:Flex 布局

目标:熟练使用 Flex 完成结构化布局 一、标准流 标准流也叫文档流,指的是标签在页面中默认的排布规则,例如:块元素独占一行,行内元素可以一行显示多个。 二、浮动 1、基本使用 作用:让块元素水平排列。 …

如何学习计算机网络(超详细,方法论)

分享一下学习计算机网络的方法论 首先是看视频: 这里我推荐中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版》课程 课程目标_哔哩哔哩_bilibili 教材采用神书《计算机网络(自顶向下方法)》,授课风格更偏向实…