DNS隧道小结

作者: book4yi | 来源:发表于2022-07-21 23:01 被阅读0次

    本文仅作为学习记录,如有侵权,请联系删除!

    前言:


    hw马上就开始了,突然心血来潮想做DNS Beacon上线的实验,万一hw碰上了不至于两眼黑,最起码能扯扯淡

    0x00 环境配置:


    随着目前攻击者越来越多地利用DNS通道来建立隧道与C2通信。从本地计算机到Internet的任何通信(不包括基于静态IP的通信)都依赖于DNS服务,限制DNS通信可能会导致合法远程服务的断开,因此,企业防火墙通常配置为允许UDP端口53(由DNS使用)上的所有数据包。

    为了进一步做仿真模拟实验,在win7虚拟机上设置防火墙出网策略,只允许访问内网以及dns出网,但是因为windows防火墙的策略是阻断优先于放行,导致一直没有配置好环境,最终通过将阻断策略分为两条得以解决:

    0x01 DNS的几种资源记录类型:


    • 1.主机记录(A记录)

    主机记录可以将DNS中的域名称对应到IPv4地址。

    • 2.PTR

    PTR可以定义某个对应的域名。

    • 3.CNAME (Canonical Name)记录,通常称别名解析

    CNAME记录可以将注册的不同域名都转到一个域名记录上,由这个域名记录统一解析管理,与A记录不同的是,CNAME别名记录设置的可以是一个域名的描述而不一定是IP地址。

    • 4.NS(Name Server)记录是域名服务器记录

    NS记录用来指定该域名是由哪个DNS服务器来进行解析的,可以把一个域名的不同二级域名分别指向到不同的DNS系统来解析。

    • 5.TXT 记录

    TXT记录一般是为某条记录设置说明,比如你新建了一条a.com的TXT记录,TXT记录内容"this is a test TXT record.",然后用nslookup -qt=txt a.com ,你就能看到"this is a test TXT record"的字样了。

    0x02 DNS协议解析过程:


    DNS协议解析过程分为两种,迭代查询和递归查询。

    • 迭代查询:

    本地域名服务器向根域名服务器发送请求报文,根域名服务器直接给出ip地址或者告诉本地域名服务器下一步应该去向另一个域名服务器A进行查询。同理,A域名服务器直接给出ip地址或者告诉本地域名服务器下一步应该去查询B域名服务器。过程以此类推,直到找到ip地址为止。

    • 递归查询:

    客户机像本地域名服务器查询,如果本地服务器的缓存中没有需要查询的ip地址,那么本地域名服务器会以客户机的身份(代替本机查询),向根域名服务器发送请求报文。

    本机查询本地域名服务器,这部分属于递归查询。
    本地域名服务器查询根域名服务器,这部分属于迭代查询。

    0x03 DNS隧道:


    DNS隧道是隐蔽信道的一种,通过将其他协议封装在DNS协议中进行通信。封装由客户端完成,将DNS流量还原成正常的流量由服务器完成。DNS隧道攻击利用了防火墙放行DNS的特点以及协议解析流程来实现的。

    1.)直连型DNS隧道:

    客户端直接和指定的目标DNS Server进行UDPsocket套接字连接,通过将数据编码封装在DNS协议中进行通信,这种方式速度快,但是隐蔽性比较弱,很容易被探测到,但如果客户端指定了信任的DNS解析服务器,那么将会被白名单限制在外。

    2.)域名型DNS隧道(中继):

    通过DNS迭代查询实现的中继隧道,比较隐蔽,但同时因为数据包到达目标DNS Server前需要经过多个节点,所以速度上较直连慢很多。中继过程中的一个关键点是对DNS缓存机制的规避,因为如果解析的域名在Local DNS 中已经有缓存,那么Local DNS 就不会继续发送数据包,所以在构造请求中,每次查询的域名需要不同或者是已过期的。

    DNS隧道建立的过程:

    Step 1:受控PC机将数据封装进DNS数据包里,像局域网内部的本地域名服务器请求查询aaa.com
    Step 2:本地域名服务器透过防火墙向根域名服务器发送查询请求
    Step 3:经过大量重定向,查询请求最终要aaa.com的权威域名服务器
    Step 4:aaa.com权威域名服务器是在攻击者的控制下,解析发送过来的DNS数据包并发送回应包
    Step 5:DNS回应包穿透防火墙
    Step 6:DNS回应包进入内网
    Step 7:本地域名服务器将回应包返回给受控PC机
    Step 8:受控PC机解析DNS回应包里的数据,得到新的指令

    DNS Beacon原理:

    利用DNS请求应答机制作为攻击渗透的命令控制通道,把C&C服务器指令封装到DNS相应报文中,以此控制被控端主机。

    发送端将隐蔽数据信息切分并且编码后封装到DNS报文域名中进行传输,每一级域名长度为63,域名总长度不超过253,接收端收到DNS报文后提取域名中的隐蔽信息字段进行解码重组还原得到IP报文。主要的工具有DNSCat,Iodine等

    0x04 DNS Beacon上线:


    首先配置域名的记录。将自己的域名www.hacker.com解析到VPS服务器地址。然后创建NS记录,将ns1.hacker.com指向www.hacker.com

    然后使用ping命令配合tcpdump观察一下是否有流量经过:

    tcpdump -n -i eth0 udp dst port 53
    

    CS开启DNS Beacon监听:

    生成DNS木马,只要木马在目标主机执行成功,我们的CobaltStrike就能接收到反弹的shell。但是默认情况下,主机信息是黑色的,我们需要执行以下命令,让目标主机信息显示出来:

    checkin
    mode dns-txt # 使用dns的txt记录方式进行通信。
    

    0x05 检查与防范:


    • DNS会话中数据包的总数较多:在整个木马的生命周期里会向CC服务器发送心跳包,传输信息,资源文件等行为,CC服务器也会发送控制指令。在一定的单位时间内,观察TXT、PTR等交互记录的数据包是否存在DNS隧道攻击
    • 隧道消息类型: 在正常的DNS流量中。A记录类型的流量占20%-30%,CNAME记录为38%-48%,AAAA记录占25%,NS记录只有5%,TXT记录只有1%-2%。然而为了获取更高的带宽,一部分的DNS隐蔽信道工具如Iodine。在默认配置下会使用TXT或NULL等不常用的记录类型。
    • 检测DNS数据包有效载荷部分是否加密
    • 通过防火墙设置DNS白名单策略来限制DNS隧道攻击
    • 域名固定部分不变:在DNS隧道的报文中,我们可以看到 变化的都是子域名

    参考如下:


    『DNS隧道工具之渗透神器』— cobalt strike
    DNS 隧道通信特征与检测
    墨云 I 技术课堂-DNS隧道攻击与防御
    工具的使用 | CobaltStrike中DNS Beacon的使用

    相关文章

      网友评论

        本文标题:DNS隧道小结

        本文链接:https://www.haomeiwen.com/subject/jvxpirtx.html