SideWinder Uncoils to Strike

APT 2年前 (2022) admin
734 0 0

PART
01

背景

SideWinder APT组织也称为 RattleSnake 和 T-APT-04,在过去几年中一直是最具攻击性的APT攻击组织之一。该组织使其脱颖而出的一些主要特征是其攻击的数量、频率和持久性,以及在其操作中使用的大量加密和混淆恶意组件。自 2020  4 月以来,已检测到该 APT 攻击者的一千多次攻击。他们还维护着一个庞大的基础设施基础,其中有数百个域和子域用作下载和命令和控制服务器。
SideWinder最早从 2012 年开始就一直活跃,多年来,他们的主要目标包括中亚国家的警察、军队、海事和海军部队。近年来,他们还针对外交、科学和国防组织、航空、IT 行业和法律公司等部门。他们新注册的一些域名和鱼叉式网络钓鱼文件表明,该APT组织正在将其目标的地理范围扩展到其他国家和地区。
APT组织使用各种感染媒介和高级攻击技术具有相对较高的复杂性。这些技术包括多个混淆例程、为每个恶意文件使用唯一密钥进行加密、多层恶意软件、内存驻留恶意软件以及将基础架构字符串拆分为不同的恶意软件组件。
本文将详细介绍SideWinder APT组织的感染链、工具集、混淆技术、基础设施分析及其过去几年的演变。另外还将概述用于调查大量攻击的技术和方法,这些攻击利用大量模糊的恶意软件样本和多阶段感染链。最后将讨论如何将 IoC 与其他安全措施一起使用,以保护用户系统免受此 APT 组织的攻击。
PART
02

Sidewinder历史威胁行为
据卡巴斯基研究员统计,这个APT组织在过去的两年中执行了超过一千次攻击行为,这相对其他APT组织并不常见,他们拥有数百个用于命令和控制通信、下载后门控制程序的域名和子域名,并且他们还在不断的注册新的域名和子域名,以确保在一些使用比较久的旧域名被检测到或者失效的情况下能保持对受害者的有效攻击。
该APT组织在攻击时采用了高复杂度和相对高水平的隐匿技术,来保持长时间不被发现,例如多种混淆方案,以及将与C2服务器进行通信的url切割后部分存储在不同的恶意程序中,这样即使获取到其中恶意程序的一个样本,并且在解密和反混淆恶意程序的所有内容情况下,也无法溯源到完整的C2地址url。
PART
03

