DNS欺骗攻击

2024-07-23

DNS欺骗攻击(精选4篇)

DNS欺骗攻击 篇1

DNS (Domain Name System) 为全球分布范围最广的分布式、多层次数据库系统, 提供从IP到域名间的映射服务, 是Internet正常运行的关键技术设施。DNS系统将便于识记的主机名映射为晦涩难记的IP, 并保障其他网络应用 (Email投递、网站访问等) 顺利进行。DNS系统一经提出即发展迅速, 全球注册主机数量从1987的2万余条发展到2005的3亿余条;独立域数量也由1987年几个发展到05年8290万余个。截至2014年6月, 中国境内域名数达到1915万个。

DNS系统因其本身存在的脆弱性导致系统安全性、保密性均受到威胁, 随着网络快速发展, DNS面临越来越多的攻击威胁。2014年11月, ICANN (国际域名与IP地址分配管理组织) 称其受到黑客攻击, 一批员工的账号、密码被盗, ICANN内部的“中央区域数据系统”中有关用户的姓名和地址信息以及与ICANN有业务往来的人士的个人信息也被盗。2014年1月21日, 全球顶级根域名服务器出现故障, 导致.com的网站无法访问。在Internet快速发展的今天, DNS重要性、安全性研究需求显得尤为突出。

1 域名系统解析原理

DNS系统分为根、顶级域名服务器、权威域名服务器、主机4个部分, 使用分布式数据库将IP地址和域名一一映射。

分析DNS欺骗攻击之前先界定其域名解析流程, DNS分为2个部分:Server (服务器端) 和Client (客户端) , 递归服务器内部已预先设置了根服务器的IP地址。DNS Server接受Client域名查询请求, 从DNS root逐层向下迭代查询。域名解析流程如图1所示 (以访问www.phei.com.cn为例) 。

客户端首先向本地DNS服务器发出查询www.phel.com.cn的IP地址的请求, 如果本地DNS服务器在本机DNS缓存表中没有查到相关记录, 则立即向根服务器发起递归查询;根服务器收到查询请求后, 将.cn域服务器地址反馈给本地DNS服务器;本地DNS服务器继续向.cn域发出查询请求, 域服务器将.com.cn反馈给本地DNS服务器;本地DNS服务器则继续向.com.cn域发出查询请求, 域服务器将phel.com.cn授权域名服务器的地址反馈给本地DNS服务器;本地DNS服务器继续向phel.com.cn发起查询, 得到www.phel.com.cn的IP地址, 以DNS应答包的方式传递给用户, 并将查询所得内容复制在本地DNS缓存表中, 以备客户端查询。

2 DNS系统欺骗攻击原理

DNS域名系统安全性与Internet能否正常运行紧密相关, DNS系统遭受网络攻击时会造成重要信息被泄密、拒绝提供服务、网络服务瘫痪等事件发生, DNS安全性隐患包括以下几方面: (1) 在设计协议时安全性考虑不足, 不能保证查询数据的真实性和完整性。 (2) Internet在全球快速推广导致DNS系统信息管理难度增大, 系统冗余性降低。 (3) 针对DNS安全性问题提出的各种改进技术如DNSSEC、分布式哈希表等难以大范围使用。

DNS欺骗攻击是攻击者事先伪造为用户信赖的DNS Server, 将查询IP改为攻击者事先指定的IP, 进而将查询网站引向攻击者网站, 实施DNS Server域名欺骗攻击。此攻击方式主要包括2种:缓存中毒、ID欺骗。

(1) 缓存投毒。为尽最大可能地快速给用户提供服务, DNS Server将收到的Domain Name和IP地址映射数据保存至本地Cache, 保存期限TTL (TTL≥0) , 在TTL不为0时, 如有访问该信息的请求信息, 无需重新查找可直接从本地答复, 此方式可高效利用缓存信息, 增强DNS设施服务效率。缓存机制的缺陷在于不检查附加数据, 缓存投毒攻击者利用此漏洞将TTL值设为较长时间即可实现长时间欺骗用户, 在TTL未失效内, 缓存内事先植入的虚假信息会快速扩散至其他DNS Server, 造成大面积缓存中毒事件发生。

(2) ID欺骗。当DNS缓存已记录的信息在缓存失效之前如有Client查询则直接返回缓存记录, 此过程使用Transaction ID与端口间的通信来标示一次通信过程。当进行域名解析时, Client用特定的ID标示向DNS Server发送解析数据包, DNS Server使用此ID向Client发送应答数据包, Client对比发送的请求数据包和应答数据包ID标示, 如一致则说明该应答信息可靠, 否则将该应答信息丢弃。

