防不胜防 了解DNS缓存中毒攻击原理

网络上出现史上最强大的互联网漏洞——DNS缓存漏洞,此漏洞直指我们应用中互联网脆弱的安全系统,而安全性差的根源在于设计缺陷。利用该漏洞轻则可以让用户无法打开网页,重则是网络钓鱼和金融诈骗,给受害者造成巨大损失。

缓存中毒攻击者(cache poisoning)给DNS服务器注入非法网络域名地址,如果服务器接受这个非法地址,那说明其缓存就被攻击了,而且以后响应的域名请求将会受黑客所控。当这些非法地址进入服务器缓存,用户的浏览器或者邮件服务器就会自动跳转到DNS指定的地址。

这种攻击往往被归类为域欺骗攻击(pharming attack),由此它会导致出现很多严重问题。首先,用户往往会以为登陆的是自己熟悉的网站,而它们却并不是。与钓鱼攻击采用非法URL不同的是,这种攻击使用的是合法的URL地址。

另外一个问题是,成百上千的用户会被植入缓存中毒攻击的服务器重定向,引导至黑客设立的圈套站点上。这种问题的严重性,会与使用域名请求的用户多少相关。在这样的情况下,即使没有丰富技术的黑客也可以造成很大的麻烦,让用户稀里糊涂的就把自己网银帐号密码,网游帐号密码告诉给他人。

用这种类似的方法,邮件系统也会受到黑客攻击。只不过不是给Web服务器,而是给邮件服务器非法地址,从而让系统引导至受到控制的邮件服务器中。

那么,黑客究竟是怎么做到使缓存服务器接受非法地址呢?当一个DNS缓存服务器从用户处获得域名请求时,服务器会在缓存中寻找是否有这个地址。如果没有,它就会上级DNS服务器发出请求。

在出现这种漏洞之前,攻击者很难攻击DNS服务器:他们必须通过发送伪造查询响应、获得正确的查询参数以进入缓存服务器,进而控制合法DNS服务器。这个过程通常持续不到一秒钟,因此黑客攻击很难获得成功。

但是,现在有安全人员找到该漏洞,使得这一过程朝向有利于攻击者转变。这是因为攻击者获悉,对缓存服务器进行持续不断的查询请求,服务器不能给与回应。比如,一个黑客可能会发出类似请求:1q2w3e.google.com,而且他也知道缓存服务器中不可能有这个域名。这就会引起缓存服务器发出更多查询请求,并且会出现很多欺骗应答的机会。

当然,这并不是说攻击者拥有很多机会来猜测查询参数的正确值。事实上,是这种开放源DNS服务器漏洞的公布,会让它在10秒钟内受到危险攻击。

要知道,即使1q2w3e.google.com受到缓存DNS中毒攻击危害也不大,因为没有人会发出这样的域名请求,但是,这正是攻击者发挥威力的地方所在。通过欺骗应答,黑客也可以给缓存服务器指向一个非法的服务器域名地址,该地址一般为黑客所控制。而且通常来说,这两方面的信息缓存服务器都会存储。

由于攻击者现在可以控制域名服务器,每个查询请求都会被重定向到黑客指定的服务器上。这也就意味着,黑客可以控制所有域名下的子域网址:www.bigbank.com,mail.bigbank.com,ftp.bigbank.com等等。这非常强大,任何涉及到子域网址的查询,都可以引导至由黑客指定的任何服务器上。

如何应对?

为了解决这些问题,用于查询的UDP端口不应该再是默认的53,而是应该在UDP端口范围内随机选择(排除预留端口)

但是,很多企业发现他们的DNS服务器远落后于提供网络地址转换(network address translation ,NAT)的各种设备。大部分NAT设备会随机选择NDS服务器使用的UDP端口,这样就会使得新的安全补丁会失去效果。IT经理也不会在防火墙中开放全方位的UDP端口。更严重的是,有安全研究员证明,即使提供64000UDP端口中随机选择的保护,DNS服务器也照样有可能受到中毒攻击。

现在是时候考虑保护DNS的其他方案了。UDP源端口随机化选择是一种比较有用的防护举措,但是这会打破UDP源端口随机化给与DNS服务器的保护,同由此全方位开放端口面临的风险或者降低防火墙性能这两者间的平衡关系。还有一种比较有效的防护措施就是,当检测到面临潜在攻击风险时,让DNS服务器切换到使用TCP连接。

如果攻击者猜测到了必要的参数以欺骗查询响应,那么就需要额外的防御措施了。这意味着DNS服务器需要更智能化,能够准确分析每个查询响应,以便剔除攻击者发送的非法应答中的有害信息。

时间: 2024-09-19 21:12:55

防不胜防 了解DNS缓存中毒攻击原理的相关文章

