背景
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隧道通信技术主要有两种方法:
- 指定DNS服务器实现DNS隧道通信
- 通过域名提供商提供的接口修改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 |
参考链接
- https://ti.360.net/blog/articles/analysis-of-settingcontent-ms-file/
- https://unit42.paloaltonetworks.com/unit42-new-threat-actor-group-darkhydrus-targets-middle-east-government/
- https://ti.360.net/
- https://twitter.com/craiu/status/1083305994652917760