【DDoS攻防】DNS缓存投毒攻击解密
0x01事件回顾
一提起Lizard Squad,他可算是最近两年最活跃的黑客组织之一了。这个自诩为“DDoS攻击之王”的黑客组织在过去一段时间里,可是没少干坏事。2014年的圣诞节,Lizard Squad成功“调戏”了IT巨头微软和索尼,攻陷了PlayStation Network和Xbox在线服务,影响了全球数亿用户上网。2015年2月,Lizard Squad又调戏了一把越南Google。越南网民在访问Google主页的时候,看到的不是Google搜索页面,而是一个男人的自拍照……
根据Google的DNS服务商OpenDNS所述,这名自称Lizard Squad成员的黑客通过将Google的域名服务器(ns1.google.com, ns2.google.com)修改成CloudFlare的IP(173.245.59.108, 173.245.58.166)来重定向访客。
(图片来源自网络)
不过Google受攻击可不止这一次,4月,马来西亚的Google也遭受了黑客攻击。这次攻击和越南那次攻击如出一辙,不同的是,这次网民访问主页时,看到的不是自拍照,而是下面这个黑底红字的页面。
(图片来源自网络)
这些事件的发生,其实都是由于黑客篡改了域名和IP地址的映射关系,将用户访问的域名指向了其他IP地址。DNS篡改可能发生在各个环节,比如在客户端侧篡改、在授权服务器端篡改,或者在缓存服务器端篡改。下面我们就来看看比较常见的几种篡改方式。
0x02 路由器DNS劫持
黑客利用路由器的漏洞入侵受害者的路由器,篡改路由器中设置的DNS服务器的地址,将DNS服务器地址指向恶意的DNS服务器。这种篡改对于一个用户来说是最可怕的,一旦发生了这种情况,那么这个用户访问的每一个域名,可能都会被解析成其他恶意地址。
之前的TP-Link路由器的劫持事件,就是黑客构造了一个恶意Web页面,页面的功能是自动登录路由器并修改DNS地址。然后,黑客再构造一个URL发送给受害者,当受害者点击这个链接的时候就访问了恶意页面。攻击要想成功的前提是黑客必须知道TP-link路由器的登录账号和密码,才能完成恶意Web页面的构造。然而实际上,大多数人都会使用TP-link路由器厂商预置的默认密码,这就给了黑客实施攻击的机会,导致路由器的DNS服务器的IP地址被篡改为恶意的IP地址。
这种劫持方式不容易被发现,受害者只要输入真实域名或者合法网站地址,黑客就可将其重定向到一个diaoyu网站上。一旦发生了这种情况,那么对于受害者来说后果是非常可怕的。受害者访问的每一个域名,可能都是假的。他看到的淘宝可能不再是淘宝,登录的网银可能也不再是网银,用户的各种敏感信息都会受到严重威胁。
对于这种方式,最有效的防御办法就是路由器设置安全系数高的密码,然后定期修改密码。另外,对于不明链接,也不要随便点击。
0x03 修改授权服务器
直接在授权服务器上修改域名和IP地址的映射关系,这是最直接,最暴力的一种方式。这种方式如果作为攻击的手段的话,需要黑客通过特殊手段获取授权服务器的管理员权限,难度系数其实是非常大的。
当然,也有另一种可能,就是出于某种特殊目的,管理员直接修改授权服务器上的域名和IP地址映射关系,这种类型比较少见,也不是我们能控制的,这里就不做详细介绍。
0x04 修改缓存服务器
这就是常见的DNS缓存投毒,是一种典型的DNS攻击,也是我们今天要讲解的重点。下面我们就一起来看一下黑客如何篡改缓存服务器。
前面我们也讲过,缓存服务器并不知道域名和IP地址的映射关系,一旦从授权服务器获取了映射关系后,会存储在内存中一段时间。直到记录老化。老化时间由DNS reply报文中的TTL决定。在这个有效期内如果再有客户端请求这个相同域名的解析,缓存服务器就会直接用缓存中的IP地址进行回应。老化以后,如果有客户端再次请求这个域名时,缓存服务器就会重新向授权服务器请求。
缓存投毒攻击就是黑客伪造了恶意的DNS reply报文,导致缓存服务器无意中将恶意的域名和IP地址映射关系存储到自己的缓存中。当客户端再通过缓存服务器请求这个域名解析时,就会被指向恶意主机。
1. 黑客向DNS缓存服务器发送一个不存在的子域名(gh1.ddos.com),请求解析。
2. 缓存服务器查找本地缓存项查不到,就会向授权服务器发起查询请求。
3. 在授权服务器回应这个请求前,黑客就会伪造大量的DNS reply报文发向缓存服务器。
为了达到攻击的目的,黑客伪造的DNS reply报文的源IP地址必须是授权服务器的源IP地址;目的端口也必须是缓存服务器的源端口;同时DNS reply报文的Query ID和DNS request报文的Query ID也要一致。
源IP地址和目的端口都很好伪造,但是Query ID伪造成功是有一定难度的。所以黑客伪造大量DNS reply报文时,会不断变换Query ID字段。可能就会有一个Query ID字段命中DNS request的Query ID。一旦先于授权服务器发送给缓存服务器,缓存服务器就会将黑客发送的伪解析IP地址作为解析地址,保存到本地的缓存表中。
4. 后续当授权服务器再将真正的回应报文发送到缓存服务器时,缓存服务器也不会接收,直接丢弃。
在DNS缓存服务器中,如果仅仅gh1.ddos.com的解析地址是假的,这个其实也没有多大影响。毕竟黑客利用投毒的这个子域名gh1.ddos.com通常都是不存在的,正常客户端也不会请求这个不存在的子域名。
但是我们再仔细看一下下面这个DNS reply报文就会发现,第一个框内是对子域名gh1.ddos.com的解析地址,而第二个框内则是主域名ddos.com所在的DNS授权服务器和IP地址的对应关系。授权服务器在回答缓存服务器请求时,也会将这部分内容一起发送过去。而缓存服务器不仅仅存储子域名的解析地址,还会将主域名的解析地址一并更新到自己的缓存列表中。
这样后续再有客户端请求这个主域名时,也会一并被指向虚假的IP地址。
对于缓存投毒,Anti-DDoS系统采用会话检查模式进行防御。在防御过程中,检查DNS reply报文的会话五元组信息(源IP地址、目的IP地址、源端口号、目的端口号、协议),Query ID和域名是否和缓存服务器发出的DNS request报文一致。
1. 当缓存服务器向授权服务器发出域名查询请求时,Anti-DDoS系统记录会话信息及请求报文中的Query ID和域名。
2. 当Anti-DDoS系统收到回应报文时,检查会话五元组、回应报文中的Query ID和域名与请求报文中的Query ID和域名是否匹配。
a. 如果命中会话五元组,并且Query ID和域名与记录的请求报文中的Query ID和域名匹配,则放行该报文。
b. 如果没有命中会话,则丢弃该报文。
c. 如果命中会话,但是域名或Query ID与请求报文不匹配,则丢弃该报文,同时要删除该会话,以免后续投毒报文完成投毒。
- 点赞
- 收藏
- 关注作者
评论(0)