恶意软件是如何使⽤DNS隐蔽信道通信技术实现通信的?

1

概述

近期,我们正在研究DNS隐蔽信道通信技术,找到了⼀个BondUpdater样本,通过对此样本的分析,来了解某些恶意软件是如何使⽤DNS隐蔽信道通信技术实现通信的,从而方便我们研究如何检测此种攻击。

2018年8⽉,Unit42发现OilRig针对中东政府组织使⽤⻥叉式钓⻥邮件,投递了⼀个新版本的BondUpdater。

OilRig是伊朗的APT组织,2016年被Unit42发现,⼀直处于活跃状态,经常对中东地区的政府机构和企业发动网络攻击。2017年11⽉,基于PowerShell的特洛伊⽊⻢——BondUpdater被FireEye⾸次发现,其包含基本的后⻔功能,能够使攻击者上传/下载⽂件,执⾏命令。

与OilRig组织的其它⼯具⼀样,BondUpdater使⽤DNS隧道与C2服务器进⾏通信,新版本的BondUpdater⽊⻢能够在DNS隧道中使⽤TXT记录与C2进⾏通信。

2

样本分析

(2.1)提取关键文件及代码

此样本是⼀个word⽂档,⽤Microsoft Word打开⼀下看看。

可以看到样本中嵌⼊了宏代码,而利⽤word⾃带的宏编辑器是看不到宏代码的。

我们可以通过oledump或者oletools来提取宏代码,我这⾥使⽤oledump。

如图所示,宏代码存在于第7段,我们将其转存为ThisDocument.vb

ThisDocument内容如下:

运⾏宏,⾸先执⾏Document_Open()函数,此函数调⽤AAAA()函数,在AAAA()函数中,调⽤HGHG()函数,分别创建两个⽂件,AppPool.vbs和AppPool.ps1,将宏代码中嵌⼊的vbs代码和powershell代码写⼊这两个⽂件中。

之后通过执⾏

运行AppPool.vbs

我在虚拟机中跑⼀下,将这两个⽂件提取出来。

AppPool.vbs内容如下:

当AppPool.vbs⾸次执⾏时,其创建了⼀个每分钟执⾏的计划任务,使⽊⻢⽂件能够被不断执⾏。

然后通过

运⾏AppPool.ps1

AppPool.vbs后续的执⾏过程中,会判断是否存在"quid"的⽂件,如果存在,就使⽤上述powershell脚本运⾏AppPool.ps1。

AppPool.ps1⾸次运⾏时会创建quid⽂件,以避免创建多个计划任务。

AppPool.ps1内容如下:

此处的AppPool.ps1是经过经过初步处理的,主要的操作都是由此powershell代码实现,通过DNS隐蔽信道与C2进⾏通信的代码也在其中。

(2.2)分析关键代码

AppPool.ps1代码⼤致流程:

2.2.1 创建lock、qiud文件

在⽬录

创建lock、qiud两个⽂件

lock⽂件写⼊的是当前powershell进程的PID号,powershell脚本会检测当前时间和进程启动时间之差是否超过10分钟,如果超过10分钟就会终⽌进程并删除lock⽂件。

quid的内容是由GUID(全局唯⼀标识符)的前⼋个字符和⼀个两位的随机整数组成。

2.2.2 在quid中创建3目录

以quid中的内容为⽂件夹名称在⽬录

创建⽂件夹,还创建了“files”⽂件夹,再在第⼀个⽂件夹中创建三个目录,“sendbox”、“receivebox”、“done”。

sendbox⽤于存储将要发送到C2的⽂件,receivebox⽤于存储从C2接收到的命令⽂件,done也是⽤于存储从C2接收到的⽂件,以便将来使⽤。

2.2.3 发起DNS请求

构造域名,发起包含初始信标的DNS请求,通知C2开始通信

参数中的“M”就是操作的类型,是初始信标,表示开始通信,“r”表示按接收数据的格式⽣成域名。

2.2.4 定期与C2通信

从C2接收命令,将命令写⼊到⽂件,并保存在“receivebox”⽂件夹中。

每隔50毫秒尝试与C2进⾏通信⼀次。

dns_request_TXT()功能为构造DNS请求数据包,发起DNS请求,返回响应包数据。

这⾥的dns_request()函数有两种,分别是发送DNS A记录请求和TXT记录请求,下⾯在分析通信协议的时候会提到。

如果⽊⻢发送的是DNS A记录请求,⽊⻢会从A记录响应包中的address段(ip)提取数据。

如果⽊⻢发送的是DNS TXT记录请求,⽊⻢会从DNS TXT记录响应包中的TXT段(存储数据)提取数据。

C2传输数据到⽊⻢总共有两种传输⽅式,⼀是通过域名响应ip进⾏传输,这种是通过发送A记录请求,另⼀种是通过TXT记录进⾏传输。

上⾯图⽚中的代码是对DNS TXT记录响应包进⾏处理的过程。

⽊⻢会将接收到的TXT数据以“>”分开,左边的作为指令,右边的作为数据。左边的指令决定⽊⻢将会如何处理右边的数据,具体的处理规则会在下⼀节进⾏描述。

从响应包中解析出的指令和数据,会以⽂件的形式存储在receivebox⽂件夹下,以待后续处理。

2.2.5 命令解析

对接收到的命令进⾏解析,执⾏命令,然后将结果写⼊⽂件,保存在“sendbox”⽂件夹下,以待后续发往C2。

⽆论是通过A记录进⾏接收的数据,还是通过TXT记录接收的数据,都以⽂件的形式保存在receivebox⽂件夹下,⽂件名以“rcvd”开头。

