解析 IcedID 的配置信息

文章介绍了恶意软件的配置信息的重要性,特别是对于攻击意图的揭示。尽管静态分析面临加密、混淆等防护技术的挑战,但通过动态分析和内存提取,如在IcedID案例中,可以有效地获取这些信息。文章详细描述了从IcedID样本中提取配置信息的步骤,包括脱壳、解密和利用运行时内存分析的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每个恶意软件样本文件中的配置信息,都可能是反映攻击者攻击意图的“金矿“。但恶意软件的配置信息通常很难从文件中静态提取,攻击者也知道这些信息的价值。在开发恶意软件时,就为这些信息提供了防护。

恶意软件与大多数软件系统相似,也会存在代码重用和功能抽象。因此,恶意软件的配置信息在各种恶意软件家族中也普遍存在。毕竟,通常来说网络犯罪分子在攻击不同目标时不会为了更改IP地址或其他信息就重新编译所有代码。但好消息是静态难以提取的配置信息通常可以很容易地从内存中进行提取,本文将以IcedID为例介绍如何提取配置信息。

恶意软件配置信息

根据软件的定义,配置系统行为方式的信息即为配置信息。例如定义防火墙允许哪些网络路由的规则、Web浏览器使用的字体大小,均可视为配置信息。对恶意软件来说,也是类似的。恶意软件的配置信息是定义恶意软件如何运行的信息,例如:* C&C服务器地址* 远程访问的密码* 释放文件的路径

配置信息嵌入恶意软件中的方式因恶意软件家族而异,并且随着恶意软件的发展也会随之更新。恶意软件的配置信息对安全研究人员来说极具情报价值,因为其可以提供对恶意软件在一段时间内攻击活动的洞察。在某些情况下,也可以将其用作恶意行为检测或实现主机识别的特征。

由于恶意软件配置信息对防御来说极具价值,恶意软件开发者也会使用不同的技术来保护配置信息。例如加密、混淆、压缩,以及多种技术的融合。这些保护措施对通过静态分析提取恶意软件配置信息产生了重大挑战,在提取配置信息前必须检测并绕过这些保护技术是十分困难的。将动态分析沙盒与运行时内存分析相结合,可以绕过许多保护技术并成功提取配置信息。

DC3-MWCP 为常见的配置项定义了一个数据结构,并提供了用于将配置信息序列化为JSON格式的程序库。MITRE MAEC 与 STIX
还额外提供了表示恶意软件配置信息的通用词汇表,这也为数据标准化与自动化提供了极大的帮助。

IcedID 技术分析

2022 年 11 月上旬发现的攻击链如下所示,IcedID 作为最终投递的 Payload。

image.png-102kB感染链

IcedID 的开发者费尽心机地隐藏了配置信息,后续样本文件只有在失陷主机满足条件要求时才会被下载。IcedID 的配置信息由 C&C 的 URL 与活动
ID 组成,URL 会包含在执行期间可能不会表现出的行为,活动 ID 会将样本文件与特定攻击者关联起来。

可以通过以下步骤提取 IcedID 第一阶段和第二阶段二进制文件中的配置:* 脱壳 IcedID 文件* 确定加密配置数据块位置* 提取加密密钥* 使用加密密钥解密配置数据

脱壳第一阶段 IcedID 文件

IcedID 第一阶段首先使用 VirtualAlloc 函数分配内存来进行脱壳,随后使用 Memset 函数清空内存区,最后使用 Memmove
函数将脱壳的数据复制到分配的内存区。如下所示,十六进制数据的右侧存在第一阶段的 PE 文件头。

image.png-1348.6kBIcedID
第一阶段

确定加密配置数据块位置

使用脱壳后的第一阶段 IcedID 确定加密配置数据块,如下所示,寄存器 RDI 指向的地址就包含 C&C URL 的字符串。

image.png-169.2kBC&C
URL

通过代码回溯,可以发现一个解密配置信息的函数,如下所示:

image.png-188.9kB解密配置信息

解密配置信息的循环如下所示:

image.png-353.6kB解密配置信息

0x7FEF33339CD 处的指令会将加密配置数据块的地址加载到寄存器 RDX 中。

提取加密密钥

0x7FEF33339D4 处的指令读取加密密钥,从 Encrypted_Config 的地址偏移 0x40 字节。配置信息的长度为 0x20
字节,并且使用异或加密。

使用加密密钥解密配置数据

得到加密密钥、加密数据块与解密方式后,就可以使用如下所示的脚本解密配置信息:

image.png-403.6kB解密脚本

解密的配置信息格式如下所示,从中可以提取 C&C 地址与活动 ID:

image.png-44.6kB解密配置信息

脱壳第二阶段 IcedID 文件

第二阶段与第一阶段的文件相同,不再重复脱壳的步骤。

确定加密配置数据块位置

在调用 Winhttpconnect 处设置断点,如下所示:

image.png-324.9kB调试过程

代码跟踪可以找到解密配置信息的函数,如下所示:

image.png-157.4kB解密配置信息

提取加密密钥

进一步找到解密配置信息的函数,前几条指令定位加密配置信息块。加密信息块长度为 0x25c 字节,加密密钥是加密配置块中最后 0x10 字节,如下所示:

image.png-269.6kB加密密钥

确定加密密钥后就是对加密数据块的循环解密,如下所示:

image.png-617.4kB配置信息循环解密

使用加密密钥解密配置数据

类似的,也可以使用如下脚本对配置信息进行解密:

image.png-406.1kB配置解密脚本

解密的 IcedID 二阶段配置信息格式如下所示:

image.png-406.2kB配置信息格式

处理大量样本

在运行时内存分析的过程中进行配置信息的提取,典型的过程如下所示:* 扫描内存* 过滤噪音以确定最佳匹配对象* 使用最佳匹配对象提取配置信息

整个流程提供了改进的机会:* 通过优化搜索确保大多数情况下只需要一次扫描* 为常见任务进行代码抽象与代码复用* 控制有问题的输入或者其他错误的影响* 使安全研究人员了解模块的性能

从大量样本中提取的 IcedID 相关的 IOC 指标如下所示,自动化完成后就可以等待信息持续入库。

image.png-634.2kB样本的
IOC

结论

针对不同恶意软件家族的逆向工程分析,都可以帮助分析人员构建解析脚本,来对大量样本提取相关数据。

最后

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:


当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

因篇幅有限,仅展示部分资料,有需要的小伙伴,可以【扫下方二维码】免费领取:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值