上述通信过程简洁明了, 效率高, 但易遭受攻击, 如生日攻击。此攻击来自生日悖论, 假设存在一个23人团队, 则2人同一天生日的概率为50%。生日攻击利用此特点, 向某一DNS Server请求同一域名查询时, 也同时发送大量针对该域名不同ID的答复报文, 增大了使该DNS Server的被骗几率。最常见的域名欺骗攻击是针对DNS数据报头部的事务ID进行欺骗。

3 常见DNS欺骗攻击方法

DNS常见欺骗攻击需要获取对方ID, 主要有网络监听获取ID和序列号攻击 (预测下一个ID) 法。

(1) 网络监听获取ID。为通过监听用户流量获得ID, 攻击者可选择与DNS Server或众多客户端主机中某一主机位于同一局域网内。DNS系统允许在请求信息中添加额外信息, 如IP地址、Domain Server等, Client接收到攻击的Domain Server查询请求时均被引向攻击者之前设定的Domain Server。因DNS系统仅用ID标示判定信息真实性, 且ID从Client发出、由DNS Server返回, 且客户端仅通过核实发出、返回端ID是否一致来确定信息的可靠性, 使得通过网络监听的方式获取ID的攻击成为可能。

(2) 序列号攻击原理。DNS查询报文格式中ID号所占位数为16位, 即其取值范围为0~65535, 其预测难度不大, 该攻击过程中攻击者对正确报文DNS Server发起DDOS攻击, 拖延DNS Server正确回复报文, 保证攻击者的DNS Server抢在正确的DNS Server之前回复请求端报文, 该报文内嵌ID与请求报文内嵌ID相同, Client接收先到的虚假报文, 丢弃后到的真实报文。虚假报文中内嵌的IP将Client引向攻击者诱导的非法网站。

旧版BIND可通过较近几个DNS包ID来猜测虚假ID, 新版BIND9利用上述猜测法成功概率有所下降, 但其算法依然存在漏洞。据分析, 通过新近收集到的5000个DNS包内的ID同样可成功测算出即将出现的下一个ID, 成功率高达20%, 因此, 使用此方法伪造虚假ID并进行DNS欺骗攻击的成功率较高。

4 DNS欺骗攻击检测

有关学者提出多种检测DNS欺骗攻击方法, 相关文献研究了Domain-Flux检测技术。恶意攻击软件使用的算法为DGA (域名生成算法) , 以time等参数为算子自动产生大量虚假域名并尝试连接与控制服务器。当发生DNS欺骗攻击时, Client将收到2个以上相同ID的应答报文, 但只能有1个真实的应答报文, 其余报文均为欺骗信息。但此类检测方法试用范围不同, 鉴于此, 本文提出检测方法。

4.1 被动监听检测法

被动监听检测法, 检测接收的DNS应答报文, 正常情况下应答报文只有1个, 当域名与IP存在一对多的映射关系时, 1个应答报文中将包含多个映射关系的回复, 不会出现有多个应答报文情况。因此, 如一个请求报文在额定时间内收到多个应答报文则有遭受DNS欺骗攻击的可能。

该检测法不会添加额外的网络流量负担, 但因其检测方法的消极性无法检测出网络潜在攻击威胁。

4.2 主动试探检测法

主动试探检测法, 由DNS系统主动发送检测数据包检测是否存在DNS欺骗攻击, 通常主动发送的检测数据包不可能接收到回复, 但攻击者为抢在合法数据包抵达之前能将欺骗包发给客户端, 在不验证DNS Server的IP合法性情况下抢先发送应答报文, 此情况发生说明系统受到DNS欺骗攻击。

主动试探检测法需要DNS系统主动发送大量探测包, 容易增加网络流量负担、导致网络拥塞, 且通常DNS欺骗攻击只针对特定域名, 在选择探测包包含的待解析域名时存在定位性不强的问题, 使得该方法的探测难度加大。

4.3 交叉检查查询法

交叉检查查询法, Client接收DNS应答包后反向对DNS Server查询应答包中返回的IP对应的DNS, 如两者完全一致则说明DNS系统未受到欺骗攻击, 反之亦然。

该查询方法介于前2种检测方法之间, 即对收到的数据包在被动检测基础上再主动验证, 依赖于DNS反向查询功能, 但较多数量的DNS Server不支持此功能。

4.4 使用TTL (生存时间) DNS攻击检测

