原文:[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. 2019新的开始,新的规划,庆祝CSDN访问量过千

    刚刚看了下博客访问量六千八百七十多个,然后我就自己刷新了一下,留个截图做纪念吧. 每一年都会有很多计划,然而到了年末却发现,未完成的还剩一大半,而完成的却屈指可数. 不过该立的flag还是要立的,顺便 ...

  2. 【学习】mysql 时间戳与日期格式的相互转换

    1.UNIX时间戳转换为日期用函数: FROM_UNIXTIME() ); 输出:2006-08-22 12:11:10 2.日期转换为UNIX时间戳用函数: UNIX_TIMESTAMP() Sel ...

  3. mysql 判断时间 语法

    今天  select * from 表名 where to_days(时间字段名) = to_days(now());  昨天  SELECT * FROM 表名 WHERE TO_DAYS( NOW ...

  4. 事件源event.target

    今天在了解检测浏览器是否能播放不同类型的视频时发现以下代码 <script> function supportType(e,vidType,codType) { myVid=documen ...

  5. spark MLlib 概念 5: 余弦相似度(Cosine similarity)

    概述: 余弦相似度 是对两个向量相似度的描述,表现为两个向量的夹角的余弦值.当方向相同时(调度为0),余弦值为1,标识强相关:当相互垂直时(在线性代数里,两个维度垂直意味着他们相互独立),余弦值为0, ...

  6. 字面常量 kotlin(2)

    字面常量数值常量字面值有以下几种:十进制: 123Long 类型用大写 L 标记: 123L十六进制: 0x0F二进制: 0b00001011注意: 不支持八进制Kotlin 同样支持浮点数的常规表示 ...

  7. windows怎么远程访问deepin linux桌面

    deepin linux端安装anydesk 1.首先点击打开任务栏上的“深度商店” 2.打开后搜索anydesk. 3.点击进入后按“安装”即可,安装完成即可在“深度商店”点击“打开”运行anyde ...

  8. 写python获取android设备的GPS及姿态信息

    在android上,我们可以使用QPython来编写.执行Python脚本.它对很多android 系统函数进行了方便的封装,使用QPython编写功能简单的小程序异常方便. 这个示例是我之前用来读取 ...

  9. global和nonlocal的用法

    1 nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量.写在内部嵌套函数里面,它实质上是将该变量定义成了全局变量,它等价于用两个global来定义该变量.只不过用两个gl ...

  10. ASP.NET MVC 发布WIN SERVER2012

    首先在打开服务器管理,点添加角色和功能 这个名字自己设置不打紧 勾选web服务器,之后点下一步 在功能选择中勾选下面部分 之后点击工具选择服务,确保web服务正在运行 此时服务端告一段落,返回主机打开 ...