无论是高级持续性威胁(APT)、僵尸网络(Botnet),还是勒索软件、后门等,命令与控制信道(C&C)都是其重要组成部分,尤其是APT和僵尸网络中的C&C信道决定了其威胁程度。学术界和工业界就C&C方面的研究已逐渐深入,目前网络战格局逐渐形成,公众对网络安全逐渐重视,网络空间中的攻防双方持续较量。 迫于当前形势,攻击者逐渐转向“低调”,近年曝光的多起大型APT攻击事件都倾向于构建隐蔽的的C&C信道。因此,我们必须从攻击者视角思考,哪些技术可以被恶意利用到构建隐蔽的C&C信道,从而在相应应对策略上取得先机。
一、DNS协议关于DNS协议详细文档可参考标准文档:RFC1034 和 RFC1035
1.1、类比理解DNS大千世界,如何证明我就是我?我首先想到的就是亮出我的身份证。身份证是我们每个人的身份凭证,而且身份证上记录有我的姓名和身份证号,同时它也是有权威机构发放,由此在需要验明正身的场合下我的身份证就可以证明我就是我。
DNS(Domain Name System,域名系统)也是一种域名(Domain)和网络地址(IP)一一对应的标准协议,实现这种协议提供DNS服务的称为DNS服务器。域名(如example.com)可以类比理解为名字,而网络地址(如10.0.2.10)则可以理解为身份证号。在显示生活中,我们认识和交朋友更趋向于记住她/他的名字而不是其身份证号。同样的为了实现用户友好,让用户记住具有特点的域名比看起来就让人头疼的一连串数字组成的IP地址要容易很多。
为了便于管理,身份证管理采用分级管理的策略,如同一个县出生的人在身份证号中的前面部分相同;类似的,域名系统在因特网中的命名也采用层次结构的命名方法。为了确保身份证的权威,办证单位必须是某公司门;在域名系统中也有权威的根域名服务器、权威域名服务器等。类似的相同点还有很多,但DNS中域名和IP的对应与身份证号和名字的对应理解中需要注意DNS协议要求域名和IP必须唯一确定,即一个域名唯一对用一个IP(不考虑最近的负载均衡技术),即现实生活中的同名问题在域名系统中是必须解决的,因为域名系统是整个因特网共用的,所以必须保持唯一性。
1.2、DNS的层次结构图解注:具体的官方描述和介绍类知识请自行检索(太多了),以上仅为我的个人理解
1.3、DNS域名解析流程——本地DNS缓存+递归查询+迭代查询【递归查询】
用户本地域名服务器发出一次查询请求,就静待本地服务器反馈最终查询结果。本地服务器首先使用本地DNS缓存尝试应答用户的DNS查询请求,若失败则发起迭代查询。
【迭代查询】
本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它在根据结果逐层向下查询,直到得到最终结果。每次它都是以DNS客户机的身份去各个服务器查询,即迭代查询是本地服务器进行的操作。
【具体流程描述】
(1)、用户主机A先向本地域名服务器B递归查询abc.exmaple.com (2)、B首先尝试使用本地DNS记录查询abc.exmaple.com若本地不存在abc.example.com的相关记录,则B以DNS客户机的身份发起迭代查询abc.example.com (3)、B向一个根域名服务器C查询abc.example.com (4)、根域名服务器C告诉B下一步到.com顶级域名服务器D去查询,并告知D的IP地址1.2.3.4 (5)、B向.com顶级域名服务器D进行查询 (6)、D告诉本地域名服务器B,下一步请到.example.com权限服务器E去查询,并告知E的IP地址2.3.4.5 (7)、B向.example.com权限服务器E进行查询(8)、E告诉本地域名服务器B所查询域名abc.example.com的主机是否存在,并告知其IP地址3.4.5.6(9)、本地域名服务器B向用户主机A反馈所查询的域名abc.exmaple.com对用的IP地址为3.4.5.6
1.4、DNS报文格式重要部分说明:
会话标识:DNS报文的ID标识,区分DNS应答报文是哪个请求的响应
查询类型整理:
生存时间(TTL):资源记录的生命周期,一般以秒为单位。
【说明】
此部分为DNS相关基础知识,我只对相关知识进行搜集,并结合自己的理解整理所得。
*协议报文格式和查询类型图表源自明风的博客(CSDN)大神的DNS协议详解及报文格式分析一文。
二、DNS隧道2.1、DNS隧道原理概述
DNS隧道(DNS Tunneling)是将其他协议的内容封装在DNS协议中,然后以DNS请求和响应包完成传输数据(通信)的技术。当前某公司中的DNS是一项必不可少的服务,所以防火墙和入侵检测设备处于可用性和用户友好的考虑将很难做到完全过滤掉DNS流量,因此,攻击者可以利用它实现诸如远程控制,文件传输等操作,众多研究表明DNS Tunneling在僵尸网络和APT攻击中扮演着至关重要的角色。
DNS隧道依据其实现方式大致可分为直连和中继两类。
直连:用户端直接和指定的目标DNS服务器建立连接,然后将需要传输的数据编码封装在DNS协议中进行通信。这种方式的优点是具有较高速度,但蔽性弱、易被探测追踪的缺点也很明显。另外直连方式的限制比较多,如目前很多的企业网络为了尽可能的降低遭受网络攻击的风险,一般将相关策略配置为仅允许与指定的可信任DNS服务器之间的流量通过。
中继隧道:通过DNS迭代查询而实现的中继DNS隧道,这种方式及其隐秘,且可在绝大部分场景下部署成功。但由于数据包到达目标DNS服务器前需要经过多个节点的跳转,数据传输速度和传输能力较直连会慢很多。
实现DNS隧道的关键要点:
(1)、规避DNS缓存机制 (2)、可利用DNS查询类型及其载荷编码 (3)、如何应道域名系统采用的C/S机制,即Server不可能发起连接——Client会定时向Server发送请求,保证二者之间的通信状态。
2.2、DNS隧道工具目前,DNS隧道技术已经很成熟,相关工具也很多,而且不同工具也各具特色。目前比较活跃的有iodine,dnscat2,其他的还有DeNise,dns2tcp,Heyoka。相关介绍请参考利用DNS隧道进行隐蔽通信和远程控制。
(1)、dns2tcp:支持直连模式的DNS隧道,只实现了简单的DNS隧道,相关命令和控制服务需要自行搭建,且已在kali系统中直接集成。(2)、iodine:最活跃、速度最快、支持直连和中继模式,且支持丰富的编码、请求类型选择(3)、Dnscat2:封装在DNS协议中的加密C&C信道,直接运行工具即可实现数据传输、文件操作等命令和控制功能。
|