DNS缓存中毒攻击


众所周知,DNS服务器分为顶级域权威域三个部分,查询时,会从上往下进行查询,从根服务器查顶级域服务器的IP,再从顶级域查权威域的IP,最后从权威域服务器中查最终的IP,返回给本地DNS服务器中。用户机查询域名IP,会首先去本地DNS服务器,如果服务器中有,直接返回结果,否则,重复上述过程。

而常见的三种DNS攻击,就是针对用户机和本地DNS服务器的。分别为:攻击用户机主机、伪造响应欺骗用户、DNS缓存中毒攻击。三种攻击大致思想如下:

image-20220415211701047

本篇将进行常规的本地DNS缓冲中毒的实验。

实验环境

实验大环境使用Ubuntu-Seed虚拟机,使用docker容器模拟出DNS服务器和用户机。首先创建对应的容器,注意,--privileged一定不能加,因为这会和bind9向冲突。

# 创建Local DNS Server
$ sudo docker run -it --name=dns --hostname=dns seedubuntu /bin/bash
# 创建User
$ sudo docker run -it --name=user --hostname=user seedubuntu /bin/bash

攻击机直接用虚拟机即可,三者的IP如下:

  • Attacker:192.168.186.137
  • Local DNS Server:172.17.0.2
  • User:172.17.0.3

配置

首先配置服务器。对于本地 DNS 服务器,我们需要运行 DNS 服务器程序。最广泛使用的 DNS服务器软件称为 BIND(Berkeley Internet Name Domain)。bind9/etc/bind/named.conf 文件中获取其配置。这个文件是主要的配置文件,它通常包含几个”include”条目,即实际配置 存 储 在 那 些 include 文 件 中 。 其 中 一 个 include 文 件 称 为/etc/bind/named.conf.options。这是我们通常设置配置选项的文件。

首先设置转储文件,所谓转储,就是把服务器上的所有DNS缓冲转存进去,相当于备份。在/etc/bind/named.conf.options中设置dump-file

options {
	dump-file "/var/cache/bind/dump.db";
};

当需要转储或清空时,用下列命令即可:

# 转储
$ sudo rndc dumpdb -cache
# 清空
$ sudo rndc flush

接着需要关闭DNSSEC。引入DNSSEC 是为了防止对 DNS服务器的 spoofing攻击,所以要关闭。仍然在上面那个文件中进行:

options {
	# dnssec-validation auto;
	dnssec-enable no;
};

启动DNS服务:

$ sudo service bind9 restart

如有错误,查看错误日志:

$ sudo named -d 3 -f -g

配完服务器后,开始配用户机。在/etc/resolv.conf中配置,将上述服务器作为它唯一的DNS服务器:

2


文章作者: SrcMiLe
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 SrcMiLe !
评论
  目录