原文:[DNS Cache Poisoning]( https://medium.com/iocscan/dns-cache-poisoning-bea939b5afaf)

译者:neal1991

welcome to star my articles-translator, providing you advanced articles translation. Any suggestion, please issue or contact me

LICENSE: MIT

DNS 欺骗是 DNS 服务器记录更改导致恶意重定向流量的结果。DNS 欺骗可以通过直接攻击 DNS 服务器(我们将在这里讨论)或通过任何形式的专门针对 DNS 流量的中间人攻击来执行。

DNS 缓存欺骗以一种利用 DNS 通信结构的方式明确地工作。当 DNS 服务器尝试在域上执行查找时,它会将请求转发到根权威 DNS,并迭代地沿着 DNS 服务器链向下查询,直到它到达域上的权威 DNS 服务器。由于本地 DNS 服务器不知道哪个服务器负责哪个域,并且不知道到每个权威服务器的完整路由,因此只要回复与查询匹配并且格式正确,它就会从任何地方接受对其查询的回复。攻击者可以通过在回复本地 DNS 服务器时击败实际的权威 DNS 服务器来利用此设计,如果这样做,本地 DNS 服务器将使用攻击者的 DNS 记录而不是实际的权威答案。由于 DNS 的性质,本地 DNS 服务器无法确定哪个回复是真实的,哪个是假的。

由于 DNS 服务器将在内部缓存查询,因此每次请求域时,他们不必浪费时间查询权威服务器,从而加剧了这种攻击。这带来了另一个问题,因为如果攻击者可以击败权威DNS 服务器进行回复,那么攻击者记录将被本地 DNS 服务器缓存,这意味着任何使用本地DNS服务器的用户都将获得攻击者记录,可能会重定向所有使用该本地 DNS 服务器的用户都可以访问攻击者的网站。

DNS 缓存投毒的例子

生日攻击的盲目响应伪造

DNS 协议交换不验证对递归迭代查询的响应。验证查询只会检查 16 位事务 ID 以及响应数据包的源 IP 地址和目标端口。在 2008 年之前,所有 DNS 使用固定端口53 解析.因此,除了事务 ID 之外,欺骗 DNS 回复所需的所有信息都是可预测的。用这种弱点攻击 DNS 被称为“生日悖论”,平均需要 256 次来猜测事务 ID。为了使攻击成功,伪造的 DNS 回复必须在合法权威响应之前到达目标解析器。如果合法响应首先到达,它将由解析器缓存,并且直到其生存时间(TTL)到期,解析器将不会要求权威服务器解析相同的域名,从而防止攻击者中毒映射该域,直到 TTL 到期。

Kaminsky 漏洞

在 2008 年 在 Black Hat 上有人揭示了生日攻击的拓展,其中基本的盲猜技术保持不变。该攻击利用了 DNS 响应的基本特性,因为 DNS 响应可以是直接应答(请求的直接 IP 地址)或引用(对给定区域具有权威性的服务器)。生日攻击伪造了一个为给定域记录注入错误条目的答案。 Kaminsky 漏洞使用引用来绕过先前条目上的 TTL 对整个域进行错误输入。基本思想是攻击者选择他们希望攻击的域,然后向目标解析器查询尚未被解析器缓存的子域(定位不存在的子域是一个很好的选择,记录是没有被 DNS 解析器缓存)。由于子域不在缓存中,因此目标解析器向该域的权威服务器发送查询。正是在这一点上,攻击者用大量伪造的响应来淹没解析器,每个伪造的响应都有不同的伪造事务 ID 号。如果攻击者成功注入伪造响应,则解析器将为权威服务器缓存错误映射。对受感染域的目标解析器的未来 DNS 查询将导致所有请求被转发到攻击者控制器权威解析器,使攻击者能够提供恶意响应,而无需为每个新 DNS 记录注入假条目。

窃听

许多增强 DNS 安全性的新提议包括源端口随机化,0x20 XOR 编码,WSEC-DNS,这些都取决于用于身份验证的组件的不对称可访问性。 换句话说,它们通过隐匿而不是通过身份验证和加密的机密性来提供安全性。他们的唯一目标是如上所述防止盲目攻击 使用这些安全方法仍然使 DNS 容易遭受受损服务器和网络窃听者的轻微攻击,以打破默默无闻并执行如上所述的相同攻击,这次没有盲目猜测。 即使在交换环境中,也可以使用 ARP 中毒和类似技术强制所有数据包进入恶意计算机,并且可以击破这种混淆技术。

DNS 缓存投毒缓解

DNSSEC

防止 DNS 缓存被投毒的最佳方法是实现加密和身份验证的安全方法。DNS 作为一种过时的协议以及整个互联网的支柱,令人惊讶的是仍然是一种未加密的协议,没有对它收到的条目和响应进行任何形式的验证。

当然,解决方案是提供一种称为 DNS Secure 或 DNSSEC的验证和身份验证方法。该协议创建了与 DNS 记录一起存储的唯一加密签名。然后 DNS 解析器使用签名来验证 DNS 响应,确保记录未被篡改。此外,它还提供了从 TLD 到域权威区域的信任链,确保了 DNS 解析的整个过程是安全的。

尽管有这些明显的好处,但 DNSSEC 的采用速度很慢,许多不那么受欢迎的 TLD 仍然没有利用 DNSSEC 来保证安全。主要问题是 DNSSEC 设置复杂,需要升级设备来处理新协议,另外由于历史上大多数 DNS 欺骗攻击的罕见和不可知性,DNSSEC 的实现不被视为优先级,通常只执行一次应用就达到其生命周期的终点。

可以扫描二维码或者搜索 mad_coder 关注微信公众号,点击阅读原文可以获取链接版原文。

DNS 缓存投毒的更多相关文章

  1. 常见的DNS攻击——偷(劫持)、骗(缓存投毒)、打(DDos)

    常见的DNS攻击包括: 1) 域名劫持 通过采用黑客手段控制了域名管理密码和域名管理邮箱,然后将该域名的NS纪录指向到黑客可以控制的DNS服务器,然后通过在该DNS服务器上添加相应域名纪录,从而使网民 ...

  2. 修改Hosts为何不生效,是DNS缓存?

    Update: 如果浏览器使用了代理工具,修改 Hosts 也不会生效.这里是因为,浏览器会优先考虑代理工具(如添加 pac 文件.SwitchySharp等)的代理,建议调试的时候先关闭这些代理. ...

  3. 刷新DNS命令 如何刷新DNS缓存(flushdns)

    运行:ipconfig /displaydns这个命令,查看一下本机已经缓存了那些的dns信息的,然后输入下面的命令 ipconfig /flushdns               这时本机的dns ...

  4. 刷新本地的DNS缓存数据

    ipconfig /flushdns”执行,刷新本地的DNS缓存数据. ipconfig /displaydns      查看本地DNS缓存记录的命令为:ipconfig /displaydns.你 ...

  5. DNS缓存

    有DNS的地方,就有缓存. 浏览器.操作系统.Local DNS.根域名服务器,它们都会对DNS结果做一定程度的缓存.本文总结一些常见的浏览器和操作系统的DNS缓存时间. Table of Conte ...

  6. 如何刷新DNS缓存

    经常换空间的朋友一定知道,域名解析到新空间后,要一段时间才会生效到新空间,这是由于本地的DNS生效不及时导致的.这里青互联教大家一个即时更新本地DNS的方法. 在不同的系统中刷新DNS缓存的方法如下. ...

  7. Chrome清除dns缓存

    Chrome清除dns缓存 为了加快访问速度,Google Chrome浏览器采用了预提DNS记录,在本地建立DNS缓存的方法,加快网站的连接速度.你在谷歌Chrome浏览器的地址栏中输入about: ...

  8. 清除Windows的DNS缓存

    最近ESET杀毒软件老是提示受到DNS缓存攻击,然后就不能打开网页,或者打开得很慢.这是由于缓存的DNS被更改,访问的是错误的IP地址造成的. 解决的办法就是清除DNS缓存,打开DOS命令窗口,先后输 ...

  9. 【点滴积累,厚积薄发】修改hosts,并刷新dns缓存

    Windows系统下hosts位置 C:\Windows\System32\drivers\etc 修改hosts后,要想马上生效,需要运行命令来刷新DNS缓存:ipconfig /flushdns

