XshellGhost再现?使用DNS隧道传输的PlugX远控变种分析

Track-SSG   ·   发表于 2018-09-07 09:31:22   ·   漏洞文章

前言

距XshellGhost事件过去整整一年,360核心安全的听风安全威胁预警平台近日再次发现一起攻击事件,该次攻击使用了与XshellGhost相似的DNS隧道传输技术,以此绕过安全检测并隐蔽传输数据。

该后门木马结合DNS隧道传输技术和PlugX远控程序,通过建立的DNS隧道进行攻击控制。利用DNS请求应答机制作为攻击渗透的命令控制通道,把C&C服务器指令封装到DNS相应报文中,以此控制被控端主机。并且依托DNS协议的特性,该木马可以有效穿透防火墙,躲避常规的安全检测。

 

发现与追踪

听风平台是360核心安全针对异常DNS隧道传输数据的监测预警平台,该平台已快速有效的预警了多个利用DNS隧道技术的木马后门程序。

如去年发现的XshellGhost利用DNS隧道传输数据,木马根据DGA算法生成当月的上线域名“nylalobghyhirgh.com”,并将用户信息编码到子域名部分发起TXT类型的DNS查询进行受控端上线。

同样地,使用相类似的监测方式发现本文披露的PlugX变种木马。虽然该木马直接使用C&C域名0nlinecc.com进行攻击,但同样将编码后的全域名发送到公共DNS服务器来建立通信隧道,并且也是通过查询TXT来返回数据。

经过追踪,发现攻击团伙使用钓鱼网站来传播木马。该团伙制作了与全球知名聊天软件Provide Support的官网相似度极高的网站,其注册的父域名为【providsupport.com】,比官方域名【providesupport.com】在provide中少了一个e,非常具有迷惑性。同时该钓鱼网站仿冒的下载更新页面,弹出的小窗口故意设置成不可关闭,用来诱导用户下载木马后门程序。

钓鱼网站诱导用户下载木马软件的部分源码:

download_page

该钓鱼网站近期更新的新版本的下载地址,使用了一段释放后门程序的VBS脚本。

newver

 

样本分析

虽然该系列样本从2016年开始至今一直在更新迭代,但是其最终加载的核心模块基本不变,本文以目前仍活跃在钓鱼网站上的样本为例进行分析。

本例样本的主要的运行流程如下:

木马流程

装载过程

运行程序后,首先会通过检测注册表来判定目标用户是否安装正常的Provide Support的软件产品,若没有安装则不进行下一步感染。

check_soft

若环境检测通过,程序将在临时目录里释放恶意模块LiveSupportUpdate.log,并运行rundll32.exe来调用该模块的导出函数CheckUpdate,该函数第三个参数为解密ShellCode用的哈希串:

process

LiveSupportUpdate.log解密完ShellCode后随即创建一个线程开始运行,ShellCode开头是一段加入混淆指令的自修改代码,主要功能为解密下一步的LOAD代码:

run shellcode

解密完后进入LOAD代码,其主要功能是内存解密并加载PlugX核心模块,调用RtlDecompressBuffer函数解压后在内存出现PlugX原始模块,该模块是个DLL程序,只不过DOS头部和PE头部两个标志均被修改为“XV”:

decode_plugx

然后LOAD代码进一步分配内存,进行PE节映射、导入API地址等步骤后就执行PlugX入口点函数:

call plugx

PlugX模块

进入PlugX模块后,程序开始做一系列的初始化工作,其中包括调整进程权限、创建一些辅助线程、安装核心的远控对象等,然后就进入远控上线流程。由于模块功能比较复杂多样,本文仅介绍其通过DNS隧道进行远控上线和控制的部分内容。

首先,该模块通过初始化一个全局控制对象来安装核心远控的功能插件,每个插件都对应一个功能字符串和回调函数,字符串解密后可以直接看出该插件的功能含义,如磁盘操作(DISK)、键盘记录(KeyLogger)、网络浏览(Nethood)等,更多的插件功能详见附录。

install_rc

安装了远控插件后,进入上线流程之前,程序先初始化了一个DNS通信隧道的控制对象,其中主要是创建2个控制事件用于接收数据和初始化一个0x40字节大小的时间序列用于上线标记。

init_dns_obj