并且使⽤相同的⽂件处理程序,⽂件处理程序根据⽂件名的最后⼀个字符,决定怎么处理以此⽂件名为名字的⽂件的内容。

2.2.6 命令结果回传

将命令执⾏结果结果传回C2服务器。

"s"是以发送数据的格式⽣成域名,⽂件的名称和内容是通过域名来进⾏传送的,$SSE代表数据块,$TTE代表⽂件名。

下节中的数据格式的介绍中会具体提到这些参数。

(2.3)通信协议分析

2.3.1 数据格式

发送数据格式:

CT...

接收数据格式:

CT.

分⽚号偏移和操作类型偏移都是相对GUID前8字符和随机2位整数组成的字符串的。

接收数据格式的第⼀部分包含分⽚号、操作类型、GUID前8字符、随机⼆位整数的字符串。⽊⻢⾸先⽣成GUID号,然后取GUID号的前8位与⼀个2位随机整数相连接形成基础字符串,最后将分⽚号和操作类型随机插⼊基础字符串。

第⼆部分是1~7位的随机字符串。

第三部分就是C和T以及中间的两个数字,第⼀个数字为操作类型在基础字符串中的偏移,第⼆个数字为分⽚号在基础字符串中的偏移。

第四部分就是C2域名,发送数据格式和接收数据格式的区别就是多了数据块和⽂件名。

2.3.2 DNS请求中包含的操作类型

将此操作类型包含在⽣成的⼦域名中,可以通知C2在响应数据包中使⽤那种数据格式。

例如:如果操作类型是“W”,C2会发送响应包的TXT段以“S000s”为开头的数据,发送的数据会作为⽂件名。

如果操作类型是“0”,C2会将域名响应ip置为“24.125.[\d].[\d]”,使⽊⻢将ip地址的后两段作为⽂件名进⾏接收。powershell代码中写了两种记录的DNS请求⽅法。如下图所示:

A记录请求:

TXT记录请求:

2.3.3 文件名末尾字符含义

因为⽊⻢从C2接收的数据都是以⽂件的形式存储在“receivebox”⽂件夹下的,所以当⽊⻢从C2接收完所有的数据后,会执⾏⽂件处理程序。⽂件处理程序会根据以上协议对接收到的数据进⾏处理。

2.3.4 原始数据传输过程中的域名解析IP 地址及含义

原始数据传输就是通过A记录传输的,数据是放在DNS响应包的address段的ip地址中的。

⽊⻢发送包含“0”操作类型的DNS请求,C2就会将响应ip地址设为形如“24.125.[\d].[\d]”的地址,并将⽂件名填充在⾥⾯。

⽊⻢接收到数据会将其与“rcvd”连接在⼀起,作为⽂件名,并修改操作类型为“1”。然后⽊⻢开始发送包含“1”操作类型的DNS请求,C2就会将响应ip设为形如“[\d].[\d].[\d].[\d]”的地址,并将数据填充在⾥⾯。

如果数据发送完了,C2就会将响应ip地址设为形如“1.2.3.[\d]”形式的地址。⽊⻢接收到后就会将数据存在以前⾯接收到的⽂件名为名的⽂件中,并保存在“reveiveboc”⽂件夹下。

2.3.5 其他域名解析地址含义

这些IP地址是整个通信过程中除去原始数据传输过程中的域名解析IP地址以外的IP地址。“99.250.250.199”⽤于表示⽊⻢想要与C2开始通信。

因为有些数据⽐较⻓,所以会分⽚进⾏传输,“[quid.substring.(0,2)].2.3.[\d]”的最后⼀段表示⽬前传输的分⽚号,⽤于判断数据是否完整传输完成。

当⽂件的字节数⼤于60字节,就需要多次传输,⽊⻢被我设置了数据传输⻓度的阈值为60。

2.3.6 新数据传输协议指令含义

新数据传输协议就是通过TXT记录进⾏传输数据。当⽊⻢发送操作类型为“W”的TXT记录DNS请求,C2就会回复⼀个包含TXT数据的响应包,响应包中的TXT字段存储了C2发给⽊⻢的数据,数据以“>”号分隔开来。

如果“>”左边的字符串为“S000s”,⽊⻢就将“>”右边的数据与“rcvd”连接,作为将要存储数据的⽂件的⽂件名,然后将操作类型置为“D”。

然后发送包含操作类型“D”的TXT记录请求,C2会回复TXT数据中“>”左边为“S”的响应包,⽊⻢会将“>”右边的数据进⾏base64解码,并将下⼀次请求的操作类型置为“D”。

再发送包含操作类型“D”的TXT记录请求,直到数据发送完成,然后C2会回复TXT数据中“>”左边为“E”的响应包,⽊⻢会将base64解码后得到的数据写⼊执⾏“S000s”指令后⽣成的⽂件名的⽂件中,然后跳出循环。

3

总结

通过对此样本的分析,我们得出⼀些DNS隐蔽隧道通信的特征、方式和通信所使⽤的协议,方便后期对容易软件的类别分析。

C2和受控主机对对彼此之间传输的数据进⾏解析,形成有⼀套通信协议。数据如果通过A记录传送,就存在于域名中(受控主机向C2发送数据)或者域名解析IP中(C2向受控主机发送数据);如果通过TXT记录传送,就存在于响应包中的TXT字段中。

⽬前很多APT攻击和恶意软件使⽤DNS隐蔽信道进⾏通信,所以对DNS隐蔽信道通信进⾏检测是⼀件很有意义的事情。

本文转自公众号“安恒风暴中心”

- End -

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190903A0349M00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券