背景

2019年1月9日,360威胁情报中心捕获到多个专门为阿拉伯语使用者设计的诱饵文档。钓鱼文档为携带恶意宏的Office Excel文档,恶意宏代码最终会释放执行一个C#编写的后门程序,该后门程序利用了复杂的DNS隧道技术与C2进行通信并执行指令,且通过GoogleDrive API实现文件的上传下载。

360威胁情报中心经过溯源和关联后确认,这是DarkHydrus APT组织针对中东地区的又一次定向攻击行动。DarkHydrus APT组织是Palo Alto在2018年7月首次公开披露的针对中东地区政府机构进行定向攻击的APT团伙[1]。而在此之前,360威胁情报中心曾发现并公开过该组织使用SettingContent-ms文件任意代码执行漏洞(CVE-2018-8414)进行在野攻击的样本,并进行了详细分析[2]。

 

时间线

与DarkHydrus APT组织相关的时间线如下:

根据社交网络的反馈,对此团伙卡巴斯基内部的跟踪代号为:LazyMeerka。[4]

样本分析

Dropper(Macros)

MD5 5c3f96ade0ea67eef9d25161c64e6f3e
文件名 الفهارس.xlsm(indexes. xlsm)

 

MD5 8dc9f5450402ae799f5f8afd5c0a8352
文件名 الاطلاع.xlsm(viewing. xlsm)

以下分析均以MD5:5c3f96ade0ea67eef9d25161c64e6f3e的样本为例,诱饵文档是一个Office Excel文档,名为الفهارس.xlsm(指标.xlsm)。其内嵌VBA宏,当受害者打开文档并启用宏后,将自动执行恶意宏代码。

该恶意宏代码的功能为释放WINDOWSTEMP.ps1和12-B-366.txt文件到%TEMP%目录,最后使用regsvr32.exe启动12-B-366.txt文件:

实际上12-B-366.txt是一个HTA(HTML应用程序)文件,该文件用于启动释放出来的PowerShell脚本:%TEMP%\\ WINDOWSTEMP.ps1

WINDOWSTEMP.ps1脚本内容如下,该PowerShell脚本使用Base64和gzip解码和解压缩脚本里的content,然后写入到文件:%TEMP%\\OfficeUpdateService.exe,最后运行%TEMP%\\OfficeUpdateService.exe:

Backdoor(OfficeUpdateService.exe)

MD5 b108412f1cdc0602d82d3e6b318dc634
文件名 OfficeUpdateService.exe
PDB路径 C:\Users\william\Documents\Visual Studio 2015\Projects\DNSProject\DNSProject\obj\Release\DNSProject.pdb
编译信息 Jan 08 14:26:53 2019  Microsoft Visual C# v7.0 / Basic .NET (managed)

释放执行的后门程序使用C#编写:

样本PDB路径信息和其使用的通信技术有很强的关联性,指示其使用了DNS相关的技术:

C:\Users\william\Documents\Visual Studio 2015\Projects\DNSProject\DNSProject\obj\Release\DNSProject.pdb

后门程序运行后会先检查参数是否包含“st:off”和“pd:off”,如果包含“st:off”则不会写启动项,如果包含“pd:off”则不会释放PDF文件。随后检测是否运行在虚拟机、沙箱中,或者是否被调试等,通过这些检查后最终执行恶意代码:

写入启动项的持久化操作:

释放诱饵PDF文件:

执行虚拟机、沙箱检测以及反调试等操作:

紧接着获取主机信息:

然后通过DNS隧道发送搜集到的主机信息,其中DNS隧道通信部分封装到queryTypesTest函数中:

最后进入命令分发循环, 该命令分发流程首先判断是否是x_mode模式,如果不是,则通过DNS隧道技术与C2通信获取需要执行的指令,否则通过HTTP传输数据:

与C2通过DNS隧道建立通信,并解析返回的数据,然后提取指令,最后通过taskHandler函数分发指令:

以下是部分指令截图:

值得注意的是,^\\$x_mode指令将设置文件上传下载的服务器,服务器地址通过DNS隧道获取:

