网站IPv6升级中域名泛解析的安全分析
2020-09-14何黎明江西省信息中心南昌市330036
何黎明 江西省信息中心 南昌市 330036
曾靓 江西广播电视台 南昌市 330036
蔡敏 南昌市第十八中学 南昌市 330036
0 前言
随着全球IPv4地址的彻底枯竭,IPv6升级演进已经提到整个互联网,乃至整个社会的议事议程。在此过程中,网络的升级是前提,网站的改造是关键,因为没有IPv6的网站和内容,IPv6网络也无用武之地。但网站升级远比我们想象中的复杂,IPv6相对于IPv4而言,不仅仅是底层代码、内存变量、业务逻辑有所变化,即使最不引人注意的域名解析也会变成一个巨大的障碍。一些大型网站或网站群,网站内部的各级域名常常超过1000条,如果计算外部引用的域名,往往上万条。如果每一条域名都明确配置AAAA记录,解析IPv6地址,光是这种配置工作就相当繁重,甚至不具备操作性。所以域名的泛解析就普遍使用在IPv6域名解析中。甚至在IPv4阶段,很多内部IPv4域名解析也使用泛解析来减少配置的工作量,简化维护工作。
1 域名泛解析原理和应用场景
用户上网,首先需要知道目的网站的域名,然后发出域名解析请求(DNS请求),向域名解析服务器(DNS)请求解析网站域名所对应的网络地址,得到相应的网络地址后,用户才能根据网络地址向目的网站发出内容请求。在请求解析网络地址时,用户将根据自身支持协议类型发出不同类型的DNS请求。如果支持IPv4协议,用户将发出A类型的DNS请求,DNS将把相应被请求网站的A记录返回给用户,该A记录所记录的内容就是被请求网站的IPv4地址。如果支持IPv6议,用户将发出AAAA类型的DNS请求,DNS将把相应被请求网站的AAAA记录返回给用户,该AAAA记录所记录的内容就是被请求网站的IPv6地址。至此,用户已经完成DNS解析,获得相应网站的IP地址,如果能获得IPv6的地址,用户将优先使用IPv6协议通信,向网站发起IPv6的HTTP请求,如果没有获得IPv6地址,才使用IPv4协议通信,向网站发起IPv4的HTTP请求。具体DNS解析和网站访问流程如下图所示。
图1 域名解析流程图
可见DNS解析在用户上网过程中是至关重要的,如果不能成功进行DNS解析,相应域名所对应的网站或内容就无法访问。一般情况下,为了开发、运营、维护的方便,除了一级域名(如abc.com)以外,网站往往都有很多二三级域名,如www.abc.com、mail.abc.com、beijing.abc.com、tiananmen.beijing.abc.com等。网站必须为每一个使用的子域名指定IP地址,否则未能成功解析的子域名所对应的内容就无法访问。但并不是每个子域名都有独立服务器和IP地址,所以会普遍存在多个子域名指向同一个服务器和IP地址的情况。DNS在查找和解析域名时,分为精确查找和模糊查找两种行为。如果要求DNS精确查找,配置A或AAAA记录时,应该填写完整的域名,如www.abc.com和abc.com就是不同记录,可以返回不同的IP地址。如果要求DNS模糊查找,配置A或AAAA记录时,可以使用“*”作为通配符,代表任何合法的子域名,如www.abc.com和mail.abc.com都能匹配到*.abc.com的记录,返回*.abc.com所对应的IP地址。网站只需要在DNS上配置一条*.abc.com记录,就可以解析所有子域名的IP地址,当然也要求所有子域名都是指向同一台服务器和IP地址,但这往往也是最普遍的情况。在DNS解析过程中使用“*”作为通配符,代表所有合法子域名的做法就是常说的“域名泛解析”。泛解析的使用就是要简化网站配置和维护工作。在一些中大型网站中,子域名可能过万条,其DNS的配置和维护工作量绝对不能小觑,特别在网站IPv6升级中要处理大量外部网站的引用(URL),如果每一条URL都人工配置是不现实的,所以网站IPv6升级中也会普遍使用域名泛解析,把众多子域名和外部URL通过泛解析全部指向授权的IPv4-IPv6互通网关,再由IPv4-IPv6互通网关智能分析URL,解析真实的IP地址,从而减少DNS的配置工作量。
2 域名泛解析的安全问题分析
泛解析的使用,让维护人员不用为每个子域名配置DNS的A和AAAA记录,允许任何域名解析为泛解析所指向的地址,其中包括没有真正使用子域名。如设置*.abc.com指向IPv4的202.100.10.1和IPv6的2001::1,那么正常使用的www.abc.com和mail.abc.com将指向202.100.10.1和2001::1,同时没有使用的illegal.abc.com也会指向202.100.10.1和2001::1。泛解析事实上是为域名解析提供了一条缺省路径,在给网站维护人员带来便捷的同时,是否也会引入额外的安全风险?
事实上,引发网站安全问题的原因有以下5种:
1)用户所使用的缓存DNS被入侵或维护管理不当,网站的A或AAAA记录被篡改为其它非法地址,指向非法服务器。
2)用户的DNS请求和回复报文被拦截和篡改,用户收到的A或AAAA记录并不是指向用户想访问的网站。
3)网站的授权DNS被入侵或维护管理不当,网站的A或AAAA记录被篡改为其它非法地址,或相应的CNAME被指向其它非法授权DNS,从而解析出非法地址,指向非法服务器。
4)网站本身被入侵或维护管理不当,网站内容被篡改为非法内容或引用了其它非法网站的内容。
5)用户访问网站的请求和回复报文被拦截和篡改,用户收到的网站内容并不是真实网站的内容。
以上引发网站安全问题的各种原因并没有涉及域名泛解析。只要不存在以上任何一种场景,即使使用了泛解析也不会出现网站安全问题,但一旦出现以上任何一种场景,即使没有使用泛解析也会出现网站安全问题。所以简单认为域名泛解析不安全是有所偏颇的。在正常情况下,如果用户输入非法域名illegal.abc.com,被DNS上的泛解析*.abc.com指向缺省地址www.abc.com,那么,用户看到的情况将是:用户在浏览器地址栏错误输入illegal.abc.com,并点击访问,浏览器马上跳转到www.abc.com,而且在浏览器地址栏和标题区都只会显示www.abc.com,不会显示illegal.abc.com。也就是说,泛解析并不会让用户误以为真的存在illegal.abc.com。可见,只要正确使用,泛解析不会让网站随意跳转到其它网站,也不会让用户误解错误域名的存在。总而言之,域名泛解析在带来DNS配置便捷性的同时,并不会带来新的安全风险。其实,在IPv6升级演进工作之前,泛解析已经在IPv4场景下广为使用,事实证明了泛解析的安全性。
3 域名泛解析的使用建议
在一些应用场景,泛解析能发挥很大作用,盲目禁止使用只会给运营维护工作带来更大的麻烦,同时也没有提高安全性。以下是网站维护中,泛解析最常用的场景:
3.1 设置网站默认访问入口
一些中小型网站,虽然也有不少二级域名,但由于公有IPv4地址非常短缺,中小型网站很难申请到足够的网络地址,为了节省IPv4地址,网站入口不得不设为单一入口。也有一些网站希望对访问用户进行统计分析或访问控制,为了便于分析和控制,也会设置单一访问入口。此时,在授权DNS上设置*.abc.com等形式的泛解析,可以把所有关于该网站的访问全汇聚到*.abc.com指向的IP地址和服务器,即网站的默认访问入口。网站默认访问入口从HTTP报文中提取用户真实想访问的URL,根据URL重定向到具体的应用服务器或应用模块。这是泛解析最常用、最有价值的应用场景,它不仅仅加强了网站的访问控制能力,也节省了宝贵的IPv4地址资源,同时也加快了DNS解析效率,特别是在遇到DNS解析攻击时,由于泛解析大大缩少了DNS查询的范围,在同等性能DNS环境下,泛解析让DNS攻击的抵御能力大大提高。
设置网站默认访问入口,泛解析是必须的。但网站默认访问入口的设置将把所有访问流量都导向访问入口,一旦DNS配置出错或默认入口故障,将直接影响整个网站的服务提供,也容易成为攻击目标。所以使用泛解析,需要反复检查DNS配置,确认无误后才能实施和生效,而且网站默认入口要考虑冗余备份或负载分担等安全措施,一些大型网站,甚至可以考虑结合路由层面的anycast技术,在多个不同地理位置的节点使用同一个IP地址作为网站的默认入口,这样既能增大默认入口的吞吐量,增加冗余性,提高抗攻击能力,也能有效分离网站部署和DNS解析配置的耦合性。
3.2 设置网站域名错误提醒页
网站域名除了从搜索引擎、外部链接得到以外,很多情况下是手工输入的,输入出错是再正常不过了。如果不做任何处理,用户在申请DNS解析时就收到没有该网站记录的回应。究竟是输入错误还是真的网站不存在,无法分别。一些网站为了提高用户体验,特别是一些商业网站为了尽量引导流量,往往为网站设置错误提醒页。网站维护人员在所有合法域名解析后增加一条类似*.abc.com的泛解析指向网站错误提醒页,该页面一般告诉用户正确的网站域名并尽力引导到最有可能的网页上。也有些网站是因为还没完成全部功能或内容的部署,通过泛解析设置错误提醒页,通知用户网站正在建设中。这种错误提醒比简单的无法访问要友好很多。
网站错误提醒页的实现也需要使用泛解析。由于错误提醒页不是网站的关键环节,即使被攻克,也不会影响网站的整体使用,只需要在配置泛解析时注意别把正常域名也指向错误提醒页面。
3.3 使用动态域名或临时域名
在一些交互性强的网站,往往会使用动态域名或临时性域名。譬如个人主页、个人空间或个人硬盘等业务,往往在业务提供商的一级域名下动态增加带有个人标识的二级域名。这些域名一般没有规律,不便记忆,仅仅用于用户管理和业务隔离。如果这种动态域名也全部在DNS上配置和解析,大量动态DNS记录会导致DNS解析效率下降,直接影响到用户体验。所以这种情况下,一般在DNS上配置泛解析,把所有动态域名直接指向特定的WEB服务器,再由WEB服务器根据HTTP携带的URL信息区分不同用户,进入不同的空间。
在一些在线支付的场景下,网站会为某个交互环节生成一个临时的域名,譬如二维码等。这些域名往往在交互结束后就会失效,而且要求时效性很强。如果大量临时性域名通过传统的DNS解析,对运营商的缓存DNS和网站的授权DNS都是一个灾难,这种DNS解析风暴对目前任何一个DNS都相当于网络攻击。所以网站必然会使用域名泛解析,把所有临时性域名指向专属WEB服务器,再由该服务器识别和验证业务的合法性。这样有效避免缓存DNS记录的频繁变动。
泛解析主要有上述三种用途,在不同场景下有不同的变化形式,包括数据中心(IDC)服务提供商利用泛解析为没有申请独立域名的客户提供二级子域名服务,搜索引擎优化(SEO)过程中利用泛解析为网站提供更多的访问入口,尽可能引导流量等。这些都是为某种目的而使用泛解析。其实泛解析在日常网站运营维护中给我们带来很大便利,只要我们在配置DNS泛解析时注意检查配置的正确性,同时确保泛解析所指向网站的安全性即可放心使用。
4 提高网站安全性的建议
域名泛解析本身不存在安全风险,关键的是提升域名解析系统的安全性和网站自身的安全性,特别是泛解析所指向的缺省网站。安全问题往往是管理问题,提高安全性应当从日常管理入手。提高网站安全性可以从前述引发网站安全问题的几个方面着手,具体建议如下:
4.1 加固授权DNS
建议选择安全可靠的DNS商业产品,包括DNS解析服务和DNS专业设备。如果选择使用第三方专业DNS解析服务或商业DNS设备,只要合理部署,大部分安全问题已经由产品或服务供应商较好解决。如果选择部署免费的开源DNS,则需要重点做好DNS服务器操作系统和DNS软件系统的安全漏洞加固工作,关闭所有不必要的服务端口,有条件的可以部署防火墙提高网络安全等级。
4.2 加固网站服务器
不管是租用云主机还是部署自有的服务器,服务器安全问题都需要网站运营维护人员考虑解决。建议定期为网站服务器扫描安全漏洞和打补丁,关闭所有不必要的服务端口,卸载所有不必要的应用程序,有条件的可以部署防火墙、网站应用级入侵防御系统(WAF)等安全产品,甚至对一些重点业务购买流量清洗服务,提高网站服务器的安全等级。对一些大型网站或网站群,应该考虑部署内容发布网络(CDN)或平台,隔离用户访问和真正的应用服务器,在提升网站吞吐量的同时,增加网站的安全防范能力,特别是防止拒绝服务攻击(DDoS)能力
4.3 优化网站代码
再安全的服务器都无法保护有漏洞的代码。如果使用开源代码开发网站时,应当选择流行的,不断完善的开源软件,并定期更新和打补丁。具体实现时,注意在客户端屏蔽用户查看源代码的功能;在客户输入信息过程中注意有效内容的校验,以防注入式攻击;在使用URL时,尽量使用静态URL,避免动态URL参数暴露网页间的关系;在客户登录时,应当使用验证码,避免暴力破解登录账号和密码;在客户访问时,应当校验和过滤IP地址,防止DDoS攻击;在客户访问过程中,注意保留日志信息,以备后期追溯和破坏行为的分析。
4.4 加强账号管理
账号密码泄露,等同于保险箱丢了钥匙,再坚固的门都没用。日常维护中,账号密码应当专人管理,明确责任和权力,落实到个人。登录服务器时,包括登录DNS和网站服务器,都采用SSL加密,防止通过监听来窃取账号密码。设置密码时,应当选用复杂密码,避免有规律的密码,以免密码被猜到或暴力破解。
5 结束语
域名泛解析在给网站运维管理带来便捷的同时,并没有增加安全风险。很多域名注册服务商和域名解析服务器都支持域名泛解析,并且在互联网中广泛应用。要杜绝网站被劫持等风险,更多要从网站服务器和域名服务器的运维管理着手,加固域名服务器和网站服务器的安全防护,使用复杂账号密码来管理域名服务器和网站服务器,做好日常的数据监测和备份。