概述
近期,国外安全厂商卡巴斯基披露了Lazarus组织的一个多平台恶意软件框架 – MATA。该框架拥有多个组件,包括加载器(Loader)、调度器(Dispatcher)和插件(Plugins)。可针对Windows,Linux,MacOS三平台开展攻击。同时卡巴斯基还发现Lazarus组织利用MATA框架对受害者分发了VHD勒索软件。
奇安信威胁情报中心安全研究员对Windows平台的MATA框架(加载器和调度器)进行了详细分析,整理了该框架所用到的加解密算法以及其通信的协议和过程,并利用Golang模拟了部分通信控制指令。
样本分析
加载器(Loader)
MD5 | e58cfbc6e0602681ff1841afadad4cc6 |
时间戳 | 2018:05:02 09:40:50+02:00 |
功能 | 内存解密加载可执行文件 |
该模块主要功能为从硬编码的数据中解密出PE文件的路径,然后内存加载并执行该PE
模块中API函数均采用加密处理,使用时利用ROR13算法解密API执行
经分析发现,MATA框架各模块均采用相同的解密算法(用于解密配置文件以及PE文件),解密算法需要两个密钥,16字节AES密钥和16字节异或密钥。解密前将密文分组,16字节一组。解密时除第一组外,其余每一组密文先通过AES-ECB解密,然后异或上一组密文,而第一组密文通过AES-ECB解密后异或传入的16字节异或密钥。解密流程如图所示
Python还原效果如下
同时,根据解密算法能推导出攻击者进行加密时的加密算法,加密同样需要两个密钥,16字节AES密钥和16字节异或密钥。加密前将明文分组,16字节一组。加密时除第一组外,其余每一组明文异或上一组明文加密后的结果,然后通过AES-ECB加密,而第一组明文异或传入的16字节异或密钥后通过AES-ECB加密。
Python还原加密算法如下:
Loader中也同样了利用了此解密算法,首先通过硬编码的数据解出配置文件路径
之后读取配置文件内容并通过相同的解密算法进行解密
PE文件数据解密完成后映射其节区,填充IAT,修复重定位,然后跳转到PE入口点开始执行。
调度器(Dispatcher)
MD5 | 6a066cf853fe51e3398ef773d016a4a8 |
时间戳 | 2018:02:10 02:39:49+01:00 |
主要功能 | 接收CC服务器的指令并执行对应的操作。 |
该模块运行后首先进行配置解密操作,判断特定的注册表键是否存在,例如:Software\Microsoft\MktNet,若该键存在则读取值部分,该值通过AES+XOR解密后得到CC服务器的配置信息。若该键不存在则通过AES+XOR解密硬编码的CC服务器配置信息,并生成一个随机数ID唯一标识当前客户端,再把ClientID和CC配置信息通过AES+XOR加密后写入到特定的注册表键中。
配置信息解密后,由配置信息0xC字段指明当前机器是否额外的作为服务端,若0xC字段不为0,则当前机器额外充当TLS服务端接收请求。
如果CC配置信息中的IP地址不为空,则向指定的IP地址发起TCP连接,然后建立TLS加密通信隧道,其中TLS协议的实现借助了OpenSSL。
当客户端与CC服务端连接并相互认证后,客户端会生成随机长度的随机RC4密钥,并发送给服务端,之后的所有通信数据都会经过该RC4密钥加密。
RC4密钥生成后,服务端便可以下发不同控制指令(指令数据通过RC4加密),控制客户端执行对应的操作。
客户端和CC服务器通过TLS协议传输数据,双方通过特定的消息码进行双向认证,认证成功后客户端便会生成随机的RC4密钥上传给服务器。客户端上传密钥后开始等待服务端下发的控制指令,而服务端得到RC4密钥便可以发送加密后的控制指令,控制指令12字节,前4字节为消息码,后8字节为附加消息。
为了便于调试分析功能,同时验证分析通信过程的真实性,奇安信威胁情报中心安全研究员利用Golang编写了一个简易的控制端,构造了部分功能指令
模拟获取CC配置信息指令如下
通过调试分析,获得了以下的控制指令及其含义:
指令 | 功能 |
0x601 | 获取客户端注册表中的CC配置信息 |
0x602 | 修改客户端注册表中的CC配置信息 |
0x700 | 获取客户端主机信息,包括系统版本、用户名、IP地址等 |
0x701 | 发送客户端随机数ID,框架版本号等 |
0x500 | 删除注册表配置信息并关闭当前连接 |
0x400 | 关闭当前连接,延时等待新的会话 |
0x0 | 服务端发送域名信息、PE路径或PE数据,客户端根据不同的头标识执行不同的操作,例如:与接收的域名通信(HTTP或HTTPS)、加载执行指定的PE文件等 |
0x10??? | 与0x0消息码相互配合,0x0消息码的附加数据会指明将下发的指令和数据存储到客户端的哪片内存区域,而0x10???消息码会从指定的内存区域读取数据,具体位置由消息码的后12bit决定。当成功读取到数据后也会根据标识头决定与接收的域名通信还是执行PE文件 |
other | 除此之外,某些其它的消息码也可能会触发默认行为,服务端传输PE文件的路径给客户端,客户端将指定路径的PE加载执行 |
当客户端上传大量数据前,会把即将发送的数据的长度和状态码先发送给服务端,以便服务端可以完整接收数据,其中状态码0x20500表示SUCCESS状态,0x20600表示ERROR状态。
总结
目前,基于奇安信威胁情报中心的威胁情报数据的全线产品,包括奇安信威胁情报平台(TIP)、天擎、天眼高级威胁检测系统、奇安信NGSOC、奇安信态势感知等,都已经支持对此类攻击的精确检测。
参考链接
https://securelist.com/mata-multi-platform-targeted-malware-framework/97746/
声明:本文来自奇安信威胁情报中心,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。