DNS隐藏隧道的使用

前言

关于DNS隧道的一些简单研究和利用。

DNS协议基础

域名系统(服务)协议(DNS)是一种分布式网络,主要用于域名与 IP 地址的相互转换。

DNS域名解析流程

本地DNS缓存-递归查询-迭代查询

本地DNS缓存
包含浏览器缓存,本地host文件,系统dns缓存

递归查询
该模式下DNS 服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。

迭代查询
本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它在根据结果逐层向下查询,直到得到最终结果。每次它都是以dns客户机的身份去各个服务器查询,即迭代查询是本地服务器进行的操作。

基本解析流程

以访问http://test.cseroad.space进行举例

1、检查浏览器缓存,本地host文件和本机的dns缓存,失败后,向本地设置的dns服务器(如114.114.114.114)发送查询请求,dns服务器到自身解析数据库中查询,查询成功返回IP地址(此过程成为递归查询)查询失败则触发迭代查询过程。
2、本地dns服务器向根域名服务器发送关于space的查询请求。
3、根域名服务器接收到查询请求,并把查询结果返回给dns服务器。
4、本地dns服务器收到根域名服务器返回的顶级域名服务器的地址,并向它查询关于cseroad的域名服务器地址。
5、顶级域名服务器接收到请求,进行查询,并把查询结果返回到dns服务器。
6、本地dns服务器收到关于cseroad的权限域名服务器地址,并发起查询test的请求。
7、权限域名服务器收到请求,并把test对应的A记录的ip返回给dns服务器。
8、本地dns服务器把权限域名服务器返回的ip地址发送到个人电脑。
9、个人电脑成功解析到http://test.cseroad.space对应的ip地址,在浏览器中进行访问。
迭代查询

DNS隧道

DNS隧道(DNS Tunneling)是将其他协议的内容封装在DNS协议中,然后以DNS请求和响应包完成传输数据(通信)的技术。当前网络世界中的DNS是一项必不可少的服务,所以防火墙和入侵检测设备处于可用性和用户友好的考虑将很难做到完全过滤掉DNS流量,因此,攻击者可以利用它实现远程控制,文件传输等操作。

DNS隧道的两大类型

直连隧道:用户端直接和指定的目标DNS服务器建立连接,然后将需要传输的数据编码封装在DNS协议中进行通信。这种方式的优点是具有较高速度,但蔽性弱、易被探测追踪的缺点也很明显。另外直连方式的限制比较多,如目前很多的企业网络为了尽可能的降低遭受网络攻击的风险,一般将相关策略配置为仅允许与指定的可信任DNS服务器之间的流量通过。

中继隧道:通过DNS迭代查询而实现的中继DNS隧道,这种方式及其隐秘,且可在绝大部分场景下部署成功。但由于数据包到达目标DNS服务器前需要经过多个节点的跳转,数据传输速度和传输能力较直连会慢很多。

在实战用到DNS隧道的场景,对隐蔽性要求很高,速度相对来说没那么重要,因此主要使用中继隧道。

技术要点

DNS缓存机制的规避
再使用中继隧道时,如果需要解析的域名在本地的DNS Server中已经有缓存时,本地的DNS Server就不会转发数据包。所以在构造的请求中,每次查询的域名都是不一样的。

DNS载荷的编码
从高层来看,载荷只是客户端和服务器通信的正常流量。例如客户端发送一个A记录请求给服务器,查询的主机名为2roAUSwVqwOWCaaDC.test.nuoyan.com,其中2roAUSwVqwOWCaaDc则是客户端传递给服务器的信息,这串字符解码后的信息便是DNS隧道。

可利用DNS查询类型
DNS的记录类型有很多,常见的有A,AAAA,CNAME,MX,NS等。DNS隧道可以利用其中的一些记录类型来传输数据。例如A,MX,CNAME,TXT等。