TTL (Time to live) 位于IPV4包的第9字节占8bit, 其作用是限制IP数据包在网络中的留存时间, 在TTL不为0时, 如有访问该信息的请求信息, 无需重新查找可直接从本地答复。在进行DNS欺骗攻击时如需长时间欺骗则将TTL值设为较长时间即可。也是IP数据包在网络中可转发的最大跳数, 即可避免IP数据包在网络中无限循环、收发, 节约网络资源。通常同一Client发送的DNS查询请求会经过相对固定的路由、相对固定时间内到达DNS Server。即一定时间内, 从同一Client发往固定DNS Server的请求数据分组TTL值大小是相对固定的。但网络攻击者发动的DNS反射式攻击需要不同地区的多台僵尸网络控制的受控计算机协同工作, 同时发送虚假源地址的DNS请求信息, 虽然攻击者可使用虚假的源IP地址、TTL等信息, 但由于受僵尸网络控制的计算机分别位于不同地域, 因此, 真实IP地址对应的主机发送的数据分组抵达DNS Server的数量很难造假。

IP地址造假是成功实施DDOS攻击的必备条件, 因此, 使用TTL的DNS攻击检测方法可对来自相同源IP地址的DNS请求数据分组TTL值做实时对比, 如相同源IP地址的TTL值变化频繁则可对DNS请求分组做无递归的本地解析或丢弃。使用此方法可发现假IP地址并有效遏制域名反射放大攻击。

5 防御技术

(1) 遭受序列号攻击时可使用专业监听软件, 正常情况下由DNS Server回复报文, 如收到多个回复报文即怀疑有欺骗攻击;可从以下方面进行防御:仅仅授权自身管辖的域名解析提供递归查询, 且只接受域外DNS Server的DNS查询请求, 可减少遭到攻击的可能性;DNS重定向, 所有到达DNS Server的查询均重定向至另DNS Server, 对真实的用户提供正常域名查询功能, 从而屏蔽、减少虚假IP造成的故障。

(2) 缓存投毒特点是将TTL值变大, 如发现TTL值过大需重点关注。投毒攻击往往攻击银行、搜索网站、热门网站等, 可将此类网站IP记录为相应表格, 统计经常被请求解析的域名频率, 记录域名查询失败次数, 引入域名信誉机制, 如请求IP与表中记录IP不一致则说明DNS回复信息可疑。

6 结语

网络攻击的检测和防范是推动网络进步的动力, 本文分析了基于DNS构架的解析过程, 阐述了DNS欺骗攻击原理, 提出针对DNS欺骗攻击的检测方法和防范方案, 对提高DNS系统抗欺骗攻击能力和安全性有积极作用。随着网络的快速发展后续还需进一步探索更有效的检测方法, 以提高DNS系统抵御各种新型欺骗攻击的能力, 保证系统安全、稳定地运行。

参考文献

[1]天极软件频道.互联网管理机构ICANN遭攻击部分资料被泄露[EB/OL].[2014-12-22].http://soft.yesky.com/security/348/42849348.shtml.

[2]前瞻网.1月21日网络故障:根域名服务器dns遭黑客攻击致网络瘫痪[EB/OL].[2014-01-22].http://www.henan100.com/news/2014/328895.shtml.

[3]YADAV S, REDDY A K K, REDDY A L N, et al.Detecting Algorithmically Generated Malicious Domain Names[C]//In 10th ACM SIGCOMM Conference on Internet Measurement, Melbourne, Australia, November1-3, 2010.

[4]ANTONAKAKIS M, PERDISCI R, NADJI Y, et al.From Throw-Away Traffic to Bots Detecting the Rise of DGA-Based Malware[C]//In 21st USENIX Security Symposium, Bellevue, WA, USA, August 8-10, 2012.

[5]YADAV S, REDDY A L N.Winning with DNS Failures:Strategies for Faster Botnet Detection[C]//In 7th International ICST Conference on Security and Privacy in Communication Networks, London, UK, September 7-9, 2011.

[6]YADAV S, REDDY A K K, REDDY A L N, et al.Detecting Algorithmically Generated Domain-Flux Attacks with DNS Traffic Analysis[J].IEEE/ACMTransactions on Networking, 2012 (5) :1663-1677.

DNS欺骗攻击 篇2

定义: DNS欺骗就是攻击者冒充域名服务器的一种欺骗行为。

原理:如果可以冒充域名服务器,然后把查询的IP地址设为攻击者的IP地址,这样的话,用户上网就只能看到攻击者的主页,而不是用户想要取得的网站的主页了,这就是DNS欺骗的基本原理。DNS欺骗其实并不是真的“黑掉”了对方的网站,而是冒名顶替、招摇撞骗罢了。

