网络技术 ·

什么是DNS,为什么会被DNS劫持

域名  如在浏览器地址栏输入的www.baidu.com,www.hao123.com等我们称之为域名,域名即网站名称。如果说互联网的本质是连接一切,域名则为“一切”提供了身份标识功能,而IP为“一切”提供了寻址功能。域名和IP的关系可类比每个人的姓名与住址。

根域、顶级域、二级域、子域   域名采用层次化的方式进行组织,每一个点代表一个层级。一个域名完整的格式为www.baidu.com. 最末尾的点代表根域,常常省略;com即顶级域(TLD);baidu.com即二级域。依次类推,还有三级域、四级域等等。子域是一个相对的概念,baidu.com是com的子域,www.baidu.com是baidu.com的子域。

域名系统  即DNS(Domain Name System)。DNS主要解决两方面的问题:域名本身的增删改查以及域名到IP如何映射。

正向解析  查找域名对应IP的过程。

反向解析  查找IP对应域名的过程。

解析器  即resolver,处于DNS客户端的一套系统,用于实现正向解析或者反向解析。

权威DNS  处于DNS服务端的一套系统,该系统保存了相应域名的权威信息。权威DNS即通俗上“这个域名我说了算”的服务器。

递归DNS  又叫local dns。递归DNS可以理解为是一种功能复杂些的resolver,其核心功能一个是缓存、一个是递归查询。收到域名查询请求后其首先看本地缓存是否有记录,如果没有则一级一级的查询根、顶级域、二级域……直到获取到结果然后返回给用户。日常上网中运营商分配的DNS即这里所说的递归DNS。

转发DNS  转发DNS是一种特殊的递归。如果本地的缓存记录中没有相应域名结果时,其将查询请求转发给另外一台DNS服务器,由另外一台DNS服务器来完成查询请求。

公共DNS  公共DNS属于递归DNS。其典型特征为对外一个IP,为所有用户提供公共的递归查询服务。

以用户在浏览器输入www.baidu.com为例,我们详细说明一下实际域名查询过程:

1.  用户输入www.baidu.com,浏览器调用操作系统resolver发起域名查询,此处不考虑浏览器的域名缓存;resolver封装一个dns请求报文,并将其发给运营商分配的local dns地址(或者用户自己配置的公共dns);

2.  local dns查询缓存,如果命中则返回响应结果;否则向根服务器发起查询;

3.  根服务器返回com地址。每一层级的DNS服务器都有缓存,实际都是先查缓存,没有缓存才返回下级域,此处不再重复;

4.  local dns查询com。com返回baidu.com地址;

5.  local dns查询baidu.com,baidu.com返回www.baidu.com对应记录结果。

理论上讲域名查询有两种方式:

迭代查询  A问B一个问题,B不知道答案说你可以问C,然后A再去问C,C推荐D,然后A继续问D,如此迭代…

递归查询  A问B一个问题,B问C,C问D… 然后D告诉C,C告诉B,B告诉A

上述过程中从resolver到递归DNS再到根的查询过程为递归查询,递归DNS到根、到com、到baidu.com的过程为迭代查询。

注意,递归查询需要从系统层面来看,很难单纯的说一台DNS实现了递归查询。

DNS是全球互联网中最重要的基础服务之一,也是如今唯一的一种有中心点的服务。全球域名系统组织与管理架构如下图所示:

ICANN  互联网名称与数字地址分配机构(The Internet Corporation for Assigned Names and Numbers)。负责IP地址空间的分配、协议标识符的指派、通用顶级域名(gTLD)、国家和地区顶级域名(ccTLD)系统的管理以及根服务器系统的管理。这些职能最初是在美国政府合同下由互联网号码分配当局(Internet Assigned Numbers Authority,IANA)以及其它一些组织提供,现在都由ICANN统一行使。

ccNSO  国家和地区名称支持组(Country Code Names Supporting Organization)。负责各种ccTLD的注册。

