运营商流量劫持

发布时间:2025-12-09 22:22:33 浏览次数:11

最近了解了一下运营商流量劫持,文章很多,但感觉很零碎,在这里把众多文章内容串一下,清晰一下思路。下面多是引用,引文在附录里,就不一一标识了。对于传统的流量劫持请见引文1,这里不作介绍。

运营商流量劫持主要包括四种: DNS劫持、HTTP重定向、TCP注入、网络直投​

1. ​DNS劫持

​    此方式太过暴露,运营商都放弃了这种方式,原理不再赘述。

2. HTTP重定向

a. 劫持原理

​利用HTTP重定向技术,运营商可以向Web客户端注入伪造的HTTP响应信息。HTTP交换是从客户端发送HTTP请求之后,服务器会发送一个带有状态码的HTTP响应信息。一个HTTP客户端在发送了一个请求信息之后,只能接收一个HTTP响应信息。当用户接收到一个伪造的HTTP响应信息时,TCP层接收其中的数据,此时便成功劫持。

b. HTTP重定向分类

HTTP 的重定向(301,302,303,307) 

301 : 永久重定向,告诉客户端以后应从新地址访问。

302 : 请求资源将会暂时驻留在另一个URI之中。这种类型的响应信息通常会包含一个位置header域,并携带有不同的URI信息。但是HTTP 1.1 有303 和307作为详细的补充,其实是对302的细化。

303:对于POST请求,它表示请求已经被处理,客户端可以接着使用GET方法去请求Location里的URI。

307:对于POST请求,表示请求还没有被处理,客户端应该向Location里的URI重新发起POST请求。

c. HTTP重定向示例:

HTTP重定向就是通过301和302两种状态码来实现的。

302是临时重定向,表示被访问页面因为各种需要被临时跳转到其他页面。具体的例子是访问 http://xxx.net/xxx.php/?id=zhangsan

< HTTP/1.1 302 Found

< Date: Fri, 16 Jul 2010 11:26:48 GMT

< Server: Apache

< X-Powered-By: PHP/5.2.4-2ubuntu5.10

< Location: http://xxx.net/xxx.php/?id=lisi

< Cache-Control: max-age=600

< Expires: Fri, 16 Jul 2010 11:36:48 GMT

< Vary: Accept-Encoding

< Content-Length: 0

< Content-Type: text/html

<</p>

浏览器在收到302 Found的状态码之后会在返回的HTTP Response Header中查找Location字段,然后访问对应地址。

301是永久重定向。具体的例子是访问 http://xxx.net/xxx.php/?id=zhangsan

< HTTP/1.1 301 Moved Permanently

< Location: http://xxx.net/xxx.php/?id=lisi

< Content-Type: text/html; charset=UTF-8

< Date: Fri, 16 Jul 2010 11:29:07 GMT

< Expires: Sun, 15 Aug 2010 11:29:07 GMT

< Cache-Control: public, max-age=2592000

< Server: gws

< Content-Length: 219

< X-XSS-Protection: 1; mode=block

<</span>

301重定向和302重定向在SEO以及缓存上是有非常大区别的。

对于SEO也就是搜索引擎优化,一个页面302重定向到另一个页面,新页面的PageRank不会受原页面影响。而一个页面301重定向到另一个页面,原页面的PageRank会被传递到新页面。所以对于一个网站进行域名转换,最好的方法就是使用301重定向,在经过一段时间之后可以不损失PR地将全站转移到新域名下。对于HTTP代理服务器例如squid来说,如果一个页面是302重定向到新页面并且没有指定Expire HTTP头,squid将不缓存这个信息,也就是说每次用户通过代理请求时都会重新获取一遍。而对于301重定向,squid可以将结果缓存以便快速响应下一个请求相同页面的用户。PHP里的302重定向非常简单,只要在返回的HTTP Response Header里添加Location字段,PHP将自动返回302状态码。而301重定向则稍微有点复杂,需要直接将301状态码用header函数返回给用户。

3. TCP注入

a. 劫持原理