DNS优化的原理和方法

  而整个WPO其实是对浏览器(browser)的加载(load)和解析(parse)过程中的一些消耗行为进行优化, 而load和parse在整个浏览器工作过程中又互相纠结互相作用. 在这篇文字中讨论的更多是FE们能够伸手处理或者通过达成共识的方法来进行快速推动Tech们协助的一些事情. OK, 我们慢慢把浏览器的工作过程掰细了看吧. 首先, 我们先整一个浏览器如何找到一个网站的简易工作原理 – DNS查询:   首先当用户在浏览器的地址栏中敲入了网站的网址 ( 比如: alibaba.com

在FreeBSD 6.0下建立高速DNS缓存服务器

首先介绍在freebsd上如何建立高速dns缓存服务器,引用freebs d中文手册中的话: 缓存域名服务器是对任何域都不提供权威解析的域名服务器. 它自己简单地完成查询, 并记住这些查询以备后续使用. 要建立这样的服务器, 只需像平时一样配置一个域名服务器, 而不配置域就可以了 安装如下: 所使用的软件是BIND,安装完freebsd6.0后BIND是自动安装好的,版本为BIND9,路径一般为/etc/namedb.freebsd5.2及更早版本的用户可以通过到ISC网站上下载BIND9.3.

清空DNS缓存和重置TCP/IP堆栈的命令

清空DNS缓存 输入 ipconfig /flushdns 命令首先清空DNS缓存 重置TCP/IP 堆栈的命令 一个损坏的路由表可以通过重置TCP/IP堆栈进行恢复,具体方法是使用 netsh int ip reset命令

教你查看和清空Vista系统DNS缓存内容

如何查看dns缓存的内容,其实很简单无非就是用命令提示符. 步骤如下: (1)以管理员身份运行命令提示符.(注意) (2)在命令提示符下,键入ipconfig /displaydns. 然后就弹出一大堆的东西.看看我的好长好长一段. 查看dns缓存的内荣 清空DNS缓存会强制DNS查询DNS服务器而不使用存储在缓存中的信息.如果要移动和更改网站,或者在确认所键入的网站地址正确无误的情况下不断收到重复的错误信息,可能要清空DNS缓存.本文来自http://bianceng.cn(学电脑) 具体步骤

FreeBSD 6.0下建立高速DNS缓存服务器

首先介绍在freebsd上如何建立高速dns缓存服务器,引用freebs d中文手册中的话: 缓存域名服务器是对任何域都不提供权威解析的域名服务器. 它自己简单地完成查询, 并记住这些查询以备后续使用. 要建立这样的服务器, 只需像平时一样配置一个域名服务器, 而不配置域就可以了 安装如下: 所使用的软件是BIND,安装完freebsd6.0后BIND是自动安装好的,版本为BIND9,路径一般为/etc/namedb.freebsd5.2及更早版本的用户可以通过到ISC网站上下载BIND9.3.

Java网络编程从入门到精通(4):DNS缓存

在通过DNS查找域名的过程中,可能会经过多台中间DNS服务器才能找到指定的域名,因此,在DNS服务器上查找域名是非常昂贵的操作.在Java中为了缓解这个问题,提供了DNS缓存.当InetAddress类第一次使用某个域名(如www.csdn.net)创建InetAddress对象后,JVM就会将这个域名和它从DNS上获得的信息(如IP地址)都保存在DNS缓存中.当下一次InetAddress类再使用这个域名时,就直接从DNS缓存里获得所需的信息,而无需再访问DNS服务器. DNS缓存在默认时将永

win7系统清理dns缓存失败怎么办

  win7系统清理dns缓存失败怎么办          1.首先查看我们当前的网络连接是否正常; 2.如果网络连接正常的话,打开控制面板,以小图标查看方式找到管理工具并将其打开; 3.进入管理工具界面,在列表中找到服务选项,双击进入; 4.随后在服务窗口中找到"DNS Client"和"DHCP Client"服务,双击打开,选择自动,启动服务; 5.启动服务完成后,按组合键win+r打开运行窗口,输入cmd并回车进入命令提示符界面; 6.然后在命令行中输入ip

禁用IE浏览器的DNS缓存

  禁用DNS缓存的方法,将下面内容保存为注册表文件,在运行写入注册表: Windows Registry Editor Version 5.00 [HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionInternet Settings] "DnsCacheEnabled"=dword:00000000 "DnsCacheTimeout"=dword:00000000 "ServerInfoTime

XP无法清除DNS缓存的三种解决方法

  XP无法清除DNS缓存的三种解决方法          方法一:用修复本地连接刷新DNS 1.从简到难,先用最简单的方法刷新一下DNS缓存,就是用修复本地连接的方法,在桌面任务栏的右下角,右键点击本地连接图标,在弹出的菜单中选择"打开网络连接"这一项,如果任务栏没有本地连接图标,到控制面板下打开"网络连接"也一样; 2.进入网络连接窗口后,在"本地连接"上右键,选择菜单中的"修复"这一项,让系统重新修复一下; 3.在修复时