GNSO  通用名称支持组(Generic Names Supporting Organization)。负责各种gTLD的注册。

RSSAC  根服务器系统支持委员会(Root Server System Advisory Committee)。负责根服务器系统管理。

全球DNS总共有13个根,具体信息如下表所示:

编号 IPv4地址 IPv6地址 运营组织
A 198.41.0.4 2001:503:ba3e::2:30 Verisign
B 192.228.79.201 2001:478:65::53 USC-ISI
C 192.33.4.12 2001:500:2::c Cogent Communications
D 199.7.91.13 2001:500:2d::d University of Maryland
E 192.203.230.10 -- NASA
F 192.5.5.241 2001:500:2f::f Internet Systems Consortium
G 192.112.36.4 -- Defense Information Systems Agency
H 128.63.2.53 2001:500:1::803f:235 U.S. Army Research Lab
I 192.36.148.17 2001:7fe::53 Netnod
J 192.58.128.30 2001:503:c27::2:30 Verisign
K 193.0.14.129 2001:7fd::1 RIPE NCC
L 199.7.83.42 2001:500:3::42 ICANN
M 202.12.27.33 2001:dc3::35 WIDE Project

1.域名交易

作为互联网最重要的轻资产之一,域名原生就具有着投资和品牌价值。围绕域名相关的交易,目前已经衍生出包括注册、买卖、中介、抢注、投资、停放、备案等的一个完整生态系统。

域名注册  向有资质的注册商申请一个域名的过程。国内知名的注册商有万网、35互联、中国数据等,可注册常见的.com、.cn、.net、.org等域名;国外知名的有godaddy、enom等。

域名买卖,域名中介、域名经纪  围绕域名的评估、分析、谈判、购买、出售等一系列过程。可类比房地产行业。

域名抢注  分两种情况,一种是抢注未被注册过的域名,一种是抢注曾经被注册过但是未能在有效期结束前及时续费的域名。国内外都有不少专门提供域名抢注服务的平台。

域名投资  注册和购买有价值的域名,然后获利转让的行为。投资者一般被称为“玉米虫”。2014年比较热门的几次投资事件一个是罗永浩的t.tt,号称成交价200万元;一个是雷军的mi.com,号称成交价360万美元;一个是莫天全的fang.com,成交价格不详。

域名停放  将未建站的域名解析到广告页面,利用域名的自然流量来获取收入的方式。提供域名停放服务依赖以下两点:优质广告资源和防作弊技术。

2.域名解析

域名市场除了包含各种类别的交易服务以外,另还包含解析服务。按照功能不同,域名解析服务可以分为如下几类:

权威DNS  国内典型的代表是dnspod,主要提供域名托管以及智能解析服务。智能解析主要解决这样一个问题:假设一个域名同时绑定了联通和电信的IP,当一个电信用户去访问时有可能会解析到一个联通的IP,从而产生跨网问题。使用智能解析后,系统将根据用户来源去智能的返回结果。

公共DNS  公共DNS类似于运营商的local dns,本质上讲是一种递归解析服务。与运营商DNS不同的是,公共DNS一般以一个或两个非常容易记住的IP方式(如百度公共DNS服务IP:180.76.76.76)给所有用户提供统一服务。公共DNS相对于运营商DNS的优势主要在无劫持、更快、更稳定、更安全等。

CDN DNS  本质上讲也是一种权威DNS,主要在CDN的业务场景中提供流量调度功能。用户将域名CNAME或者直接NS托管到CDN DNS,CDN DNS进一步做智能调度返回一个离用户最近的接入节点。用户访问接入节点,享受CDN提供的缓存、加速、以及防攻击服务。

1.安全事件

尽管已经有超过30年历史,DNS仍然是整个互联网中最脆弱的一环。下面盘点一下近年来比较严重的DNS安全事件。

2009年5月19日南方六省断网事件。一起由于游戏私服私斗打挂dnspod,殃及暴风影音域名解析,然后进一步殃及电信local dns,从而爆发六省大规模断网的事故。事件影响深远。

