DNS欺骗实验1
作业题目
本实验的目标是让学生获得对DNS(域名系统)的各种攻击的第一手经验。DNS是互联网的电话簿;它将主机名转换为IP地址,反之亦然。这种转换是通过DNS解析实现的,这种解析发生在幕后。DNS欺骗攻击以各种方式操纵此解析过程,目的是将用户误导到其他目的地,这些目的地通常是恶意的。本实验室主要研究几种DNS欺骗攻击技术。学生将首先设置和配置DNS服务器,然后在实验室环境中的目标上尝试各种DNS欺骗攻击。
第一个大实验任务(本地DNS欺骗)中进行的攻击假设攻击者位于同一本地网络上,因此可以嗅探DNS数据包。这个假设是为了简化实验任务。第二个大实验任务为远程DNS攻击实验,攻击者在没有嗅探数据包的情况下发起远程欺骗攻击,远程攻击实验室比本地DNS欺骗实验更具挑战性。
实验步骤及结果
DNS_Local
Lab Environment Setup Task
设置自己的DNS服务器来进行攻击实验。实验环境需要四个独立的主机:一个用于受害者,一个用于本地DNS服务器,两个用于攻击者。
创建docker:
删除之前实验创建的docker:
开启docker:
docker信息:
网络接口:br-bd630db7d7fc
/etc/bind/named.conf.options 为本地DNS服务器配置文件。在本实验中,DNS服务器在DNS查询中的源端口号固定为33333。默认缓存内容文件的路径为: /var/cache/bind/named_dump.db。DNSSEC在配置文件中关闭。
用户容器10.9.0.5在/etc/resolv.conf被配置为使用10.9.0.53作为其本地DNS服务器。
当有人想查询attacker32.com时,请求会被发送到Attacker’s Namesever.
Attacker’s Nameserver上有两个区域(/etc/bind/named.conf):
Testing the DNS Setup
目的:确定实验配置正确。
进入usr shell输入dig ns.attacker32.com:
本地DNS服务器将请求转发给Attacker’s Nameserver。
输入命令dig www.example.com:
usr主机请求本地DNS服务器
使用@,向Attacker’s Nameserver发送DNS请求:
Task 1: Directly Spoofing Response to User
目的:直接伪造DNS响应欺骗用户主机。
首先清除本地DNS服务器缓存:
嗅探DNS请求消息,然后立即创建一个假的DNS响应,并发送回用户主机,只要伪造的响应比真正的响应先到达用户主机,我们的攻击就成功了。
构造代码t1.py:
代码使用Scapy库来创建伪造的DNS响应。
DNSRR创造了一个DNS资源,type为A表示这是一个IPv4地址的记录;rdata被设置为 '1.2.3.1',这是一个IPv4地址。
DNS创建了一个DNS响应包,id是DNS的id,要与查询包的ID匹配;aa被设置为1,表示这是一个授权的回答;qr设置为1,表示这是一个响应;qdcount=1,表示只有一个查询 qd = pkt[DNS].qd,表示查询描述符被设置为原始包中的查询描述符。
当嗅探到目标主机10.9.0.53的DNS请求(UDP端口53),回复一个伪造的DNS响应,将查询example.com的IP地址改为1.2.3.1
运行代码:
user使用dig www.example.com:
没有成功。
可以看到包是发出去了的,应该是伪造的包到得慢了导致失败。
使用tc命令延迟向外的流量:
tc qdisc add dev eth0 root netem delay 1000ms
再次尝试:
得到构造的IP 1.2.3.1。
Task 2: DNS Cache Poisoning Attack – Spoofing Answers
目的:攻击本地DNS服务器。
当本地DNS服务器接收到一个查询时,它首先从自己的缓存中查找答案;如果答案存在,DNS服务器将回复其缓存中的信息。如果答案不在缓存中,DNS服务器就会向其他DNS服务器发出查询请求。当它得到答案时,它将把答案存储在缓存中。
如果我们攻击本地DNS服务器并成功,当用户的主机希望解析相同的主机名时,它将从缓存中得到伪造的响应。这样,攻击者只需要欺骗一次,这种影响将持续到缓存的信息过期为止。这种攻击被称为DNS缓存中毒。
构造代码t2.py:
代码和上个task的代码类似,但是过滤器字符串改为src host 10.9.0.53,这是因为这次的受害者是本地DNS服务器,我们是趁它发送DNS请求时发送伪造DNS响应给它的。
在进行攻击之前,确保DNS服务器的缓存为空。
运行代码:
攻击成功:
查看本地DNS服务器缓存:
缓存中毒。
Task 3: Spoofing NS Records
目的:发起一个影响整个example.com域的攻击。
在授权部分为目标域提供一个攻击者拥有的恶意服务器名,当受害者的本地DNS服务器试图查找该目标域中任何一个主机名的IP地址时,它会发送请求给
恶意域名服务器,查询到的结果可以完全由攻击者控制,这种攻击可以影响目标域内的所有主机名。
编写代码t3.py:
清除DNS缓存:
运行代码:
user查询www.example.com:
与恶意域名服务器中的结果相同:
user查询一个随机子域:
与恶意域名服务器的结果相符:
Task 4: Spoofing NS Records for Another Domain
目的:添加其他域名的权威服务器
编写代码:
在上一个task代码的基础上加一个NS。
清除DNS缓存:
运行代码:
user查询www.example.com:
查看DNS缓存:
只有google的改变了,说明只会缓存一个域名的NS记录,存在覆盖情况。
Task 5: Spoofing Records in the Additional Section
目的:欺骗某些条目,并查看它们是否会被目标本地DNS服务器成功缓存。
当响应www.example.com的查询时,我们在欺骗回复中额外添加以下条目:
所以,构造代码t5.py:
清空缓存:
运行代码:
user查询www.example.com:

浙公网安备 33010602011771号