现在的Internet上存在的DNS服务器有绝大多数都是用bind来架设的,使用的bind版本主要为bind 4.9.5 P1以前版本和bind 8.2.2-P5以前版本.这些bind有个共同的特点,就是BIND会缓存(Cache)所有已经查询过的结果,这个问题就引起了下面的几个问题的存在.

1>.DNS欺骗

在DNS的缓存还没有过期之前,如果在DNS的缓存中已经存在的记录,一旦有客户查询,DNS服务器将会直接返回缓存中的记录.

下面我们来看一个例子:

一台运行着unix的Internet主机,并且提供rlogin服务,它的IP地址为123.45.67.89,它使用的DNS服务器(即/etc/resolv.conf中指向的DNS服务器)的IP地址为98.76.54.32,某个客户端(IP地址为38.222.74.2)试图连接到unix主机的rlogin端口,假设unix主机的/etc/hosts.equiv文件中使用的是dns名称来允许目标主机的访问,那么unix主机会向IP为98.76.54.32的DNS服务器发出一个PTR记录的查询:

123.45.67.89 ->98.76.54.32 [Query]

NQY: 1 NAN: 0 NNS: 0 NAD: 0

QY: 2.74.222.38.in-addr.arpa PTR

IP为98.76.54.32的DNS服务器中没有这个反向查询域的信息,经过一番查询,这个DNS服务器找到38.222.74.2和38.222.74.10为74.222.38.in-addr.arpa.的权威DNS服务器,所以它会向38.222.74.2发出PTR查询:

98.76.54.32 ->38.222.74.2 [Query]

NQY: 1 NAN: 0 NNS: 0 NAD: 0

QY: 2.74.222.38.in-addr.arpa PTR

请注意,38.222.74.2是我们的客户端IP,也就是说这台机子是完全掌握在我们手中的.我们可以更改它的DNS记录,让它返回我们所需要的结果:

38.222.74.2 ->98.76.54.32 [Answer]

NQY: 1 NAN: 2 NNS: 2 NAD: 2

QY: 2.74.222.38.in-addr.arpa PTR

AN: 2.74.222.38.in-addr.arpa PTR trusted.host.com

AN: trusted.host.com A 38.222.74.2

NS: 74.222.38.in-addr.arpa NS ns.sventech.com

NS: 74.222.38.in-addr.arpa NS ns1.sventech.com

AD: ns.sventech.com A 38.222.74.2

AD: ns1.sventech.com A 38.222.74.10

当98.76.54.32的DNS服务器收到这个应答后,会把结果转发给123.45.67.98,就是那台有rlogin服务的unix主机(也是我们的目标 :) ),并且98.76.54.32这台DNS服务器会把这次的查询结果缓存起来.

这时unix主机就认为IP地址为38.222.74.2的主机名为trusted.host.com,然后unix主机查询本地的/etc/hosts.equiv文件,看这台主机是否被允许使用rlogin服务,很显然,我们的欺骗达到了.

在unix的环境中,有另外一种技术来防止这种欺骗的发生,就是查询PTR记录后,也查询PTR返回的主机名的A记录,然后比较两个IP地址是否相同:

123.45.67.89 ->98.76.54.32 [Query]

NQY: 1 NAN: 0 NNS: 0 NAD: 0

QY: trusted.host.com A

很不幸,在98.76.54.32的DNS服务器不会去查询这个记录,而会直接返回在查询2.74.222.38.in-addr.arpa时得到的并且存在缓存中的信息:

98.76.54.32 ->123.45.67.89 [Query]

NQY: 1 NAN: 1 NNS: 2 NAD: 2

QY: trusted.host.com A

AN: trusted.host.com A 38.222.74.2

NS: 74.222.38.in-addr.arpa NS ns.sventech.com

NS: 74.222.38.in-addr.arpa NS ns1.sventech.com

AD: ns.sventech.com A 38.222.74.2

AD: ns1.sventech.com A 38.222.74.10

那么现在unix主机就认为38.222.74.2就是真正的trusted.host.com了,我们的目的达到了!

这种IP欺骗的条件是:你必须有一台Internet上的授权的DNS服务器,并且你能控制这台服务器,至少要能修改这台服务器的DNS记录,我们的欺 能进行.

2>.拒绝服务攻击 Denial of service

还是上面的例子,如果我们更改位于38.222.74.2的记录,然后对位于98.76.54.32的DNS服务器发出2.74.222.38.in-addr.arpa的查询,并使得查询结果如下:

因为74.222.38.in-addr.arpa完全由我们控制,所以我们能很方便的修改这些信息来实现我们的目的.

38.222.74.2 ->98.76.54.32 [Answer]

NQY: 1 NAN: 2 NNS: 2 NAD: 2

QY: 2.74.222.38.in-addr.arpa PTR

AN: 2.74.222.38.in-addr.arpa PTR trusted.host.com

AN: www.company.com A 0.0.0.1

NS: 74.222.38.in-addr.arpa NS ns.sventech.com

NS: 74.222.38.in-addr.arpa NS ns1.sventech.com

AD: ns.sventech.com A 38.222.74.2

AD: ns1.sventech.com A 38.222.74.10

这样一来,使用98.76.54.32这台DNS服务器的用户就不能访问www.company.com了,因为这个IP根本就不存在!

3>.偷取服务 Theft of services

还是上面的例子,只是更改的查询结果如下:

38.222.74.2 ->98.76.54.32 [Answer]

NQY: 1 NAN: 3 NNS: 2 NAD: 2

QY: 2.74.222.38.in-addr.arpa PTR

AN: 2.74.222.38.in-addr.arpa PTR trusted.host.com

AN: www.company.com CNAME www.competitor.com

AN: company.com MX 0 mail.competitor.com

NS: 74.222.38.in-addr.arpa NS ns.sventech.com

NS: 74.222.38.in-addr.arpa NS ns1.sventech.com

AD: ns.sventech.com A 38.222.74.2

AD: ns1.sventech.com A 38.222.74.10

这样一来,一个本想访问www.competitor.com的用户会被带到另外一个地方,甚至是敌对的公司的竹叶(想想把华为和北电联起来是什么样的感觉. :) ).并且发给company.com的邮件会被发送给mail.compertitor.com.(越来越觉得在网络上的日子不踏实! xxbin这样想).

4>.限制

对这些攻击,也有一定的限制.

首先,攻击者不能替换缓存中已经存在的记录.比如说,如果在98.76.54.32这个DNS服务器上已经有一条www.company.com的CNAME记录,那么攻击者试图替换为www.competitor.com将不会成功.然而,一些记录可以累加,比如A记录,如果在DNS的缓存中已经存在一条www.company.com的A记录为1.2.3.4,而攻击者却欺骗DNS服务器说www.company.com的A记录为4.3.2.1,那么www.company.com将会有两个A记录,客户端查询时会随机返回其中一个.(呵呵,这不是loading balance么?)

其次,DNS服务器有个缓存刷新时间问题,如果www.netbuddy.org的TTL为7200,那么DNS服务器仅仅会把www.netbuddy.org的信息缓存7200秒或者说两个小时.如果攻击者放入一条TLL为604800的A记录,那么这条记录将会在缓存中保存一周时间,过了默认的两天后,这个DNS服务器就会到处“分发”攻击者假造的记录.

下面是常用的几种可以累加和不能累加的记录:

A can add

NS can add

MX can add

DNS缓存中毒攻击与防范 篇3

为了在网络上标识一个实体, TCP/IP协议使用了IP地址, 由于IP地址难于记忆, 需要一种容易记忆的方法, 于是就产生了一种名字到地址或地址到名字的映射机制。在Internet初期, 这种映射可以使用一个主机文件来保存, 文件只需要包括名字和地址这两列, 当程序或用户想把名字映射为地址时, 去查找这个主机文件可以了。但是网络迅速的发展, 已经不可能再继续使用主机文件来保存这种映射关系, 因为主机文件会太大而无法存储所有信息, 而且, 每当出现变化时, 也必须对全世界的所有主机文件都进行更新, 使用一个文件的方式维护IP地址与名称之间的转换将不再适合, 于是DNS就这样诞生了。

DNS是用于管理主机名称和地址信息映射的分布式数据库系统, 将这个巨大的映射信息划分成许多较小的部分, 并把每一部分存储在不同的计算机上, 需要映射的计算机可以查询一个最近的持有所需要信息的计算机。DNS目前已经成为大部分网络应用的基础了。一旦遭受攻击, 用户将不能进行正常的网络访问, 因此DNS的安全影响巨大。

在DNS攻击中危害比较大的当属DNS缓存中毒。接下来我们将详细介绍缓存中毒的攻击原理和过程, 以及如何防护。

1 DNS缓存中毒攻击原理

在介绍攻击原理和过程之前首先来介绍一下DNS工作的过程。