攻击手段
SideWinder Uncoils to Strike
这个APT组织的感染手段,或者说是攻击手法,可以分为投递阶段(delivery)、第一阶段(first stage)、第二阶段(second stage)、第三阶段(third stage)以及最终阶段(final stage)来看,在恶意程序投递阶段(delivery),主要采用了几种不同的文件格式,比如说他们曾用过恶意RTF文件来投递后门程序,先简单介绍下RTF文件,[RTF标准](https://en.wikipedia.org/wiki/Rich_Text_Format)是微软开发的专有文档文件格式,用于跨平台文档交换,攻击者利用恶意rtf文件配合Microsoft Office中存在的历史漏洞,例如CVE-2017-0199、CVE-2017-11882等漏洞来下载某个恶意DOCX文件,并打开文件内的恶意RTF文档触发漏洞利用,从而来完成植入后门的植入。

3.1   投递阶段

也就是说该APT组织一直在使用恶意rtf文件来攻击一些旧的、未打过补丁的Microsoft Word程序,并且在大部分情况下这个过程中会投递一个带有混淆 javascript 的 hta 文件,也就是在第一阶段中能看到的投递文件,然后这个带有混淆的恶意hta文件会加载一个下载器模块,这个下载器模块是内存中的一个.NET模块,并且这个下载器会与远程攻击者的文件下载服务器发起连接,去下载获取下一个攻击阶段所需的信息和文件,实际上是去获取另外一个同样带有混淆的恶意hta文件,文件格式也跟第一个阶段的恶意hta文件类似。
但是第二阶段的hta文件它最终的有效载荷是一个基于.NET语言的程序安装文件,并且这个安装文件还会删除最终后门模块的不同组件,然后通过dll加载后门加载程序,将它加载进内存中,并且执行最后的后门,从而与另外个C2服务进行通信。
在某些情况下,他们还有其他投递手段,比如使用LNK文件,LNK文件是Windows的快捷方式文件,这些恶意LNK文件内部包含的是与远程C2服务器请求通信的命令,以及下载文件命令,并且通过mshta.exe执行这些命令,远程下载的文件与RTF方式一样,获取到的是一个带有js混淆的hta文件。
从上面图中还可以看到还有一种投递利用方式是OOXML方式,攻击手段就是通过恶意的oxml文件,去请求这个文件中的外部引用,从而去从远程服务器上下载带有js混淆的hta文件。
现在我们来深入分析不同阶段中的恶意文件的利用方式,下面的这图是投递阶段中的恶意样本文件,我们可以在LNK文件中找到相关的属性。
SideWinder Uncoils to Strike
第一行表示的是相对路径,这个cftmo.exe实际上是个假名字,他们实际上隐藏了主进程,即mshta.exe 在 lnk 文件的其他部分,但我们可以通过010编辑器在其中看到命令行参数,包括下一个阶段的攻击所需用到的远程地址。
再来看一个他们使用钓鱼文档的一个示例,如下图所示:
SideWinder Uncoils to Strike
这个示例的思路还是挺清奇的,攻击者会向受害者发送了一个空文档,因为没有内容,但实际上它内部只有一个恶意对象,同样也只是经过js混淆的,然后在短时间内他们会用这样的信向受害者发送另一封电子邮件,这就像对上一封电子邮件的道歉信,这封邮件附件也有类似的恶意软件程序,除了远程的C2服务器地址不一样之外。这样即使受害者收到了一份空文档并且怀疑的时候,又收到这封道歉的文档,可能就会稍微放下戒心。
我们再来看一个oxml文档的示例,如下,其中在外部引用中就包含了下一阶段中的远程下载服务器链接。
SideWinder Uncoils to Strike


PART
04

第一阶段

接下来详细看第一阶段中的js做了什么混淆,用了哪些方式,以及它实际上又做了什么。

一个一个来,先来讲讲第一阶段中的主要目标,分为以下几点:
1. 使用 WMI 收集防病毒产品列表
2. 使用 ActiveX 对象从序列化流中解密和加载 .NET 有效负载
3. 解密攻击者的服务器地址并准备两个 URL 以传递给 .NET有效载荷
在第一阶段中,js的作用是作为一个下载器模块的角色,而在第二阶段中,js是一个安装程序模块的角色。
而且在两个js中均有一个加密的url,后续将会被解密然后传递给.NET载荷,用于与远程c2服务器进行下载上传和通信。
其中第一个URL的作用是将收集到的信息从系统发送到服务器,另外一个URL是用于从服务器下载下一阶段的恶意程序。
然后再来看2021年样本中用到的混淆示例:
SideWinder Uncoils to Strike
首先它有个一个自定义的base64头部,然后解码,可以看到这里面的加密解密都是自定义的,并且在捕获到上千的样本中,每个样本都是加密解密都是不一样的,除了它们都是使用了双异或加密之外,它们都具有不同的密钥和不同的数组,同时这也意味着存在异或密钥,需要与另一个密钥一起解密文件中的加密字符串,其中每个样本密钥也都是唯一的。
在2021年底他们有升级了混淆方式,所以在混淆这块实际上他们有两种不同的方法,如下:
SideWinder Uncoils to Strike
像这里基本上用到的都是对不同长度的字符串进行拆分和反转,然后在下面这图我们可以看到其中定义了不同的函数,这些函数实际上是相互定义的,每个函数都是从前一个函数的原型定义的,其中有些函数名也被混淆了,字符串会通过这种拆分和反转技术进行混淆,并且字符串的不同部分有不同的解密密钥,比如如下经过8、18、33等异或后不同的密钥。
SideWinder Uncoils to Strike
然后再来看看作为下载器的.NET模块
SideWinder Uncoils to Strike
这个模块的主要作用是检查系统是否存在一些反病毒程序,像这里能看到卡巴斯基(kaspersky)中的部分字符串“aspers”,以及包含像avast、avg这样的关键字,它会将这些信息发送远程的下载服务器,并且下载下一阶段所需要用的攻击载荷。

PART
05

第二阶段
第一阶段的下载器模块下载的同样是进过js混淆的hta文件,只不过这个文件的payload是另一个.NET模块,并且跟第一阶段不同的是,这次的是安装模块而不是下载模块,来看下这个模块都做了什么。
SideWinder Uncoils to Strike
可以看到这些变量名,第一个xKey是解密密钥,第二个instfolder里面的值解密后是文件夹的位置,类似恶意软件使用和创建的文件夹的位置,用于存储不同的文件,第三个domain解密出来后是C2服务器地址的一部分,第二部分存储在另一个模块中,而第四个regkey解密出来是注册表项的名称,以及值,主要用于注册表后门权限维持。
这个安装模块的作用主要是在系统生成一些文件和载荷,用于最后阶段的攻击,生成的关键文件有如下这些:
– Rekeywiz.exe
– DUser.dll
– %random%.tmp
– rekeywiz.exe.config
第一个Rekeywiz.exe是系统路径上面复制的合法文件,这个文件易受恶意dll文件加载的漏洞影响,并用于在系统加载后门加载程序。
第二个DUser.dll实际上就是后门加载程序的后门文件,就是由刚刚的Rekeywiz.exe进行加载。
第三个%random%.tmp文件是由这个安装模块运行时产生的,里面的内容是由主要的后门文件内容和域名,不过是经过32字节的异或密钥加密保存的,这个文件的特征是随机名称和拓展名为tmp。
而rekeywiz.exe.config里面主要存放着关于系统策略变量配置和.NET环境变量之类的配置信息,这个安装模块所做的最后一件事就是维持持久性,通过在注册表启动项上创建一个子项Rekeywiz.exe,然后接下来就是后门加载程序,通过系统侧加载dll去加载恶意的DUser.dll,然后就会寻找带有tmp拓展的加密文件,解密这个文件就能看到最终的后门,解密的过程如下:
SideWinder Uncoils to Strike
最终的这个后门同样是个.NET模块,里面有四个不同的类,如下:
SideWinder Uncoils to Strike
这些都不是合法的名字,他们使用这样的名称是为了让它看起来是来自某个应用程序的合法模块。
第一个FileListing主要用于收集系统上的文件和文件目录,包括文件的访问类型, 时间戳等等。
第三个StructureFlyweightClassDynamicChain主要负责后门与C2服务器的通信 。
最后一项Sysinfo主要是从系统中收集不同驱动器的可用内存、用户内存信息,以及补丁的修补情况 、id号 、安装日期等还有各种关于不同用户的信息,用户进程、历史命令等等信息。
同时这个后门有一个加密的配置块,如下:
SideWinder Uncoils to Strike
一旦成功解密,可以看到从偏移量 0x20 开始解密出了一个路径,它是由上一阶段创建的,用于在系统上存储从系统上收集到的不同文件, 以及文件类型。
SideWinder Uncoils to Strike
实际上这些内容是可以通过后门相关命令进行配置,来看下这个后门所有这些相关的命令:
SideWinder Uncoils to Strike

PART
06

基础设施
在过去两年的攻击中,他们已经维护了超过400 个域名以及子域名,他们不停的注册新域名和新子域名,并在几个月之内再次使用这些新域名与受害者主机进行通信,以保持持久性攻击。
在第一阶段中,他们所拥有的域名主要用于不同的目的,如下:
-用于下载用于鱼叉式网络钓鱼模块的第一阶段恶意软件的 URL,例如LNK 文件和 OOXML 文件
-用于发送通过嵌入的第一阶段恶意软件收集的信息的 URL,以及由第一阶段 JavaScript 解密
-用于下载获取第二阶段的 URL
SideWinder Uncoils to Strike
SideWinder Uncoils to Strike
上面这个表格是从第一阶段中提取的不同目的的url列表,从中我们可以提取出这些url的规律,比如2/0/0,3/1/1,images等。
除了第一阶段这些域名之外,还有C2服务器最后攻击与通信用到的域名,C2服务器域名我们上面讲过,就是他们会分成两部分,第一部分在恶意软件的组件中,另一部分存储在另一个恶意组件中,它们最终会被解密和拼接在一起还原出C2服务器的完整域名地址,从而完成攻击和通信。
PART
07

调查研究分析及防护
首先需要找到新样本,我们可以通过防病毒程序的新样本库里面去寻找,或者通过yara rule获取新样本。
然后就是恶意的URL地址规则提取,可以从防病毒检测中去探测,或者网络日志,以及病毒扫描检测中去进行。
至于新样本分析思路的话,需要先提取出恶意组件,然后提取出其中的混淆js脚本,再进行反混淆,反混淆的话是借助现成的工具,或者自行编写反混淆器,并且使用自行编写的解密器去解密嵌入式 .NET 模块。
最终的目的是提取出最终的 C2 地址,完成前面的所有步骤,收集最终的后门组件,再编写脚本解密提取出最终的C2地址。
防御思路有如下这些:
1. 最新的 MS Office 可在入口点阻止攻击
2. 应用程序的自定义设置(不允许远程连接)
3. 通过网络检测规则检测下载/C2 通信等流量
4. 通过高级安全产品检测内存驻留的恶意软件进程
PART
08

总结
1. 这个Apt攻击相比传统攻击多了目标配置文件攻击模式,而且现在正在不断拓展到针对其他不同的行业。
2. 与其他APT攻击相比,他们具有大量的攻击次数
3. 不断新注册域名和子域名以保持对受害者攻击的持久性
4. 不定时更新混淆方法,复杂且高级,同时还没被披露

原文始发于微信公众号(山石网科安全技术研究院):SideWinder Uncoils to Strike

版权声明:admin 发表于 2022年10月8日 上午11:11。
转载请注明:SideWinder Uncoils to Strike | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...