DNS劫持(缓存投毒)实验

DNS劫持(缓存投毒)实验
lololoweDNS劫持介绍(维基百科): https://zh.wikipedia.org/zh-cn/%E5%9F%9F%E5%90%8D%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%BC%93%E5%AD%98%E6%B1%A1%E6%9F%93
简单来说就是,DNS劫持就是攻击者通过某种手段,使得受害者的DNS明文请求被攻击者截获(请求还没到达真实的DNS服务器),然后攻击者返回错误的DNS解析结果,使得受害者访问错误的网站。
1. 实验环境
1.1. 网络拓扑
主机 | 地址 |
---|---|
网关 | 10.0.6.2 |
kali | 10.0.6.10 |
Win7 | 10.0.6.20 |
为简化拓扑,隐藏了网关设备:
1.2. 劫持目标
域名 | 劫持后IP |
---|---|
ccb.com | 10.0.6.10 |
www.icbc.com.cn | 10.0.6.10 |
修改ettercap的DNS劫持配置文件:
1 | mkdir -p /etc/ettercap && touch /etc/ettercap/etter.dns |
配置支持使用通配符,例如
* A 10.0.6.10
表示将所有域名劫持到10.0.6.10。
1.3. 伪装站点
在kali上使用nginx启动一个http服务器,用于伪装被劫持的站点。
1 | # 生成ssl自签证书 |
创建劫持站点的首页:
1 | cat > /tmp/index.html << EOF |
2. ARP欺骗
DNS劫持之前,需要先进行ARP网关欺骗,好让Win7与网关的通信都经过kali(让Win7误以为网关是kali)。
注意: 即使Win7手动设置了DNS服务器为网关以外的IP,也同样会被ARP欺骗影响,因为和DNS服务器通信也是需要靠网关转发的。
在kali上使用root权限运行ettercap -G
,打开ettercap的图形化界面。
如果提示ettercap不存在,则使用以下命令安装ettercap:
1 | sudo apt update |
在”Primary Interface”菜单中选择kali实际使用的网卡,然后点击右上角的对勾图标开启嗅探。开启后再点击左上角的放大镜扫描主机,扫描完成后再点击放大镜右边的按钮,查看主机扫描列表:
接着将扫描结果中的网关(10.0.6.2)添加到Target1,Win7(10.0.6.20)添加到Target2中,然后点击右上角的地球图标,在展开的菜单中选择”ARP poisoning…”(弹窗直接点”OK”),:
如果需要修改target,可以点击右上角的3个点图标,在展开的菜单中选择”Targets”,点击”Current targets”进行管理。
此时,ettercap已经成功进行ARP网关欺骗,Win7会把网关的mac地址修改成kali的mac地址,可以在Win7上使用arp -a
命令查看:
关于ARP欺骗攻击的更多信息,推荐看我以前写的博客: https://blog.lololowe.com/posts/ae0b/
3. DNS劫持
点击ettercap右上角三个点图标,在展开的菜单中选择”Plugins”,然后点击”Manage plugins,最后双击”dns_spoof”开始劫持DNS:
接着回到Win7中验证DNS劫持是否成功,使用以下命令查询DNS返回结果:
1 | :: 刷新DNS缓存 |
可以看到两个域名的DNS解析IP都被篡改成了10.0.6.10,即kali的IP地址。
再到浏览器中访问被劫持的站点 ccb.com 和 www.icbc.com.cn ,会看到浏览器提示连接步安全,其中 ccb.com 可以忽略危险继续访问,而 www.icbc.com.cn 则不行:
造成这种现象的原因是,在DNS劫持之前正常访问过这两个网站,浏览器缓存了这两个网站的信息,因此默认会使用历史记录中的HTTPS发起连接,而kali上面生成的ssl自签证书是不受CA机构信任的,所以浏览器会提示连接不安全(证书不可信)。
ccb.com 可以忽略警告继续访问,或者在地址栏中修改HTTPS为HTTP,然后访问成功:
而 www.icbc.com.cn 由于开启了HSTS,在DNS劫持之前就已经缓存了HSTS信息(时长默认一年):
因此浏览器后续会强制使用HTTPS连接此网站并且不能忽略证书错误,因此访问失败。可以在谷歌浏览器地址栏输入 chrome://net-internals/#hsts 查看HSTS缓存信息:
通过清除浏览器缓存可以去除HSTS:
或者可以结合NTP时间攻击,将Win7的时间篡改到1年以后,使HSTS缓存过期,从而绕过HSTS的防护,但这并不在本实验的范围内。
4. 总结
通过ARP欺骗,kali主机成功伪装成网关,使Win7与网关之间的通信全部经过kali。这为后续的DNS劫持奠定了基础。
通过DNS劫持,成功将目标域名 ccb.com 和 www.icbc.com.cn 的解析IP篡改为kali主机的IP(10.0.6.10)。
ccb.com可以通过忽略警告或使用HTTP访问,而www.icbc.com.cn因HSTS限制无法直接绕过,体现了HSTS的安全作用。
防御措施:
- 关于ARP欺骗的防护措施,可以参考我以前写的博客: https://blog.lololowe.com/posts/ae0b/#%E9%98%B2%E6%8A%A4;
- 在公共网络下,为了防止DNS劫持,建议使用加密DNS,例如DoT(DNS over TLS)、DoH(DNS over HTTPS);
- 对于一些重要的网站,可以在hosts文件中静态绑定域名和ip的映射关系;
- https服务器建议开启HSTS,阻止证书错误时还能继续访问站点;
- Windows建议时常使用Sigcheck工具来检查系统是否存在异常的CA根证书,防止基于证书的中间人攻击。