DNS被设计成客户-服务器应用程序, 需要把地址映射为名字或把名字映射为地址的主机需要调用DNS解析程序, 向最近的DNS服务器发出查询请求, 此时, DNS服务器可以有两种方式来响应客户的请求, 一种叫递归解析, 另一种叫迭代解析。DNS缓存中毒攻击主要是针对递归解析方式工作并缓存非本域的解析结果的DNS服务器。下面就主要介绍下递归解析过程。

DNS递归解析过程如图1所示。

(1) 应用程序需要解析一个域名时, 会向本机上的DNS客户端--解析程序发起域名解析的请求, 解析程序收到应用程序的请求后会代表应用程序向首选DNS服务器DNS1发起域名解析请求;

(2) DNS1收到解析请求后会去查询自己的管辖域, 如果请求的是自己管辖域的域名就会直接将查询结果返回给解析程序, 进而传递给应用程序, 如果不在DNS1的管辖域内, DNS1就向它的上级服务器DNS2发起解析请求, 等待DNS2的查询结果;

(3) 如果DNS2解析不了, 就会告诉DNS1, 我解析不了, 但是我知道DNS3可能会知道, 你去问问DNS3看看;

(4) DNS1就会给DNS3发出解析请求, 等到DNS3的查询结果;

(5) 如果DNS3可以解析, 那么就告诉DNS1解析结果, 如果DNS3也解析不了, 那么DNS3也会像DNS2那样, 告诉DNS它所知道的某个DNS可能会知道;

(6) 最后, DNS1又向DNS4发出查询请求, 等待查询结果;

(7) DNS4可以解析该域名, 就发送一个相应包给DNS1解析结果;

(8) DNS1收到解析结果后就会将结果发送给客户端的解析程序, 并将解析结果保存在自己的缓存中, 以便以后再有请求解析该域名时, 就可以直接从缓存中得到解析的结果, 提高效率。至此, 整个解析过程就结束了。

在DNS1发出的查询请求中会包含一个TID, 用来表示某个查询, 在收到的响应数据包中也同样会包括TID, 表示是对某个TID查询请求的结果响应, DNS1会根据TID来判断是它发出的某个请求的响应。

DNS服务器不是收到的任何DNS响应数据包都会接受的, 它会解码数据包, 检查数据包是否符合接受的标准, 那DNS服务器检查数据包中的哪些数据来判断该数据包是不是它所希望的包呢?

(1) 响应数据包中目的端口

在DNS服务器发出的查询请求包中包含了它的UDP端口号, 对方收到该数据包后返回的响应数据包中的目的端口号就应该为DNS服务器发出包的源UDP端口号, 如果收到数据包中的目的端口号不对, 就说明不是对DNS服务器发出的请求的响应, 因此, 网络协议栈就会直接丢弃该数据包, 而不会将数据包传递到DNS服务器。

(2) 响应数据包中的问题域

当给某个查询请求数据包发回响应数据包时, DNS服务器会拷贝请求数据包中的问题域, 因此DNS服务器收到响应数据包后就可以通过检查问题域是否与发出的查询包中的问题域是否一致来判断响应数据包的合法性。举个例子, DNS1向DNS2发出问题域是www.nsfocus.com的请求数据包, 询问www.nsfocus.com的IP地址, DNS1不能将问题域为www.baidu.com的响应数据包中的地址做为查询域名为www.nsfocus.com的地址的回答。当出现这样的情况服务器就会丢弃该数据包。

(3) 响应数据包中的查询ID (TID)

DNS服务器没发出一个查询请求都会分配对应的一个查询ID号, 在内部对应是某一个域名查询请求, 在DNS服务器内部区分不同的查询就要TID号, 如果DNS服务器收到的响应数据包中的TID号不在DNS服务器等待响应数据的TID中, 就表示DNS服务器收到的响应数据包不是回答自己发出的查询请求的, 服务器就会丢弃该数据包。

(4) 响应数据包中的授权域和附加域

授权域和附加域中的域名必须和问题域中的域名是同属于某个域名下的子域名。

如果上述所有条件都满足了, DNS域名服务器就会接受该响应数据包是对它发出的某个查询请求的响应, 使用相应数据包中的数据, 并缓存结果。

如果某个攻击者可以预测和伪造响应数据包, 他就可以对DNS服务器发起缓存中毒攻击了。由于DNS服务器发送的数据包中的TID只有16位, 而且大部分的DNS实现发出的请求中的源端口都是固定不变的。因此, 攻击者就可以伪造DNS响应包, DNS服务器在收到响应包后就会将解析结果保存在自己的缓存中, 进而实现了缓存中毒攻击。

