针对恶意软件Blister的探索与研究

晶颜123
在解码存根的末尾,它要么跳转,要么回调,然后调用解密函数。该解密函数使用RC4,但S-Box已经初始化,因此没有实现密钥调度算法。最后,它会跳转到最后一个Payload。

本文来自微信公众号“FreeBuf”,作者/晶颜123。

写在前面的话

Blister是一款功能强大的恶意软件,支持加载嵌入在其中的Payload。我们对过去一年半中捕捉到的137个恶意软件样本进行了拆包,并对Blister投放的Payload和其近期活动进行了深入分析和研究。由于Blister支持环境属性,而且大多数样本都启用了该功能,这表明攻击者大多是有针对性地在使用Blister。除此之外,Payload类型也由Cobalt Strike转变为Mythic代理。在这篇文章中,我们将对Blister恶意软件的技术细节进行深入分析,并提供辅助检测的YARA规则和脚本。

640.jpg

关于Blister

Blister本质上是一个加载工具,它可以加载嵌入在其中的Payload。大多数Blister样本都会投放Cobalt Strike信标,但近期捕捉到的Blister样本已开始转向投放Mythic代理了,而Mythic则是另一款功能强大的红队安全框架。

Blister最早于2021年12月份的一次攻击活动中被Elastic Security的研究人员发现,当时的Blister使用了Blist公司(名字跟Blister很相似)的有效代码签名来伪装成合法的可执行文件,且投放的是Cobalt Strike和BitRat。

2022年,Blister开始使用纯x86-64指令集,且SocGholish恶意软件也开始使用Blister了。同年8月,我们还观察到了新的Blister版本,此次更新引入了更多可配置选项,以及针对域名属性的可选域名哈希,这将允许攻击者以更有针对性的形式部署Blister。

时间来到2023年8月,我们又观察到了新的Blister活动。这一次,Blister在其感染的第一阶段引入了经过代码混淆处理。

Blister Payload分析

在下面的图片中,我们提供了Blister样本所使用的Payload家族时间轴,Blister样本所使用的Payload主要由Cobalt Strike、Mythic、Putty和一个测试应用组成。在早期阶段,Blister主要使用的是Cobalt Strike,后面开始逐步转向Mythic代理(BlisterMythic)。近期,我们还发现了一个专门用于解包BlisterMythic的封装器,我们将其称之为MythicPacker。但有趣的是,我们并没有观察到任何投放了BitRat的Blister样本。值得一提的是,我们从观察到的137个样本中提取除了74个不同的Payload:

640.jpg

Cobalt Strike

在Blister样本中,Cobalt Strike主要通过三种不同类型的Payload进行投放,即普通的Shellcode、DLL Stager和经过混淆的Shellcode。总的来说,我们获取到了61个信标,在下表中我们列出了观察到的Cobalt Strike水印(水印是一个唯一值,跟许可证密钥挂钩)。由于Cobalt Strike水印是可以更改的,因此水印并不是识别活动集群的可靠方法。

640.jpg

206546002这个水印虽然在这里只使用了两次,但这个水印之前也曾在Royal、Quantum和Play勒索软件活动中出现过。1580103824水印不仅曾在Gootloader和Cl0p相关的活动分析报告中出现过,而且也成了我们Cobalt Strike信标数据集中最常见信标水印的第9名。有趣的是,1101991775水印在Blister活动中出现的最为频繁,但却又没有出现在其他公开的安全报告中。

Cobalt Strike配置生成

在文末的信标提取表中,我们还提供了提交路径。大多数提交路径中包含了“/safebrowsing/”和“/rest/2/meetings”,这两个参数于SourcePoint(一个Cobalt Strike命令与控制C2配置生成器)中的路径相匹配。这种机制专门针对的是常规的Shellcode信标,当我们对经过混淆的Shellcode和DLL Stager信标进行分析后,我们发现它们似乎使用的是不同的C2配置。

域前置(Domain Fronting)

域前置(Domain Fronting)是一种用于隐藏真实C2服务器IP且同时能伪装为与高信誉域名通信的技术,多用于木马受控端和控制端之间的隐蔽通信。Blister样本中的一些信标被配置为使用域前置技术,其中涉及到通过内容交付网络(CDN)或其他中间服务器路由恶意流量,使流量看起来像是流向合法或良性的域,而实际上,它是在与恶意C2服务器通信。

某些信标会将fastly[.]net的子域名作为其C2服务器,例如backend.int.global.prod.fastly[.]net或python.docs.global.prod.fastly[.]net。但是,它们实际连接的是admin.reddit[.]com或admin.wikihow[.]com,这两个域名则是托管在CDN上的合法域名。

经过混淆的Shellcode

在我们观察到的5个样本中,Blister会通过加载经过混淆的Shellcode来投放Cobalt Strike。通过回溯VirusTotal并深入分析,我们得到了下列Shellcode执行流:

640.jpg

Shellcode相对比较简单,其入口点位于缓冲区的开头部分,缓冲区则负责调用解码存根,这个调用指令会自动将下一条指令的地址推送到堆栈上,解码存根将其用作开始改变内存的起点:

640.jpg

在解码存根的末尾,它要么跳转,要么回调,然后调用解密函数。该解密函数使用RC4,但S-Box已经初始化,因此没有实现密钥调度算法。最后,它会跳转到最后一个Payload。

环境属性

从2022年更新以来,Blister引入了一个可选的域名哈希属性,它可以计算目标设备的DNS搜索域名(ComputerNameDnsDomain)。只有当计算出来的哈希与配置的域名哈希属性相匹配的时候,恶意软件才会继续执行。

第一阶段的混淆处理

引入了混淆处理后,攻击者注入了大量的垃圾指令和垃圾数据,Blister的检测将会更加困难。下图显示的是我们近期捕捉到的Blister样本的两个加载器组件代码,一个经过了混淆(右),另一个则是没混淆后的版本(左):

640.jpg

Mythic代理投放

Blister投放的Mythic代理几乎都是类似的,但我们目前还无法将其与其他公共代理进行关联。这可能意味着,Blister的开发人员创建了他们自己的Mythic代理。

所有的Mythic代理都使用了相同的结构,并在可执行程序的.bss字段中使用了加密配置。代理有自己的加密配置,并会通过XORing进行解密,下图显示的是BlisterMythic配置解密代码:

640.jpg

解密后的BlisterMythic配置如下:

640.jpg

总结

在这篇文章中,我们对近期捕捉到的Blister样本进行了深入的技术分析,并提供了相关的Yara规则和IoC来辅助广大研究人员对Blister进行检测。

THEEND

最新评论(评论仅代表用户观点)

更多
暂无评论