其中一个样本指定了服务器为Google Drive服务器:

https://www.googleapis.com/upload/drive/v3/files/” + file_id + “?supportsTeamDrive=true&uploadType=resumable&fields=kind,id,name,mimeType,parents

所有命令列表如下:

命令

功能

^kill 结束线程?进程
^\\$fileDownload 文件下载
^\\$importModule 获取进程模块
^\\$x_mode 采用x_mode模式,此模式设置RAT服务器,然后采用HTTP发送RAT数据
^\\$ClearModules 卸载模块
^\\$fileUpload 文件上载
^testmode 测试某个模块
^showconfig 获取配置信息
^changeConfig 更改配置
^slp 睡眠一段时间
^exit 退出进程

DNS隧道通信分析

DNS隧道通信技术是指通过DNS查询过程来建立通信隧道。该通信方式有极强的隐蔽性,容易穿透各种流量网关的检测。

实现DNS隧道通信技术主要有两种方法:

  1. 指定DNS服务器实现DNS隧道通信
  2. 通过域名提供商提供的接口修改NS记录,将解析域名的DNS服务器指定为攻击者的DNS服务器,接管域名的DNS解析请求

本文所描述的后门程序OfficeUpdateService.exe使用的则是第二种方式实现DNS隧道通信,其主要原理为修改木马程序需要解析的域名的NS记录,由于DNS解析过程会首先尝试向NS记录指定的DNS服务器请求解析域名,所以NS记录指定的DNS服务器能收到DNS查询请求以及附带的数据。如果域名对应的NS记录中的DNS服务器是由攻击者控制的,那么攻击者就可以通过该DNS服务器与木马程序通过DNS查询建立起特殊的通信渠道。

木马程序请求的域名列表如下:

设置NS记录

NS(Name Server)记录是域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析。

攻击者首先将相关域名的NS记录修改为了攻击者控制的DNS服务器,攻击者指定用于解析相关域名的NS服务器为:tvs1.trafficmanager.live , tvs2.trafficmanager.live,我们通过nslookup可以查询得到:

样本再通过本机的nslookup程序向相关域名提交请求,而由于这些域名的NS记录被指定为了攻击者的DNS服务器(tvs1.trafficmanager.live),故nslookup提交的查询信息会被发送给攻击者的DNS服务器,然后读取DNS服务器返回的信息进行数据交互。所以样本其实是在和攻击者控制的DNS服务器进行最终的通信。

样本使用nslookup解析域名并附带以下参数:timeout(请求超时时间)、q(DNS请求类型):

发送上线请求并获取执行指令

木马会根据不同的查询类型,使用不同的正则表达式去匹配DNS服务器返回的结果数据:

比如执行nslookup并使用查询类型为A进行查询,最终使用以下正则表达式匹配返回的数据结果:

而样本首先会通过向攻击者控制的DNS服务器发送DNS查询请求来发送当前木马的上线ID给攻击者:首先获取当前的进程ID,并与请求查询的域名组成一个二级域名,依次使用nslookup指定DNS的查询类型发送DNS查询信息:

接着根据当前DNS请求的类型分别用不同的正则表达式规则匹配其返回的数据结果,并取取其中的数据:

我们手动模拟使用TXT查询请求并上传木马ID的过程如下:

首先我们构造一个二级域名:ajpinc.akamaiedge.live,二级域名ajpinc中的a代表第一次请求,末尾的c代表结尾,a和c之间是编码过后的当前进程ID。然后我们使用nslookup发送该请求,执行的效果如下:

而木马程序会使用以下正则表达式来匹配返回的数据结果:(\\w+).(akdns.live|akamaiedge.live|edgekey.live|akamaized.live)

该正则表达式会匹配上述结果中的ajpinc和ihn字符串,然后将ihn通过指定的解码函数解码得到“107”,解码函数如下:

最后获取当前的配置信息,再通过DNS协议传输给攻击者控制的DNS服务器,并持续发送DNS请求,最终分别使用不同的正则表达式来匹配返回的结果,获取下一步需要执行的指令。