随机推荐

  1. Java内存模型之可见性问题

    本博客系列是学习并发编程过程中的记录总结.由于文章比较多,写的时间也比较散,所以我整理了个目录贴(传送门),方便查阅. 并发编程系列博客传送门 前言 之前的文章中讲到,JMM是内存模型规范在Java语 ...

  2. LeetCode 46. 全排列(Permutations)

    题目描述 给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [ ...

  3. 定时刷新指定div层

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  4. Python学习笔记:字典型的数据结构

    根据书上的定义,字典是将数据与键相关联,这个键相当于是一组数据的一个名称,键必须是唯一的. python中提供了内置的映射类型--字典.映射其实就是一组key和value以及之间的映射函数,其特点是: ...

  5. QQ聊天监视器(简易版),可以获取当前QQ进程的聊天窗口内容

    原始出处: https://www.cnblogs.com/Charltsing/p/QQChatsMonitor.html 监视QQ聊天信息有很多种方法,最简易的就是直接抓取聊天窗口内容,一个QQ进 ...

  6. OpenCV学习笔记(11)——Canny边缘检测

    了解Canny边缘检测的概念 1.原理 Canny边缘检测是一种非常流行的边缘检测算法,是 John F.Canny在1986年提出的.它是一个有很多步构成的算法 1)噪声去除 使用5*5的高斯滤波器 ...

  7. 阶段3 3.SpringMVC·_01.SpringMVC概述及入门案例_03.入门程序之需求分析

  8. 对docker一些认知

    关于docker(应用容器引擎) docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器是完全使用 ...

  9. linux创建软链接

    linux软链接linux下的软链接类似于windows下的快捷方式实例:ln -s /home/gamestat    /gamestatln -s a b 中的 a 就是源文件,b是链接文件名,其 ...

  10. 慕课网_Java Socket应用---通信是这样练成的

    第1章 网络基础知识 1-1 网络基础简介 (10:21) 第2章 Java 中网络相关 API 的应用 2-1 Java 中的 InetAddress 的应用 (08:10) import java ...