值得注意的是当DNS服务器收到了不是它所希望的的数据包时, 它就会简单的丢弃数据包, 因此, 攻击者就不必每次都需要猜对所有的数据, 可以发送许多包猜测一些关键的参数。

由于DNS服务器发出的请求包中的源端口都是固定的, 因此, 攻击者就可以向攻击目标发送一个精心构造的域名请求, 通过上述的递归解析, 最终攻击目标就会向攻击者控制的DNS服务器发出查询请求, 此时, 攻击者就可以通过抓包来得到攻击目标发出查询请求时所用的UDP端口是多少。接下来就是猜测目标DNS服务器查询包中的TID了。由于一些DNS实现使用了简单的TID生成算法, 如, 简单的加一, 这样就可以预测DNS服务器下一个查询请求会使用的TID了, 攻击者就可以向目标服务器发送大量的带预测TID的请求响应包来命中目标服务器的查询请求, 在目标服务器接收了伪造的响应包后, 就会将伪造包中的响应数据存储在自己的缓存中, 到此DNS缓存中毒就算成功了。

2 DNS缓存中毒的防护

及时检查自己的DNS服务器是否存在DNS缓存中毒漏洞, 如果发现了自己的DNS服务器存在该漏洞就可以在被攻击前采取措施修补, 避免攻击事件的发生。

如何检查DNS服务器是否存在DNS缓存中毒漏洞的?

目前检查DNS服务器是否存在缓存中毒漏洞的主要方法是模拟攻击过程中的一部分, 对客户的DNS服务器不会造成任何损害。检查的具体过程是首先需要搭建一个自己可以控制DNS服务器, 与扫描器协同工作, 让扫描器向要检查的DNS服务器查询只有控制的DNS服务器才能解析的域名请求, 被检查的DNS服务器需要解析该域名就会向别的DNS服务器请求解析, 根据前文介绍的DNS服务器解析原理, 最终被检查的服务器发出的查询请求可以被导向到我们控制的DNS服务器, 这样, 控制的服务器就可收到检查服务器的请求, 进而可以收集到检查服务器发出请求包的特征, 被控服务器就可以将收集到的特征信息作为查询的响应数据返回给检查的DNS服务器, 进而可以返回给扫描器, 这样扫描器就可以根据收集的特征来判断检查的DNS服务器是否存在缓存中毒漏洞。

绿盟科技的远程安全评估系统使用了类似技术进行相关漏洞的扫描并提供了解决方案。

详细解决方案可以参考绿盟科技漏洞库中相关描述:http://www.nsfocus.net/index.php?act=sec_bug&do=view&bug_id=12124

技术层面的防护措施如下:

(1) UDP源端口随机化选择是一种比较有用的防护举措, 不应该再是默认的53, 而是应该在UDP端口范围内随机选择, 使得投毒命中的概率极大的降低。

(2) 加密所有对外的数据流, 对服务器来说就是尽量使用SSH之类的有加密支持的协议, 对一般用户应该用PGP之类的软件加密所有发到网络上的数据。

(3) 禁用DNS缓存, 在注册表中找到对应的键值, 进行修改并保存。

(4) 及时刷新DNS, DNS缓存会被重建, 再次用域名访问IP服务器, 故障消失。

(5) 修改TTL值可以有效防止缓存中毒, 但较小的TTL值会增加服务器的负担, 应根据服务器的性能和网络情况合理地选择。

(6) 采用DNSSEC机制, 依靠公钥技术对于包含在DNS中的信息创建密码签名。密码签名通过计算出一个密码hash数来提供DNS中数据的完整性, 并将该hash数封装进行保护。私/公钥对中的私钥用来封装hash数, 然后可以用公钥把hash数译出来。如果这个译出的hash值匹配接收者刚刚计算出来的hash数, 那么表明数据是完整的。

3 总结

最近几次大规模的DNS攻击事件, 充分暴露了DNS协议的安全隐患。DNS的安全脆弱性和DNSSEC强大的优越性促使我们要抓紧全面实施DNSSEC, 但是DNSSEC还不能完全解决DNS安全问题, 而且很多技术问题还在研究过程中, 所以在彻底实施DNSSEC之前要考虑别的有效防范措施!不过, 有理由相信有了不断完善的DNSSEC技术DNS安全问题将有望获得全面解决。目前我们的扫描器已经实现了对查询包中端口固定的DNS服务器的缓存中毒扫描的功能。

参考文献

[1]W.Richard Stevens.[M]TCP/IP协议详解.2006.

DNS欺骗的原理、实战及防御 篇4

