当前位置: 首页 > java >正文

观成科技:摩诃草组织Spyder下载器流量特征分析

一、概述

自2023年以来,摩诃草组织频繁使用Spyder下载器下载远控木马,例如Remcos。观成安全研究团队对近几年的Spyder样本进行了深入研究,发现不同版本的样本在数据加密、流量模式等方面存在差异。基于此,我们对多个版本样本的通信特征进行了对比分析,其中版本的界定主要是通过数据中的字段(如ver或about)来确定,早期样本未明确版本标识,而后期版本通过这些字段明确显示版本信息。具体特征总结如下:

①各版本样本均使用HTTP协议,80端口进行通信,心跳包使用POST请求方式。

②各版本样本会根据第一次发起请求后服务器的响应,判断是否需要收集设备信息并进行回传。

③各版本样本的数据均采用Base64编码进行加密,但随着版本的更新,后期版本普遍使用双重Base64加密。

④各版本样本的流量类型不同,早期版本采用多流模式,每条流只包含一个HTTP交互;而后期版本则采用单流模式,在一条流内维持长连接,包含多次HTTP交互。

⑤各版本的上线包和心跳包的内容格式发生变化。

根据回传数据的位置和键值名称,我们将各版本样本的通信特征分为三种类型。下文将详细介绍这三类通信特征。

二、样本

此次分析的10个Spyder下载器样本的基本信息如下表:

三、流量特征

3.1上线包

样本执行后会收集设备信息,不同版本的样本收集的信息也不一样,但通常都至少包括主机名、用户名、操作系统版本和杀软信息等。三类样本流量特征如下:

类型1:设备信息位于HTTP请求体中,且数据部分经过Base64编码。从版本2开始,样本数据末尾会添加如 &ver=2 的字段,用来标识版本信息,如图1所示;类型1的上线包中发送的数据字段及其含义见表1。

类型2:设备信息的关键字和值完全加密,使用双重base64编码,且数据位于请求体中的 data= 字段后,如图2、3、4。

类型3:设备信息的加密数据位于请求头部,请求头中出现特殊的键值名称,如 boop 或 zte等,后跟双重base64编码的数据,如图5、6;类型3发送的数据字段及其含义见表2。

图 1 spyder-类型1上线包

表 1 spyder-类型1上线数据字段说明

图 2 spyder-类型2上线包

Spyder-类型2样本采用双重Base64编码加密方式,解密后的上线数据见图4。

图 3 双重base64编码

图 4 spyder-类型2 上线数据解密

图 5 spyder-类型3上线包

spyder-类型3上线数据解密见下图。

图 6 spyder-类型3 上线数据解密

表 2 spyder-类型3上线数据字段说明

3.2心跳包

各样本的心跳数据都具有固定的心跳时间间隔,但每个样本的心跳间隔不同,范围从0.5秒到4秒不等。此外,不同版本的心跳数据在内容上也存在一定差异,主要包含Machine GUID、获取控制指令码和版本号。详情见表3。

表 3 各版本心跳包信息

图 7 spyder-类型1 心跳包

图 8 spyder-类型2 心跳包

spyder-类型2心跳数据解密见图9。包括Machine GUID、控制指令码、版本号。其中控制指令码包括0123四种取值,0表示操作结束,123均用于获取并执行不同的后续载荷。心跳包通常首先发送指令码1,以请求获取控制指令。

图 9 spyder-类型2 心跳数据解密

表 4 spyder-类型2心跳数据字段说明

图 10 spyder-类型3 心跳包

spyder-类型3心跳数据解密见图11。

图 11 spyder-类型3 心跳数据解密

表 5 spyder-类型3心跳数据字段说明

四、产品检测

观成瞰云(ENS)-加密威胁智能检测系统能够基于行为特征对各个版本的spyder下载器进行有效检出。

图 12 观成瞰云(ENS)-加密威胁智能检测系统检出spyder

五、总结

Spyder下载器经历了多次更新,通过对其历代样本的分析,我们可以看到该工具的通信数据格式和加密方式不断变化。从最初通过请求体回传数据,变为通过请求头回传数据;从部分数据采用Base64编码,到如今将全部数据进行双重Base64编码。这些变化表明Spyder攻击工具在不断改进。目前,Spyder已经成为摩诃草APT组织的常用工具。通过行为检测方式,我们实现了Spyder工具的检测能力,能够更有效地跟踪摩诃草APT组织,及时发现针对我国的APT攻击事件。

http://www.xdnf.cn/news/1595.html

相关文章:

  • [原创](现代Delphi 12指南):[macOS 64bit App开发]:如何使用NSString类型字符串?
  • [Mac] 使用homebrew安装miniconda
  • 机器学习中的特征存储是什么?我需要一个吗?
  • 游戏引擎学习第241天:将OpenGL VSync 和 sRGB 扩展
  • nerf 有哪些 高精度建图算法
  • vue3,element ui框架中为el-table表格实现自动滚动,并实现表头汇总数据
  • 如何保证高防服务器中的系统安全?
  • Rust项目GPG签名配置指南
  • 再来1章linux 系列-11 系统的延迟任务及定时任务 at ,crontab,mail;/etc/at.allow,/etc/at.deny
  • C++学习:六个月从基础到就业——STL算法(二)排序与变序算法
  • 从单机工具到协同平台:开源交互式模拟环境的技术演进之路
  • 空闲列表:回收和再利用
  • 【MySQL】表的约束
  • 面阵相机中M12镜头和远心镜头的区别及性能优势
  • 游戏引擎学习第243天:异步纹理下载
  • Python类可以有多个构造函数吗
  • Freertos----中断管理
  • 使用HYPRE库并行装配IJ稀疏矩阵指南: 矩阵预分配和重复利用
  • 《ATPL地面培训教材13:飞行原理》——第1章:概述与定义
  • 基于PHP+Uniapp的互联网医院源码:电子处方功能落地方案
  • EasyRTC音视频实时通话在线教育解决方案:打造沉浸式互动教学新体验
  • 大模型AI的“双刃剑“:数据安全与可靠性挑战与破局之道
  • 前端跨端框架的开发以及IOS和安卓的开发流程和打包上架的详细流程
  • 电子病历高质量语料库构建方法与架构项目(计划篇)
  • 【C++】二叉树进阶面试题
  • IDEA将本地的JAR文件手动安装到 Maven的本地仓库
  • 无人设备遥控之调度自动化技术篇
  • 在vue项目中实现svn日志打印
  • 数据集中常见的11种变量类型及其在数据分析中的重要性
  • Java 富文本转word