2010年1月12日百度域名劫持事件。baidu.com的NS记录被伊朗网军(Iranian Cyber Army)劫持,然后导致www.baidu.com无法访问。事件持续时间8小时,是百度成立以来最严重的故障事件,直接经济损失700万人民币。

2013年5月4日DNS劫持事件。由于主流路由器厂商安全漏洞而导致的全网劫持事件,号称影响了800万用户。

2013年8月25日CN域被攻击事件。cn域dns受到DoS攻击而导致所有cn域名无法解析事故。

2014年1月21日全国DNS故障。迄今为止,大陆境内发生的最为严重的DNS故障,所有通用顶级域(.com/.net/.org)遭到DNS污染,所有的域名全被指向了位于美国的一个IP地址(65.49.2.178)。

2.攻击手段

query flood  通过不断的发DNS请求报文来耗尽目的DNS资源,形成拒绝服务。具体分类包括源IP是否随机以及目的域名是否随机等。

response flood  通过不断的发DNS响应报文来达到拒绝服务的目的。

udp floodv  DNS底层协议为UDP,基于UDP的各种flood攻击也都会给DNS带来危害。

折射攻击(反射攻击)  伪造源IP为第三方,借助DNS的回包来达到DoS掉第三方的目的。属于“借刀杀人”的手段。

放大攻击  折射攻击的一种。通过恶意的构造响应报文来达到流量放大作用,从而对第三方形成带宽攻击。请求报文几十字节,响应报文几千字节,意味着可以形成百倍以上流量放大系数。

缓存投毒  每一台DNS都有缓存,缓存投毒指的是通过恶意手段污染DNS缓存,形成DNS劫持或者拒绝服务。

漏洞攻击  利用各种漏洞来达到入侵并控制DNS服务器目的。漏洞不仅仅指DNS程序本身的,也有可能是机器或者网络其它的“问题点”。

社会工程学手段  所有的系统都需要人的维护,而人永远是安全中最脆弱的一环。

3.防御手段

对于权威DNS来说,由于请求来源多是运营商或者公共DNS厂商的递归DNS,源IP相对比较固定,可以实施源IP白名单策略。该策略对于伪造源IP的攻击具有一定削弱作用。对于域名随机的攻击来说,如果权威DNS本身承载的域名量不是很大,可以考虑域名白名单策略。如果源IP就是运营商的,然后请求域名也是合法的,只能靠一定限速策略以及DNS服务器本身性能了。

对于递归DNS来说,各种白名单策略误伤都会很严重,因此也主要靠DNS服务器本身性能了。

高性能DNS服务器目前比较流行的做法是基于Intel DPDK来实施。

另外一种推荐实施的策略是RRL(Response Rate Limit),该策略对于防御折射攻击/放大攻击有一定效果。尽管折射攻击的目标不是DNS本身,但是不防御的话如果把第三方打挂仍然会产生连带责任,因此建议实施RRL。

更快更稳定  中国最快最稳定的网站是哪一个?没错,www.baidu.com。百度公共DNS拥有和百度搜索一样的基础网络、基础设施以及系统架构,更重要的是,我们是一拨人。

纯净无劫持  作为中国最大的流量公司,百度是DNS劫持的最大受害者。百度做公共DNS的目的一方面在于为广大网民提供一个纯净安全的流量环境,另外一方面也想通过产品的力量来制约劫持乱象。

安全防护  百度公共DNS的另外一个附加功能是安全防护。依托百度安全搜索技术,如果您所访问的网站存在病毒、木马风险,我们将实时予以拦截和提示,有效保证使用者的上网安全。

CDN亲和  百度公共DNS拥有遍布全国的递归出口节点。当查询请求未命中主缓存时,我们会将请求调度到离用户最近的递归节点来进一步查询。因此不会影响到CDN的调度进度。另外一方面,我们正在积极实施edns-client-subnet,该技术会大幅提升CDN调度精度,相信CDN厂商会喜欢。

参与评论