DNS 即 Domain Name System 的缩写,域名系统以分布式数据库的形式将域名和IP地址相互映射,DNS协议即域名解析协议,简单的说:DNS是用来解析域名的。有了DNS我们就不用再记住烦人的IP地址,用相对好记的域名就可以对服务器进行访问,即使服务器更换了IP地址,我们依旧可以通过域名访问该服务器,这样能够使我们更方便的访问互联网。

为了方便理解DNS的工作原理,我简单做了一幅图:

假如我们要访问 www.baidu.com ,首先要向本地DNS服务器发出DNS请求,查询 www.baidu.com 的IP地址,如果本地DNS服务器没有在自己的DNS缓存表中发现该网址的记录,就会向根服务器发起查询,根服务器收到请求后,将com域服务器的地址返回给本地DNS服务器,本地DNS服务器则继续向com域发出查询请求,域服务器将 baidu.com 授权域名服务器的地址返回给本地DNS服务器,本地DNS服务器继续向 baidu.com 发起查询,得到 www.baidu.com 的IP地址。

本地DNS服务器得到 www.baidu.com 对应的IP地址后以dns应答包的方式传递给用户,并且在本地建立DNS缓存表。

Windows下查看和刷清空DNS缓存表的命令: ipconfig /displaydns   ipconfig /flushdns

0×01.2 DNS欺骗原理

尽管DNS在互联网中扮演着如此重要的角色,但是在设计DNS协议时,设计者没有考虑到一些安全问题,导致了DNS的安全隐患与缺陷。

DNS欺骗就是利用了DNS协议设计时的一个非常严重的安全缺陷。

首先欺骗者向目标机器发送构造好的ARP应答数据包(关于ARP欺骗请看文章《中间人攻击——ARP欺骗的原理、实战及防御 》),ARP欺骗成功后,嗅探到对方发出的DNS请求数据包,分析数据包取得ID和端口号后,向目标发送自己构造好的一个DNS返回包,对方收到DNS应答包后,发现ID和端口号全部正确,即把返回数据包中的域名和对应的IP地址保存进DNS缓存表中,而后来的当真实的DNS应答包返回时则被丢弃。

假设嗅探到目标靶机发出的DNS请求包有以下内容

Source address : 192.168.1.57

Destination address : ns.baidu.com

Source port : 1234

Destination port : 53 (DNS port)

Data : www.baidu.com

我们伪造的DNS应答包如下:

Source address : ns.baidu.com

Destination address : 192.168.1.57

Source port : 53 (DNS port)

Destination port : 1234

Data : www.baidu.com 192.168.1.59

目标靶机收到应答包后把域名以及对应IP保存在了DNS缓存表中,

这样 www.baidu.com 的地址就被指向到了192.168.1.59上,

0×02.1 实战DNS欺骗

同ARP欺骗一样,DNS欺骗也可以被称为DNS毒化,属于中间人攻击,我还是用虚拟机来模拟DNS欺骗攻击

用到的工具是Ettercap

首先来看目标靶机,

很明显现在www.baidu.com指向到的IP地址是正确的,

接着我们用ettercap来进行DNS欺骗,首先找到etter.dns这个配置文件并且编辑

添加一条A记录,将 www.baidu.com 指向到本机IP

保存并且退出,使用ettercap开始欺骗:

接着我们在到受到攻击的主机上看一下:

可以看到,目标主机对域名www.baidu.com的访问已经被指向到192.168.1.59

在浏览器中访问该域名便访问到事先搭建好的一台WEB服务器

以上就是一次成功的DNS欺骗

DNS欺骗的危害是巨大的,我不说大家也都懂得,常见被利用来钓鱼、挂马之类的

0×02.2 DNS欺骗的防范

DNS欺骗是很难进行有效防御的,因为大多情况下都是被攻击之后才会发现,对于避免DNS欺骗所造成危害,本菜鸟提出以下建议

1.因为DNS欺骗前提也需要ARP欺骗成功。所以首先做好对ARP欺骗攻击的防范。

2.不要依赖于DNS,尽管这样会很不方便,可以使用hosts文件来实现相同的功能,Hosts文件位置:

windows xp//vista//7 系统的HOSTS文件位置 c:windowssystem32driversetc 用记事本打开即可进行修改。

3.使用安全检测软件定期检查系统是否遭受攻击

4.使用DNSSEC,DNSSEC详细介绍:baike.baidu.com/view/3421039.htm

by: TaskKilL

上一篇:粮仓湿度检测系统设计下一篇:高速图像采集