每个恶意软件样本文件中的配置信息,都可能是反映攻击者攻击意图的“金矿“。但恶意软件的配置信息通常很难从文件中静态提取,攻击者也知道这些信息的价值。在开发恶意软件时,就为这些信息提供了防护。
恶意软件与大多数软件系统相似,也会存在代码重用和功能抽象。因此,恶意软件的配置信息在各种恶意软件家族中也普遍存在。毕竟,通常来说网络犯罪分子在攻击不同目标时不会为了更改IP地址或其他信息就重新编译所有代码。但好消息是静态难以提取的配置信息通常可以很容易地从内存中进行提取,本文将以IcedID为例介绍如何提取配置信息。
恶意软件配置信息
根据软件的定义,配置系统行为方式的信息即为配置信息。例如定义防火墙允许哪些网络路由的规则、Web浏览器使用的字体大小,均可视为配置信息。对恶意软件来说,也是类似的。恶意软件的配置信息是定义恶意软件如何运行的信息,例如:
- C&C服务器地址
- 远程访问的密码
- 释放文件的路径
配置信息嵌入恶意软件中的方式因恶意软件家族而异,并且随着恶意软件的发展也会随之更新。恶意软件的配置信息对安全研究人员来说极具情报价值,因为其可以提供对恶意软件在一段时间内攻击活动的洞察。在某些情况下,也可以将其用作恶意行为检测或实现主机识别的特征。
由于恶意软件配置信息对防御来说极具价值,恶意软件开发者也会使用不同的技术来保护配置信息。例如加密、混淆、压缩,以及多种技术的融合。这些保护措施对通过静态分析提取恶意软件配置信息产生了重大挑战,在提取配置信息前必须检测并绕过这些保护技术是十分困难的。将动态分析沙盒与运行时内存分析相结合,可以绕过许多保护技术并成功提取配置信息。
DC3-MWCP 为常见的配置项定义了一个数据结构,并提供了用于将配置信息序列化为JSON格式的程序库。MITRE MAEC 与 STIX 还额外提供了表示恶意软件配置信息的通用词汇表,这也为数据标准化与自动化提供了极大的帮助。
IcedID 技术分析
2022 年 11 月上旬发现的攻击链如下所示,IcedID 作为最终投递的 Payload。
感染链
IcedID 的开发者费尽心机地隐藏了配置信息,后续样本文件只有在失陷主机满足条件要求时才会被下载。IcedID 的配置信息由 C&C 的 URL 与活动 ID 组成,URL 会包含在执行期间可能不会表现出的行为,活动 ID 会将样本文件与特定攻击者关联起来。
可以通过以下步骤提取 IcedID 第一阶段和第二阶段二进制文件中的配置:
- 脱壳 IcedID 文件
- 确定加密配置数据块位置
- 提取加密密钥
- 使用加密密钥解密配置数据
脱壳第一阶段 IcedID 文件
IcedID 第一阶段首先使用 VirtualAlloc 函数分配内存来进行脱壳,随后使用 Memset 函数清空内存区,最后使用 Memmove 函数将脱壳的数据复制到分配的内存区。如下所示,十六进制数据的右侧存在第一阶段的 PE 文件头。
IcedID 第一阶段
确定加密配置数据块位置
使用脱壳后的第一阶段 IcedID 确定加密配置数据块,如下所示,寄存器 RDI 指向的地址就包含 C&C URL 的字符串。
C&C URL
通过代码回溯,可以发现一个解密配置信息的函数,如下所示:
解密配置信息
解密配置信息的循环如下所示:
解密配置信息
0x7FEF33339CD 处的指令会将加密配置数据块的地址加载到寄存器 RDX 中。
提取加密密钥
0x7FEF33339D4 处的指令读取加密密钥,从 Encrypted_Config 的地址偏移 0x40 字节。配置信息的长度为 0x20 字节,并且使用异或加密。
使用加密密钥解密配置数据
得到加密密钥、加密数据块与解密方式后,就可以使用如下所示的脚本解密配置信息:
解密脚本
解密的配置信息格式如下所示,从中可以提取 C&C 地址与活动 ID:
解密配置信息
脱壳第二阶段 IcedID 文件
第二阶段与第一阶段的文件相同,不再重复脱壳的步骤。
确定加密配置数据块位置
在调用 Winhttpconnect 处设置断点,如下所示:
调试过程
代码跟踪可以找到解密配置信息的函数,如下所示:
解密配置信息
提取加密密钥
进一步找到解密配置信息的函数,前几条指令定位加密配置信息块。加密信息块长度为 0x25c 字节,加密密钥是加密配置块中最后 0x10 字节,如下所示:
加密密钥
确定加密密钥后就是对加密数据块的循环解密,如下所示:
配置信息循环解密
使用加密密钥解密配置数据
类似的,也可以使用如下脚本对配置信息进行解密:
配置解密脚本
解密的 IcedID 二阶段配置信息格式如下所示:
配置信息格式
处理大量样本
在运行时内存分析的过程中进行配置信息的提取,典型的过程如下所示:
- 扫描内存
- 过滤噪音以确定最佳匹配对象
- 使用最佳匹配对象提取配置信息
整个流程提供了改进的机会:
- 通过优化搜索确保大多数情况下只需要一次扫描
- 为常见任务进行代码抽象与代码复用
- 控制有问题的输入或者其他错误的影响
- 使安全研究人员了解模块的性能
从大量样本中提取的 IcedID 相关的 IOC 指标如下所示,自动化完成后就可以等待信息持续入库。
样本的 IOC
结论
针对不同恶意软件家族的逆向工程分析,都可以帮助分析人员构建解析脚本,来对大量样本提取相关数据。
IOC
05a3a84096bcdc2a5cf87d07ede96aff7fd5037679f9585fee9a227c0d9cbf51
newscommercde[.]com
spkdeutshnewsupp[.]com
germanysupportspk[.]com
nrwmarkettoys[.]com
bayernbadabum[.]com