数据匹配规则

样本主要使用的DNS查询类型如下:

A
AAAA
AC
CNAME
TXT
SRV
SOA
MX

木马会根据不同的查询类型,使用不同的正则表达式去匹配攻击者的DNS服务器返回的结果数据:

比如执行nslookup并使用查询类型AC得到返回的数据,并使用以下正则表达式匹配返回的数据结果:

使用查询类型为AAAA得到的数据使用以下正则表达式匹配返回的数据结果:

使用其他DNS查询类型得到的数据使用以下正则表达式匹配返回的数据结果:

样本所使用的DNS查询类型及返回数据对应匹配的正则表达式如下:

DNS查询类型 匹配结果的正则表达式
A Address:\\s+(\\d+.\\d+.\\d+.\\d+)
AC ([^r-v\\s]+)[r-v]([\\w\\d+\\/=]+)-\\w+.(<C2DOMIAN>)
AAAA Address:\\s+(([a-fA-F0-9]{0,4}:{1,4}[\\w|:]+){1,8})
CNAME、TXT、SRV、SOA、MX ([^r-v\\s]+)[r-v]([\\w\\d+\\/=]+)-\\w+.(<C2DOMIAN>)和(\\w+).(<C2DOMIAN>)

如果当返回的DNS请求结果中被”216.58.192.174|2a00:1450:4001:81a::200e|2200::|download.microsoft.com|ntservicepack.microsoft.com|windowsupdate.microsoft.com|update.microsoft.com”正则表达式命中,则代表请求被取消,则不会执行后续的操作:

溯源与关联

360威胁情报中心通过对样本详细分析后发现,此次攻击的幕后团伙疑似为DarkHydrus APT组织,部分关联依据如下。

样本使用DNS隧道进行通信

与之前Palo Alto披露[2]的木马类似的,都使用了相同的DNS隧道通信技术:

高度一致的沙箱检测代码和后门功能代码

几乎完全一致的虚拟机、沙箱检测代码:

恶意代码相似度极高,木马功能也高度相似:

拓展

有趣的是,我们关联到某个Twitter用户@darkhydrus2的昵称为Steve Williams,该用户名与DarkHydrus吻合,且昵称williams与此次C#编写的木马程序的PDB路径又有些关联:

总结

从近年来的高级攻击事件分析中可以看出,由于利用Office 0day等漏洞进行攻击的成本较高,多数攻击者更趋向于利用Office VBA宏执行恶意代码。企业用户应尽可能小心打开来源不明的文档,如有需要可通过打开Office文档中的:文件-选项-信任中心-信任中心设置-宏设置,来禁用一切宏代码执行:

目前,基于360威胁情报中心的威胁情报数据的全线产品,包括360威胁情报平台(TIP)、天眼高级威胁检测系统、360 NGSOC等,都已经支持对此类攻击的精确检测。

 

IOC

MD5
5c3f96ade0ea67eef9d25161c64e6f3e
8dc9f5450402ae799f5f8afd5c0a8352
b108412f1cdc0602d82d3e6b318dc634
039bd47f0fdb6bb7d68a2428c71f317d
PDB路径
C:\Users\william\Documents\Visual Studio 2015\Projects\DNSProject\DNSProject\obj\Release\DNSProject.pdb
CC地址
0ffice365.life
0ffice365.services
0nedrive.agency
akamai.agency
akamaiedge.live
akamaiedge.services
akamaized.live
akdns.live
azureedge.today
cloudfronts.services
corewindows.agency
edgekey.live
microsoftonline.agency
nsatc.agency
onedrive.agency
phicdn.world
sharepoint.agency
skydrive.agency
skydrive.services
t-msedge.world
trafficmanager.live

 

参考链接

  1. https://ti.360.net/blog/articles/analysis-of-settingcontent-ms-file/
  2. https://unit42.paloaltonetworks.com/unit42-new-threat-actor-group-darkhydrus-targets-middle-east-government/
  3. https://ti.360.net/
  4. https://twitter.com/craiu/status/1083305994652917760
源链接

Hacking more

...