A       记录 指定主机名(或域名)对应的IPV4地址记录
AAAA    记录 指定主机名(或域名)对应的IPV6地址记录
NS      记录  指定该域名由哪个DNS服务器来进行解析
MX      记录  指向一个邮件服务器
PTR     记录  将一个IP地址映射到对应的域名,也可以看成是A记录的反向
CNAME   记录  允许将多个名字映射到同一台计算机
TXT     记录 一般指主机名或域名的说明

主动连接
内网客户端位于防火墙后方,服务端无法做到主动连接,因此大多的dns隧道工具,客户端会定时向服务端发送请求,保证二者之间的通信状态。

常用工具

dnscat2,iodine,DeNise,dns2tcp等单独的DNS隧道工具。
cs,msf,empire等集合了DNS隧道功能的安全工具。
本次分别演示使用dnscat2和cs的DNS隐藏隧道。

实验环境

内网win7虚拟机
阿里云vps
py来的域名

Dnscat2搭建DNS隧道

1、安装环境依赖和服务端

apt-get install ruby ruby-dev git make g++ rubygems
gem update --system
gem install bundler
git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/server
bundle install

如下表示安装成功。

2、客户端下载安装

Dnscat2支持跨平台
linux客户端

git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/client/
make

windows客户端
下载链接
下载dnascat2的win32.zip

3、建立隧道

因为要使用中继隧道,设置一个NS记录指向自己的子域名,再设置一个A记录指向自己部署server端的服务器地址。


使用dig +trace dnsa.cseroad.space 查看域名详细解析过程,对应着迭代查询过程。

ruby ./dnscat2.rb dnsa.cseroad.space --no-cache

执行dnscat2,输入配置的子域名 --no-cache 代表禁止缓存

secret为随机生成的密钥,友好的给出了2种连接方式,分别为中继和直连。
直接在客户端执行中继连接方式,session established表示隧道建立成功。


服务端接收到客户端的请求,创建了session 1会话。



进入这个session

session -i 1

查看工具支持的功能。


执行系统命令,更多的功能不再演示。

cs使用DNS隧道建立连接

cs作为当前最流行的安全工具肯定少不了DNS隧道功能。
cs的安装过程不再赘述。

1、新建基于DNS隧道的监听器

payload选择beacon_dns,host填写A类解析的域名,端口随意。



输入设置的ns服务器域名


2、基于监听器创建payload

推荐使用powershell,powershell不会产生文件落地,且免杀性操作性强。




成功上线。



通过Wireshark可以查看到cs的流量都是通过DNS发出的,使用的为A类查询进行数据传输。

总结

DNS隧道在隐蔽性,穿透性上仍然具备不小的优势。
在大多数情况下它不会是最优选择,但在某些情况下它会成为唯一选择。

参考资料:
利用DNS隧道构建隐蔽C&C信道
DNS 深度理解 [ 一 ]
对 Cobalt Strike DNS隧道的理解与实战
『DNS隧道工具』— iodine
DNS Tunneling及相关实现
利用DNS Tunnel传输数据

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容

  • 文章首发于个人blog欢迎指正补充,可联系lionsom_lin@qq.com原文地址:《网络是怎样连接的》阅读整...
    lionsom_lin阅读 13,993评论 6 31
  • 1. 概述 在网络环境中一般用户只需要在浏览器中输入url如www.sunny.com就可以到对应服务器获取相应的...
    ghbsunny阅读 2,672评论 0 7
  • 前言 本文开始介绍应用层,传输层为应用进程提供了端到端的通信服务,但不同的网络应用的应用进程之间,还需要有不同的通...
    HRADPX阅读 1,900评论 2 5
  • 目录: 一些基本概念主机名DNS名称解析DNS 解析的后端存储名称解析总结 大规模域名解析的体系架构DNS 解析需...
    C86guli阅读 12,369评论 3 34
  • “桃花源”不过是梦想———浅谈电影《健忘村》 建一个桃花源, 没有痛苦,只有幸福,平平淡淡,男女老少,怡然自得。电...
    晓曦12阅读 231评论 0 0