网络攻防--DNS欺骗

一、实验内容

        本实验的目标是让学生获得对DNS(域名系统)的各种攻击的第一手经验。DNS是互联网的电话簿;它将主机名转换为IP地址,反之亦然。这种转换是通过DNS解析实现的,这种解析发生在幕后。DNS欺骗攻击以各种方式操纵此解析过程,目的是将用户误导到其他目的地,这些目的地通常是恶意的。本实验室主要研究几种DNS欺骗攻击技术。学生将首先设置和配置DNS服务器,然后在实验室环境中的目标上尝试各种DNS欺骗攻击。

        第一个大实验任务(本地DNS欺骗)中进行的攻击假设攻击者位于同一本地网络上,因此可以嗅探DNS数据包。这个假设是为了简化实验任务。第二个大实验任务为远程DNS攻击实验,攻击者在没有嗅探数据包的情况下发起远程欺骗攻击,远程攻击实验室比本地DNS欺骗实验更具挑战性。

二、实验步骤与结果

DNS_local

Testing the DNS Setup

1.使用用户容器发起对攻击者服务器IP地址查询的请求。

2.使用用户容器直接向本地DNS服务器发起请求,得到了正确的IP信息。

3.使用用户容器指定向攻击者的DNS服务器发起请求,可以看到得到了配置好的错误IP地址。

4.检查攻击者服务器上的配置,可以看到与用户请求到 的IP相同。

Task 1: Directly Spoofing Response to User

1.编写代码,当监听到用户发出的请求包时,直接响应他错误的响应包。

2.运行代码。

3.使用用户容器执行dig www.example.com命令。可以看到,得到的IP地址是我们在代码中设置的错误的IP地址。

Task 2: DNS Cache Poisoning Attack – Spoofing Answers

1.编写代码,针对DNS服务器发送欺骗报文。

2.先清除DNS缓存器中的信息。再运行攻击代码,在用户容器中执行命令。观察结果。

3.将此时DNS服务器中的缓存信息保存下来。

4.查看缓存信息。

可以看到,DNS服务器将example.com的IP地址保存了下来,实现了DNS缓存投毒。

Task 3: Spoofing NS Records

1.编写代码,发送与收到的请求相对应的虚假响应包。

2.清除本地DNS服务器的缓存。

3.运行代码。

4.使用用户容器发起查询请求dig www.example.com,得到了虚假的IP地址。

5.发起请求dig mail.example.com,可以看到的是得到了攻击者设置的虚假IP地址。

分析:在scapy代码中实现NS记录的欺骗,攻击成功后,在用户机器上为example.com域中的任何主机名运行dig命令时,都将获得ns.attacker32.com提供的假IP地址 。

6.停止运行攻击代码后,使用用户容器再次发起 dig www.example.com请求。

分析:原因同task2实验。攻击者欺骗其他DNS服务器的响应记录将存入本地DNS服务器缓存。下次,当用户的机器希望解析相同的主机名时,它将从缓存中得到欺骗性的响应。攻击者只需要欺骗一次,这种影响将持续到缓存的信息过期为止。

7.检查DNS服务器的缓存列表。可以看到,example.com的NS记录指向了攻击者的DNS服务器。

Task 4: Spoofing NS Records for Another Domain

1.修改task3的代码,添加一条NS设置信息,使得当用户查询example.com时,也会修改google.com的ns信息。

2.运行代码。清除缓存之后使用用户容器查询example.com的信息。

3.按照之前使用的方法查询本地DNS服务器中的缓存信息。可以看到攻击成功。

Task 5: Spoofing Records in the Additional Section

1.编写代码。使得DNS包包含多条A信息。

2.运行代码进行攻击,在用户容器中运行指令。结果如下。

3.查询本地DNS的缓存记录。

观察结果:

1) ns记录都显示了,但没有查看到添加的附加A记录在缓存中。

2) 可以看到,因为ns.attacker32.com在local dns server中原本就有设置,所以并没有被我们构造的Additional Section部分影响。注释掉Additional Section部分的ns.attacker32.com,缓存结果仍然与上述相同。task4的情况下,会出现‘additional ns.attacker32.com’的缓存。那是因为ns记录被覆盖只剩google.com的,没有ns.attacker32.com的,故该additional 记录存在。而我们这次ns记录存在ns.attacker32.com的。因为ns.example.com没有被使用,参考了ns记录的ns.attacker32.com的,所以www.example.com才会是1.2.3.5。

3)如果将addsec2 ns.example.net改成ns.example.com,查询返回A记录是空值。从缓存结果图中看到,ns.example.com在ns.attacker32.com前面,于是转向使用它的内容,而该服务器在additional记录中被定义为5.6.7.8,找不到而没有返回。可以推断,符合要求的additional section有参考到的,没有在缓存中显示。

4) 超出域的附加记录会直接被丢弃,即代码中对应第二第三条附加记录都没有录入到cache中。

DNS_Remote

task1:Testing the DNS Setup

与DNS_local相同

Task 2: Construct DNS request

1.编写代码,向本地的DNS服务器查询不存在的地址hi.example.com.

2.运行代码,在wireshark中抓包查看情况。可以看到本地dns服务器已经开始向其他DNS服务器查询IP信息。

Task 3: Spoof DNS Replies.

1.编写代码,发送dns响应包

2.执行代码,使用wireshark中抓包查看情况。可以看到我们发送的DNS响应包。

Task 4: Launch the Kaminsky Attack

1.编写python代码,使用scapy构造请求和回复数据包存储在文件中。

请求包:使用占位符aaaaa用于替换成随机的字符串请求不存在的网站。

响应包:添加NS信息,将example.com指向攻击者的服务器。

2.使用老师提供的C程序,用于循环发送我们构造好的请求包和构造的DNS回复包。

首先运行python代码。

再执行C程序。

3.查看本地DNS服务器的缓存,可以看到,攻击成功。

Task 5: Result Verification

1.向local dns server(已经被缓存)发起查询,在dig之前启动wireshark抓包:

分析:可以看到10.9.0.5向10.9.0.53即local dns server发起查询,local dns server继而向10.9.0.153发起查询,而10.9.0.153为ns.attacker32.com的ip,最后该dns server返回www.example.com的A记录结果。因此我们可以判断之前的攻击是成功的。

2.直接向attacker32.com发起查询。

分析:用户向本地服务器查询了攻击者服务器的IP地址,获取IP地址之后向攻击者服务器查询www.example.com的IP信息。

  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值