利用TCP注入技术,运营商可以用伪造的数据包取代合法的数据包,并将合法的数据包和克隆的数据包一起发送至用户,用户接收到两份来自于源地址的通讯信息流,即合法数据包和克隆数据包,但是只有一个数据包能够首先到达。如果克隆数据包先抵达目标主机,那么用户将会遇到流量劫持。​

下图是一次典型的TCP链路劫持替换页面,TCP三次握手完成后,HTTP请求包发送后,客户端收到两个HTTP响应包,因为伪造的第一个包(10号)先到,所以第二个正常的HTTP响应包(13号)被客户端忽略了。很明显,在网络上有一个设备,侦听整个会话,当匹配某个特征就抢先发包劫持会话。

b. 显示分类

显示可以为JS 或iframe等,通过角落弹窗或者是弹出新网页的方式来实现。这种方式会出现灵活性差,容易被主流广告拦截工具拦截掉。

​c. ​TCP注入示例:

4. 网络直投​

a. 劫持原理

网络直投是现在运行商主要的流量劫持方式。运营商网络定向直投可以以各种格式定时、定点将广告推送到网络在线用户端的浏览主页面。 通过这个传播平台,不论电信和联通用户在IE浏览器地址栏中输入任何网址进行浏览,网络定向直投系统均可将广告主动送达用户,不依赖于某个固定的网站。可以自由选择目标市场区域,灵活投放,全面覆盖。直投系统一般放置在网关处,或通过HTTP隐性重定向的方式接入到直投服务器上面来获取信息发送到客户浏览器。简单理解是一旦接入到互联网并产生流量,100%会有网络直投信息推送过来(因为做了HTTP重定向,用户无法避免)。


写图片摘要(选填)

​网络直投当推送的信息是运营商的公用信息时,那么是正常业务,例如费用到期问是否续期,宽带升级是否升级;但推送的信息是广告,那么便产生了流量劫财。

b. 网络直投示例​

5. 检测方法

TCP注入流量劫持可以利用每一个数据包中的时间戳来进行分辨。在服务器接收到的数据包中,其IP的TTL值取决于发送者所设置的初始值以及数据包在传输过程中所经过的路由跳数。时序分析由于伪造数据包与合法数据包之间的竞争关系,就可以利用数据包的到达时间来对数据包的特点进行区分。所说的到达时间指的是数据包被网络监控系统捕捉到的时间。由于距离目标主机最近的边缘网络系统能够捕捉到通信数据包,那么就可以假设这些数据包到达边缘网络设备的时间与其真正到达终端目标主机的时间是相近的。两者的到达时间之差为负差值时,这意味着主机接收到的是伪造的数据包;如果差值为正差值时,那么主机接收到的就是合法的数据包。

抓到可疑包之后关注两个关键点:TTL值和IP Id(Identification)。根据实际观测,伪造的TCP包的TTL值和Id是不符合逻辑的。下图,真实包的TTL是53,Id是按顺序自增的,而伪造的包的TTL是64,Id始终是0。

通过伪造的TTL值就可以大致定位侦听设备的位置。利用伪造的数据包的TTL值加上当时用户的路由即可定位:数据包每经过一个路由TTL值就会减一,我们找到假的包,看他的TTL(一般初始发出的TTL是256或128或64)减了多少,反推回去就找到出问题的位置了。 客户端访问目标站点的时候,同一个TCP会话的TTL值发生较大变动,就可以判定为疑似劫持。

 但伪造包定制一个TTL值,就会导致难以精确定位。

6. 简单补救​

用户:访问支持HTTPS安全传输协议的网站

网站:使用HTTPS代替HTTP

7. 附录

引文1. 安全科普:详解流量劫持的形成原因

http://www.freebuf.com/articles/network/31707.html

引文2:被忽悠了12年的秘密(6):运营商广告层出不穷的秘密​http://itbbs.pconline.com.cn/network/16215458.html#​

引文3:国外研究员:中国宽带运营商将用户合法流量劫持至恶意站点

http://www.ithome.com/html/it/209165.htm​

引文4:链路劫持攻击一二三​

https://security.tencent.com/index.php/blog/msg/10

引文5:使用PHP进行HTTP重定向(301,302)

http://www.t086.com/article/4721


需要做网站?需要网络推广?欢迎咨询客户经理 13272073477