Ghostwriter攻击活动中的加密通信
作者: 日期:2022年04月20日 阅:4,121

一、背景

今年2月份,俄乌冲突爆发后,在物理战场之外,以俄乌为主的多方势力在网络空间也展开了激烈较量。3月初,在社交平台上,研究人员公开了一个针对乌克兰的攻击样本(MD5:2556A9E1D5E9874171F51620E5C5E09A)。随后,乌克兰CERT也发布通告,将该攻击样本归属于APT组织UNC1151,该组织疑似隶属于某东欧国家。

UNC1151组织是“Ghostwriter”活动背后的攻击者,该活动的重点攻击目标是乌克兰、立陶宛、拉脱维亚、波兰和德国的政府和私营部门实体,以及白俄罗斯持不同政见者、媒体实体和记者。“Ghostwriter”活动中,UNC1151使用高度针对性的鱼叉式网络钓鱼发起攻击,并使用看似合法的域名作为C2服务器。此次攻击中,攻击者通过邮件下发了一个Dropper,Dropper经过一系列释放过程后执行开源后门MicroBackdoor,该后门使用RSA+RC4混合加密方式和C2服务器进行通信。

二、样本下发

攻击者通过钓鱼邮件下发CHM格式的攻击文件,CHM文件是微软推出的基于HTML文件特性的帮助文件系统,双击攻击文件,会默认用Windows自带的hh.exe程序打开并执行内置的HTML代码。其中HTML代码分为JavaScript、vbs两部分,其中JavaScript负责展示诱饵图片,如下图所示:

图 1 样本诱饵图片

Vbs代码则会释放一些系列文件来执行攻击,具体流程如下:

  1. CHM攻击文件释放“ignit.vbs”样本和“desktop.ini”样本;
  2. “ignit.vbs”样本释放三个文件:“core.dll”、“Windows Prefetch.lnk”、“desktop.ini”;
  3. “Windows Prefetch.lnk”被释放到启动目录下,用于实现持久化;
  4. “desktop.ini”调用“C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe”加载“core.dll”;
  5. “core.dll”文件执行后会再次释放一个DLL文件,该DLL文件是开源的后门程序MicroBackdoor。
  6. 通过后门程序MicroBackdoor和固定的域名“xbeta.online”、端口“8443”的C2服务器建立连接,期间会释放一个临时RSA证书文件“C:\Users\xxx\AppData\Local\Temp\Tmpxxxx.tmp”,用于后续加密通信使用。

图 2 下发流程

三、加密通信流程分析

此次攻击的通信过程通过开源后门MicroBackdoor实现,样本内部存放了固定的域名“xbeta.online”和端口“8443”,客户端解析域名得到IP后根据IP、端口和C2服务器建立连接。通信过程使用的是TCP协议,使用RSA身份验证加密协商产生RC4随机会话密钥用于实际的数据加密通信。

整个通信过程分为两个阶段,第一阶段是验证过程,由客户端发起验证请求,和服务端进行身份验证并完成密钥的协商。第二阶段是命令交互阶段,客户端通过select函数持续等待服务端命令下发,收到命令后解密并执行。

图 3 客户端通信

3.1 验证阶段

  1. 客户端根据IP和端口创建套接字并连接,准备向服务端进行验证通信。

图 4 发起TCP连接

  • 由客户端先向服务器发出验证请求包,其中包含三个内容:客户端版本信息、RSA证书的SHA1摘要以及随机生成的RC4密钥。

图 5 验证请求包结构

客户端版本信息由客户端决定,为固定值;SHA1摘要是从RSA证书获取的中,该证书由服务器生成并内嵌在客户端中;RC4密钥会在每次会话随机生成,长度为128位。

图 6 构造验证请求

根据证书获取RSA公钥,然后将上述内容用零补齐到和RSA公钥相同长度(256字节),使用RSA公钥加密后作为验证请求包发送给服务端。

图 7 加密并发送验证请求

  • 服务端接收到验证请求包后,用RSA私钥进行解密,解密后会验证客户端版本和RSA证书的SHA1摘要是否正确。验证通过后,保存RC4密钥并计算RC4密钥的MD5值发送给客户端作为响应包。

图 8 服务端验证客户端

  • 客户端收到响应包后,计算RC4密钥的MD5值并和响应包的内容进行验证,验证通过后则验证通信阶段完毕,等待服务端下发命令。

图 9 客户端验证服务端

3.2 命令交互阶段

通信双方验证无误后,后续通信中全部使用协商好的RC4密钥进行加密。客户端通过select函数持续等待服务端命令。收到服务端发出的命令后,客户端使用RC4密钥进行解密,解析并识别命令,然后执行。执行后将结果上传给服务端时,也会使用RC4密钥加密后发送。

图 10 接收命令并解密

下图为MicroBackdoor支持的命令,包括获取本机信息,执行程序,反弹shell,上传下载文件等常规远控功能。

图 11 命令列表

3.3 流量数据分析

本次分析的样本未获取到实际的C2服务端私钥,不能进行数据的解密。

图 12 实际加密攻击流量

我们通过模拟木马通信过程,从中得到的流量各阶段数据如下。

在验证阶段虽然数据都进行了加密,但是流量长度固定,客户端发起的验证请求包为256字节(RSA公钥长度),服务端返回的响应包长度为16字节(MD5长度)。

图 13 实验验证交互数据

在命令交互阶段,由于命令长度不固定,且数据全部使用了RC4加密,所以无法获取有效特征。只有获取到服务端的RSA私钥后,才能对数据进行解密。

图 14 实验命令执行数据

下图为服务端的RSA私钥文件和证书,RSA私钥文件和证书由攻击者自己生成。

图 15 实验服务端上的公私密钥

   依据证书中的公钥和私钥文件可以对加密数据进行解密。先使用上图RSA私钥对验证请求包的载荷进行解密,解密后输入如下。

图 16 验证请求包解密

字段
客户端版本02 00 00 00
RSA证书的SHA1摘要55 0F 62 B5 50 A5 D0 4F D1 A6 8D 76 38 4B 5D CB 10 E7 EF E5
RC4密钥F6 95 3D 90 CE E9 6A 98 7F 50 F3 6B A3 1D 2D A8

使用解密后获取的RC4密钥对后续的命令交互过程进行解密,解密后可以发现命令为“id”。

图 17 实验命令解密

图 18 解密命令为“id”

四、分析小结

此次攻击采用TCP自定义加密通信,使用RSA身份验证加密协商产生RC4随机会话密钥用于实际的数据加密通信,全程加密通信。攻击产生的流量中,验证阶段有明显的流量长度特征,验证请求包和响应包为固定长度。从加密机制来看,获取到服务端私钥才能将流量进行解密。

同时,我们也可以看到越来越多的APT组织频繁利用TCP、UDP、HTTP等传输层和应用层协议进行自定义加密方式传输。除常规标准加密协议外,这一新趋势给流量检测也带来了新的更高挑战。

申明:本文系厂商投稿收录,所涉观点不代表安全牛立场!


相关文章