如何防止流量劫持?

本文主要介绍了常见的2种流量劫持的方式、原理以及相应的应对策略。

一、流量劫持概述

我们在访问某些特定站点或者是所有站点时,有时会弹出广告。比较典型的是,当宽带快要欠费的时候,运营商会弹出页面提醒你续费。这是怎么做到的呢?其实就是通过流量劫持的方式。

流量劫持方式主要分为两类:一是 DNS 劫持,在用户通过域名系统访问目标的时 候劫持域名解析的回包,目标域名会被恶意地指向其他恶意 IP 地址,造成用户无法正 常使用服务,甚至造成弹广告、挂马、搜集账号密码、DDoS 等更加严重的危害;二是链路劫持,对于服务器返回的数据包内容进行篡改或者抢先与服务器进行回包,在回包 中强行插入恶意业务逻辑,干扰用户的正常使用,同样会造成广告、挂马等一系列的危 害后果。

DNS劫持和链路劫持原理不同,采取的应对措施也不相同。

二、DNS劫持应对策略

1.DNS劫持原理

DNS劫持最直接的手段是通过入侵 DNS 服务器,获取攻击目标域名的解析记录控制权,之后修改攻击目标域名的解析结果,等到 TTL 时间生效之后,所有对该域名的访问由原 IP 地址指向修改后的恶意 IP。DNS 劫持的后果就是对被修改域名记录的网址不能访问, 甚至访问到虚假网址,导致用户数据被盗、被挂马的严重危害。

通常的 DNS 查询没有强大的认证机制作为安全保证,而且 DNS 查询通常基于无连接 不可靠的 UDP 协议,因此 DNS 的查询非常容易被篡改,通过对 UDP 端口 53 上的 DNS 查 询进行侦听,一经发现与关键词相匹配的请求,则立即伪装成目标域名的解析服务器(NS, Name Server)给查询者返回虚假结果,从而实现窃取资料或者破坏原有正常服务的目的。 还有一种手段是黑客伪造权威 DNS 服务器的应答,对缓存 DNS 服务器进行污染。

2.DNS劫持应对策略 

DNS劫持往往是针对个人,分布在不同的运营商和不同的网络中。就个人而言,针对 DNS劫持,可以采用使用国外免费公用的 DNS服务器解决,例如 GoogleDNS(8.8.8.8); 针对 DNS 污染,可以使用 VPN 或者域名远程解析的方法解决,但这大多需要购买付费的 VPN 或 SSH 等,还可以通过修改本地 Host 文件的方法,手动设置域名正确的 IP 地址,但 这样会大大提高维护成本。

对于服务提供方,需要对 DNS 劫持进行持续的检测。大量的终端布点可以检测 DNS 劫持的情况,帮用户针对劫持向运营商投诉。同时,现在越来越多的互联网厂商开始使用 HTTPDNS 服务,能够从一定程度上缓解 DNS 劫持的影响。

HTTPDNS 基本原理如下图:

 

3.如何使用 HTTPDNS 服务 

开通服务,在 HTTPDNS 服务提供商出注册账号,开通 HTTPDNS 服务。 

控制台添加域名

在HTTPDNS提供商的服务台申请HTTPDNS服务,这可能涉及费用(一般的HTTPDNS 服务提供商会有一定的免费查询次数,如果超过了这个次数就需要额外的费用)。假设我们 通过控制台获得了 HTTPDNS 服务商提供的账号,就直接在控制台上提价所需要解析的域 名记录,一般几分钟之后会在 HTTPDNS 服务端生效。

使用 HTTPDNS 解析域名 

使用 HTTPDNS 解析域名,可以使用类似下面的方式进行。http://httpdns-service.com? host=www.yourdomain.com,其中 http://httpdns-service.com 是 HTTPDNS 的提供方,www. yourdomain.com 是需要解析的域名。具体的 API 接口规范可参考 HTTPDNS 的服务提供商。

客户端集成 HTTPDNS 

在通过 HTTPDNS 设置获得域名的 IP 地址后,客户端应用能够利用这个 IP 发起业务请求。

三、链路劫持应对策略

1.链路劫持原理

链路劫持是指第三方(可能是运营商、黑客或者内鬼)通过在用户客户端至服务器之 间的网络线路中植入恶意设备,侦听用户和服务器之间的通信数据,达到窃取和篡改用户 重要数据的目的。链路劫持最常用的就是在网页中植入广告,当然也可以进行挂马、钓鱼, 还可以窃取帐号密码、银行卡、身份证等重要个人数据。

链路劫持的原理是侦听网络上的数据包,发现某些设定特征的包时,抢在服务器回包 之前进行回包,这样客户端会自动忽略服务器真正的响应包而接受先到的假回包,从而受 到欺骗和劫持。  

2.链路劫持应对策略

从链路劫持的原理来看,其实是网络链路上侦听、伪造 TCP 包,达到控制目标网络链 路的行为。我们发现核心的问题是,客户端没有办法识别返回的应答是服务器返回的,还是第三方返回的,所以信任了第三方的应答,丢弃了真正的应答。解决这个问题可以通过 全程 HTTPS 来解决,HTTPS 使用了加密技术,第三方无法知道通信的密钥,保证通信的安全而不被劫持。 

参考文献:

《云原生应用架构实践》 网易云基础服务架构团队 著
         https://sq.163yun.com/blog/article/221404388877201408

相关阅读:  

链路劫持原理是什么?如何应对链路劫持?

如何处理DNS劫持?

零日漏洞(0day)是什么?如何防范零日攻击?