接着程序进入上线流程,将备选的4个公共DNS服务器IP拷贝到DNS控制对象、创建UDP套接字后,随即创建一个收发线程准备上线,而上线的方式即是分别往4个公共的DNS服务器和网关DNS发送0x48字节的上线包,这0x48字节的上线包就包含初始化DNS控制对象时生成的0x40字节时间序列,具体结构如下:

上线包结构

随后该上线包经过转换成DNS接受的字符后就被编码到“dns.0nlinecc.com”的子域名中,然后构造TXT类型的DNS查询包发送给各个DNS服务器。

dns_query

为了接收到从公共DNS(如8.8.8.8)转发而来的上线数据包进而控制受害用户,木马作者对域名“0nlinecc.com”添加了一条NS记录来指定“dns.0nlinecc.com”的DNS服务器为自己控制的服务器,该服务器地址刚好和PlugX模块里使用到的另外一个上线地址“cdn.0nlinecc.com”一致:

dns_server_

当服务器接收到上线包数据后,将会返回控制数据给PlugX模块处理。控制数据经过公共DNS转发返回到PlugX的接收流程后,程序就对接收到的TXT回包进行校验和解码,除了正常编码的TXT数据外,还需要添加一条长度为0的空Text作为结尾才可以通过程序检查到达下一步控制流程,下图为正确返回包的格式示例。

check_dns_answer

通过格式检查后进入解码判断流程,解码后的数据头部是一个状态字段,主要包含3种接收状态,分别表示开始接收、正在接收和完成接收,每种状态完成各自的标志设置或数据接收任务,最终协作完成从服务端接收控制数据并存储到DNS控制对象的任务。

deal_recv

接收完控制数据后,程序进一步检查数据并对其解压后就进入了控制流程。控制流程包含信息收集、调用远控插件、退出等多个管理功能,调用远控插件的方式是通过全局控制对象里安装的插件列表,分别调用每个插件函数,插件函数内部会根据第二个参数来控制执行不同的功能,如果没有执行到插件功能则直接返回-1。

call_plugin

例如执行进程管理插件的功能函数,根据第二个参数指向的控制码字段来判断执行的插件子功能,进程管理主要有3个控制子功能分别是枚举进程列表,枚举模块列表和结束进程,若控制码不在这3个其中则返回-1。

process_manage

至此,PlugX模块成功通过公共DNS服务器与远端服务器建立了通信隧道,远程的控制端则能够使用该通道发送控制命令来调用受害机器的远控插件,进而完成远程控制的任务。

 

挖掘与统计

根据样本远程控制所使用的C&C域名,查询Whois公共信息库不出意料,该域名开启了信息隐私保护,无法联系到域名所有者。另外发现,该域名早在2015年就已

经注册,并在随后陆续进行了一些攻击活动。

根据360天眼追踪系统的数据来看,攻击团伙经常更换域名对应的C&C服务器,基本上每隔几个月就会换一次IP地址,从2015年至今切换IP近10次。

从DNS查询数据来看,统计了2018年1月份到2018年4月份的部分数据,累计总查询量约1千万余次,其中2月份发生过两次明显的攻击,每次产生DNS查询量近5万次。

而从其传播源数据来看,发现先后换过几次钓鱼的网址,但都是针对Live Support这款面向企业用户的聊天软件,且其最终加载的核心PlugX后门模块相同。此外,还意外发现该团伙在2016年所使用的传播域名,却是属于Live Support官方域名的子域名,其具体原因暂未确定。

tongji_down_web

总结

DNS隧道传输技术其实早已出现,经常被各类木马后门使用来作隐蔽通道以绕过安全检测,去年的XshellGhost后门事件更是将该技术披露到广为人知,以致各方纷纷提出对该类安全威胁的防御与检测方案。

本次360听风预警平台小试牛刀,监测到DNS异常查询并进行威胁预警,让XshellGhost之类采用DNS隧道隐蔽传输技术的恶意软件无所遁形。同时,该平台还采用多维度的分析监测技术,最大程度的提高其安全预警的能力,为用户的安全保驾护航。

 

附录

1、PlugX后门远控功能列表:func

2、Hashs:

hash

3、相关信息:

tonglei



本文由安全客原创发布                                
转载自安全客 - 有思想的安全新媒体


打赏我,让我更有动力~

0 条回复   |  直到 2018-9-7 | 3007 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.