freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

深度分析GuLoader和RedLine Stealer采用的反分析技术
2024-01-12 13:08:41

写在前面的话

与很多复杂的软件系统一样,许多恶意软件都采用并依赖“软件配置”这一概念。这种软件配置可以为恶意软件行为建立一个指导方针,并且也成为了安全研究人员检查各种恶意软件家族并分析共同特征的一个主要方面。恶意软件中嵌入的配置数据可以为研究人员了解网络犯罪分子的意图提供宝贵的见解,因此很多恶意行为者也会通过混淆处理或加密等方式来增加配置数据解析的难度。

在这篇文章中,我们将介绍并详细分析GuLoader和RedLine Stealer这两款恶意软件所采用的配置保护技术和反分析技术。

GuLoader技术分析

从研究人员的分析来看,GuLoader的开发人员尽其所能地去对他们的C2配置进行了混淆处理,下图显示的是GuLoader混淆技术演变进化的时间表:

这种技术上的进化和演变导致我们之前提取GuLoader 恶意软件配置的方法已经不再有效了,他们所采用的新技术包括了密文分割和控制流混淆等等。

密文分割

我们在下图的顶部部分,将 GuLoader 之前存储加密配置数据(密文)的方法标记为“旧方法”。在这种旧方法中,密文被存储为连续的字节序列:

在上图的下半部分中,我们将新方法标记为 GuLoader 的“新方法”,其中密文是根据函数计算的。在这个函数中,密文首先被分割成一个4字节的DWORD,而每个DWORD均使用随机数学运算单独进行加密。

比如说,要从GuLoader的新方法中检索密文的第一个DWORD,我们必须执行下图所示的数学运算:

为了从这个新方法中获取完整的密文,我们对每个单独的DWORD执行一系列类似于上图所示方法的操作。之后,我们就可以将这些DWORD值连接在一起并得到完整的密文。

控制流混淆

2023 年初,研究人员曾发现过一个起初VirusTotal (VT) 检测为零的GuLoader样本。使用Hex-Rays IDA Pro对该恶意软件样本进行反汇编和审计分析之后,我们发现了攻击者试图阻止研究人员执行进一步分析的指令,这些反分析指令的主要目的就是触发EXCEPTION_BREAKPOINT、EXCEPTION_ACCESS_VIOLATION和EXCEPTION_SINGLE_STEP异常。

下图显示了GuLoader实现上述反分析指令的技术方法:

上图所示的反分析指令会导致我们之前开发的IDA处理器模块扩展的解决方案失效,考虑到Intel x86 CPU指令长度的可变性,我们无法检测到触发EXCEPTION_ACCESS_VIOLATION和EXCEPTION_SINGLE_STEP异常的庞大指令组合。

由于我们之前的解决方案不再有效,我们不得不手动分析代码来找到这些反分析指令并绕过它们来提取配置,具体方法可以参考【Virus Bulletin白皮书】。

RedLine Stealer技术分析

在我们的分析演示中,使用的RedLine Stealer样本SHA256哈希为“a4cf69f849e9ea0ab4eba1cdc1ef2a973591bc7bb55901fdbceb412fb1147ef9”,在MSIL反编译工具dnSpy的帮助下,我们快速识别了该RedLine Stealer样本的配置数据:

我们使用Python开发了一个解密程序,如下图所示,可以成功地使用样本密文和密钥完成解密:

接下来,我们找到配置数据并在Python脚本中准备好解密函数。但是在解密数据之前,我们必须手动从dnSpy生成的反编译结果中获取密文和密钥。

下图中显示了dnSpy生成的令牌号为0x04000013以及静态IP地址字符串:

在IDA Pro中打开RedLine Stealer样本并导航到相同的函数后,我们可以看到ldstr命令会为所在位置为seg000:29F1、seg000:29FB、seg000:2A05和seg000:2A0F的元数据字符串推送对象引用。

这些元数据字符串分别由位于seg000:29F6、seg000:2A00、seg000:2A0A和seg000:2A14的指令进行设置。其中的stsfld指令负责拿计算堆栈中的值替换静态字段的值,每个字段的计算堆栈值如下图中的红色框框所示:

前文给出的静态IP地址字符串还不足以帮助我们静态提取配置数据,而且也无法确定被压入栈中的IP字段字符串来源。根据微软的说法,上图所示的指令ldstr操作数类型是字符串令牌,而字符串令牌存储在#US(User-Stream)表中。

为了查找字符串令牌,我们使用了一个名为dnfile的开源库,它类似于.NET版本的PEfile。dnfile允许我们通过提供.NET运行时标识符(RID)轻松访问#US令牌。除此之外,dnfile还提供了用于访问用户流等内容的接口。

下图所示的Python实现显示了研究人员如何通过偏移量来访问用户流数据,一旦我们通过令牌获得了用户流数据,我们就将用户字符串传递到解密程序中,并拿到返回的解密配置信息:

总结

通过深入研究GuLoader和RedLine Stealer所使用的反分析方法,我们阐明了从各种恶意软件家族中定位和提取C2配置的过程。通过分析这些恶意软件配置,我们可以更好地检测、分析和开发针对恶意软件的有效解决方案,并有效保护数字资产的安全。

入侵威胁指标IoC

本文分析的GuLoader样本SHA256哈希

32ea41ff050f09d0b92967588a131e0a170cb46baf7ee58d03277d09336f89d9

本文分析的RedLine Stealer样本SHA256哈希

a4cf69f849e9ea0ab4eba1cdc1ef2a973591bc7bb55901fdbceb412fb1147ef9

参考资料

https://en.wikipedia.org/wiki/Cryptographic_splitting

https://www.zimperium.com/glossary/control-flow-obfuscation/

https://www.lenovo.com/us/en/glossary/what-is-a-dword/

https://www.virustotal.com/gui/file/beda408709feea7d2023f328e9c97bf4d090bcfb3948fc4e4d9c5c580d8f5858

https://unit42.paloaltonetworks.com/guloader-variant-anti-analysis/

https://www.virusbulletin.com/uploads/pdf/conference/vb2023/papers/Teasing-the-secrets-from-threat-actors-malware-configuration-extractors.pdf

https://github.com/dnSpy/dnSpy

https://learn.microsoft.com/en-us/dotnet/api/system.reflection.emit.opcodes.ldstr?view=net-7.0

https://github.com/malwarefrank/dnfile

https://github.com/erocarrera/pefile

https://learn.microsoft.com/en-us/dotnet/core/rid-catalog

参考链接

https://unit42.paloaltonetworks.com/malware-configuration-extraction-techniques-guloader-redline-stealer/

# 恶意软件分析 # 加密 # 混淆 # 混淆技术 # 反分析
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录