防火墙技术之DNS控制

谈谈防火墙: DNS的污染与劫持

序言

说到防火墙,想必大家对其并不陌生,几乎所有的计算机都安装有防火墙软件,而在一些像学校、单位、网吧等公共网络中,网络管理员常常还会部署硬件防火墙。这些防火墙为在抵御外来的网络攻击,防止内部网络攻击、计算机网络访问控制等方面都做出了非常重要的贡献,而今天我们就来讲一下防火墙中的访问控制中的DNS解析控制相关的技术。

DNS在平时用户浏览网页,访问互联网的过程中扮演着非常重要的角色。用户通常通过使用域名来访问对应的网站及服务器,而计算机与计算机之间的通讯实际上则是靠IP地址来进行通讯,因此DNS在其中充当着将域名解析为对应的IP地址的作用。在一些私有网络的访问控制实施中,若不想让用户访问某些网站,比如一些公司不希望其员工在上班期间使用电脑浏览微博之类的网站,只需要让用户无法获得该网站对应的IP地址即可。而不少的网络管理员则会从DNS上下手,以实现让网络使用者无法获得正确的IP地址。

一种"硬件防火墙"的部署方法

方法一:DNS劫持(DNS Hijacking)

在很多时候,我们组建局域网时通常会在网络内架设一个DNS服务器,这个DNS服务器通常会嵌入在一些网络基础设施中,而不会独立架设。例如家庭用户使用的路由器中通常会启动有dnsmasq服务,该服务会在路由器本地启动一个DNS服务器,其目的是对用户的DNS请求结果进行本地的缓存,以便于在日后如果用户仍需要查询该域名的有关记录时,路由器本地能够利用缓存提供比较迅速的应答,改善用户的网络浏览体验。用户在接入网络时(如连接WiFi等)会通过DHCP自动获取IP地址,在获取IP地址的同时,DHCP还会提供该网域内的DNS服务器IP给用户。通常情况下,若用户的没有对IP地址有关设置进行改动的情况下,操作系统会自动选择DHCP服务提供的DNS地址。因此,网络管理员只需要对这一DNS服务器进行相关配置,比如将www.weibo.com的解析记录设置为一个随机的IP地址,如233.233.233.233(乱写的),用户访问微博时,浏览器查询相关DNS记录,DNS服务器就会把这个错误的IP进行返回,而通过这个错误的IP地址用户浏览器肯定无法与新浪微博的服务器构建连接,也就成功实现了对微博网站的访问控制了。

图:局域网一个DNS服务器的解析记录

方法二:DNS污染(DNS Poisoning)

然而上述的方法在很多时候并不凑效,因为用户只需要将DNS服务器设置为一些公共DNS服务器,比如谷歌的8.8.8.8之类的话,本地网络的DNS服务器将无法对相关DNS请求进行劫持了,用户也可以自由地访问所有的网站。这也是为什么当年一些运营商使用DNS劫持技术来卖广告的时候,只需要把DNS服务器进行手动设置就能够避免一部分的广告弹窗。

运营商通过DNS劫持实现广告、业务信息等的推送

不过如果用户绕开了本地网络的DNS服务器,网络管理员仍然是有办法对用户的DNS记录进行控制的,那就是DNS污染了。我们先来了解一下DNS协议本身,DNS协议是通过UDP协议通讯的,与TCP协议不同的是,UDP协议没有握手,在数据传输的过程中,双方也不需要在收到数据后对对方进行确认。因此,UDP协议是比较不可靠的,协议本身无法保障数据传输的完整性,而这种不可靠性也为DNS污染技术提供了先决性条件。网络管理员可以在计算机网络出入口旁路设置IDS入侵检测,对53端口的UDP报文进行对比,当相关内容符合关键字时,则可以像发出DNS查询请求的机器发送预先设置好的应答结果,由于互联网通讯存在延时,该预设的应答结果必定会先于远程DNS服务器返回的结果到达客户机器,因此浏览器会将最先返回的含有虚假IP的DNS查询结果作为该域名的解析结果,从而实现了访问控制。

我们可以进行如下实验来进一步体会相关技术的具体实现。在海外架设一服务器,搭建DNS服务,本地查询并记下某一域名的解析值(图1)。

图1.DNS服务器本地正确解析值

本地向该服务器进行同样的域名解析请求(图3),用Wireshark进行抓包分析(图2),查看,发现解析结果与服务器上正确的解析结果不同,我们可以通过Wireshark查看相关记录。

图2.Wireshark抓包记录

不难发现在本地向远程服务器发送相关请求时,有以远程服务器名义返回的两个结果(16和17),这两个结果的IP地址是无效的,而服务器真正返回的正确结果则姗姗来迟(19),而由于前两个由内网旁路发送的DNS结果抢先到达本地,服务器返回的真正结果未被采纳。

图3.远程服务器查询结果

因此,DNS污染也被称作是DNS抢答,因为其原理实质上就是利用UDP的不可靠通讯以及只接收最先返回的数据的原理,利用内网延时绝对低于远程服务器的延时的实质情况,实现抢答。

当然,对于这种情况,已经有了不少的解决方案,最原始的方法是通过丢弃最先应答的数据包,取最后到达的数据包来作为应答结果,不过网络管理员同样可以完全屏蔽局域网外的一切53端口通讯,通过上述的方法返回错误的DNS应答结果来阻止用户获得正确的ip地址。另外一种解决方案比较有效,目前也正在不断地推广中,这种方案就是弃用UDP这种不可靠的连接方式,采用TCP+SSL来进行加密通讯及查询,目前DNSCrypt项目已经为此提供了相关的技术解决方案,一些DNS服务方也逐渐支持TCP/SSL的查询请求。

You know that :)

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180425G0D9NT00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券