本章,我们系统地学习了域名系统,初步掌握了 DNS 协议和 DNS 服务器工作原理。本节,我们再接再厉,继续研究一个跟 DNS 相关的网络安全问题:DNS劫持 。
劫持原理
根据 DNS 服务器的工作原理,我们知道主机一般依靠本地 DNS 缓存服务器来查询域名。运营商提供互联网接入服务,宽带成功拨号后,它将本区域内的 DNS 缓存服务器提供给客户端。
随着网络设备不断增多,越来越多的家庭使用无线路由器来组建局域网。路由器负责进行宽带拨号,其他网络设备则通过路由器来上网:
为实现局域网域名解析,路由器通常会提供 DNS 代理服务,接管整个网络的域名查询。路由器会告诉网络中的主机来找它解析域名;如果它收到本地域名解析请求,将直接返回结果;否则,它将进一步请求 DNS 缓存服务器。
在这种情况下,路由器就相当于一个中间人:在局域网内的主机看来,路由器是一台本地 DNS 服务器;在真正的 DNS 服务器看来,路由器是一个客户端。引入 DNS 代理之后,路由器支持本地域名配置,灵活性提高。
由于家用路由器质量参差不齐,存在不少潜在安全漏洞。一旦家里的路由器被黑客攻破,黑客可以在 DNS 代理上做手脚,将域名指到钓鱼站点进行欺诈。
如上图,路由器被黑客攻破,它的 DNS 代理服务被黑客控制。黑客在 DNS 代理上做手脚,将某个网站的域名,指向自己精心布置的钓鱼站点。这样的话,依靠 DNS 代理查询域名的终端,将被强制劫持到钓鱼站点。
这就是所谓的 DNS劫持 ( DNS Hijacking
):DNS 服务器受到攻击导致域名指向被黑客篡改。一旦域名被劫持到钓鱼网站,结果可能是灾难性的。
钓鱼网站外观可能长得跟官方网站一模一样,肉眼可能很难分辨。如果用户没能将其识破,甚至还输入账号密码,那这些敏感信息必然会被黑客窃取。
更有甚者,黑客可以利用窃取到的敏感信息,伪装成用户到真正的官方站点上进行操作。试想,你本来想用网银给朋友转账,结果被劫持到钓鱼网站,钱被转到黑客账上!这真是一个悲剧!
如果在公共场所,随意接入一些陌生的网络热点,安全更没保障。理论上,这些热点的管理员只需对网络稍加配置,便可实现 DNS 劫持。
防御措施
DNS 劫持的危害性非常大,应该如何防御呢?
网络管理员应该加强设备安全巡检,及时防堵漏洞,防止黑客攻击。终端用户则应该提高安全意识,不要轻易连接未知网络。
证书认证
DNS劫持的主要危害是钓鱼网站,这类网站肉眼很难分辨,防不胜防。
好在我们可以利用数字证书,对访问站点进行认证甄别,并对通信连接进行加密。关于数字证书相关原理,我们先按下不表,等到学习 HTTPS 协议时再展开介绍。
没错,HTTPS 是一个安全的 Web 协议,它背后就是利用了数字证书对网站进行认证。启用 HTTPS 协议的网站,都有一个由权威机构颁发的证书。这样浏览器可以对证书进行检查,以便识别钓鱼网站。
有了 HTTPS 协议,就算域名被劫持到钓鱼网站,也不至于遭受欺诈。数字证书由权威机构签发,钓鱼网站无法伪造。没有合法证书,网站就无法通过认证检查,浏览器将提示风险,甚至报错。
因此,为安全起见,坚持使用 HTTPS 协议!禁止在不安全的网络环境中使用 HTTP 协议传送敏感数据!
公共DNS服务
很多互联网大厂都提供了公共 DNS 服务,这些服务器由背后的公司背书,值得信任。这个表格列举了一些常见的公共 DNS 服务:
厂商 | 公共DNS服务器地址 | 备注 |
---|---|---|
腾讯云 | 119.29.29.29 | 国内 |
阿里云 | 223.5.5.5 / 223.6.6.6 | 国内 |
百度 | 180.76.76.76 | 国内 |
谷歌 | 8.8.8.8 / 8.8.4.4 | 国外 |
Cloudflare | 1.1.1.1 / 1.0.0.1 | 国外 |
如果发现本地 DNS 缓存服务器被污染,我们可以修改系统配置,使用这些公共DNS服务器来查询域名。
以 Linux 为例,系统使用的DNS服务器可以通过 /etc/resolv.conf
文件来配置。如果想使用阿里云公共 DNS 来查询域名,可以这样配置:
1 2 | nameserver 223.5.5.5 nameserver 223.6.6.6 |
如果连网络流量也被劫持,就回天乏术了。举个例子,如果路由器将发往 223.5.5.5
和 223.6.6.6
的 IP 包都路由到黑客的服务器,那 DNS 查询还是会受到黑客的控制