MYF

对于运营商免流漏洞的分析

概述

一年前,室友说自己在弄免流。后来出了斐讯K2,果断入了一个,还白赚了20RMB。然后也算是对免流有一些了解。

所谓免流,就是你使用运营商的流量,而实际上却不计入你的流量费用,实际上是因为运营商会设置一些免费流量,比如你访问手机营业厅时所产生的流量,而有些免流的方法就是利用了这个原理。

本文不提倡使用免流,毕竟这是一种损害运营商利益的行为,是不值得提倡的。但是三大运营商的不作为确实是让这股风气越来越盛。

免流方法

现在普遍有两种方法,一种是利用模拟包头,另外一种是利用端口免流

包头

所谓包头免流,就是模拟数据包,在原理部分会介绍。

如OpenVPN中,可以加入这样的免流代码,配合联通3gWAP的接入点即可达到免流目的,我们可以从OpenVPN的文档中,找到http-proxy-option的作用,即Set extended HTTP proxy options. Repeat to set multiple options.

1
2
3
4
5
6
7
8
9
10
11
12
########联通4G免流代码########
http-proxy-option EXT1 "POST http://m.client.10010.com"
http-proxy-option EXT1 "GET http://m.client.10010.com"
http-proxy-option EXT1 "X-Online-Host: m.client.10010.com"
http-proxy-option EXT1 "POST http://m.client.10010.com"
http-proxy-option EXT1 "X-Online-Host: m.client.10010.com"
http-proxy-option EXT1 "POST http://m.client.10010.com"
http-proxy-option EXT1 "Host: m.client.10010.com"
http-proxy-option EXT1 "GET http://m.client.10010.com"
http-proxy-option EXT1 "Host: m.client.10010.com"
http-proxy 10.0.0.172 80
########联通4G免流代码########

除了OpenVPN,还有shadowsocksR这个项目也可以达到模拟数据包的方法,根据上面的免流代码,我们可以发现实际上是利用m.client.10010.com这个网站就行伪装的。

更多参数请参考:三大运营商SSR混淆参数

端口

另外一种就是很流行的端口免流,我们知道,对于每一台设备来讲,1024以下的端口很多都有特定的作用,比如80端口是http的端口,443是https的端口,53是DNS的端口等等,而端口免流正是利用了这一点。

移动的137/138端口免流

根据百度百科,137端口

137端口的主要作用是在局域网中提供计算机的名字或IP地址查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态。NetBIOS只是网络基本的输入/输出系统,是一个应用程序接口,用于数据源与目的地之间的数据交换。不过它所包含的端口及一些命名原则属于OSI(Open System Interconnection)模型的上三层,与低层的通讯协议是全然独立的。因此NetBIOS服务能够成功地建构于不同的通讯协议上,让它支持访问计算机应用程序和设备通信时所要用到各种服务。正是由于考虑到了NetBIOS服务这种基于TCP/IP协议下的特点,而NetNBIOS又完全依靠137、138端口支撑,因此如果停止了NetBIOS,就能够将137和138端口的危险根除。

我们不难推测,正是因为中国移动公司在这方面存在漏洞,服务器认为和137端口的信息流只是正常的NetBIOS所产生的信息,至于部分地区通过137/138端口无法免流,可能是因为有的服务会控制这两个端口的流量导致的。

联通空中卡的53端口免流

根据百度百科53端口,我们知道53端口是用来提供DNS服务的,但是为什么空中卡可以通过53端口免流,而普通联通卡却不行,我实在恨不能理解。

原理

原理部分只讲解包头的原理,至于端口免流的原理上面已经介绍的比较清楚了。

首先我们要知道TCP/IP协议和HTTP协议,HTTP是应用层协议,TCP是传输层协议,而数据包在网络传输过程中,HTTP被封装在TCP包内。

而对于手机来讲,大部分流量都是走TCP/IP协议的,主要是因为它的稳定可靠。举一个HTTP请求如下。

1
2
3
4
5
6
Host: download.abc.com
Accept: */*
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/4.04[en](Win95;I;Nav)
Range: bytes=554554-

根据百度百科:

Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。

那么我们可以作出这样一个猜想:运营商判断流量是否免费是根据Host来判断的

这样也就能解释上面免流参数的含义了,至于POSTGET两种方式,只是让流量伪装的更像一些,最后一行的10.0.0.172是假装这个流量在访问WAP接入点的网关。所以我个人觉得用ShadowsocksR进行混淆的效果比OpenVPN要差也是因为这个吧,只伪装了Host但是却做了很多伪装Host不会进行的操作。

参考文章:

杜绝方法

限制免费流量。比如像电信的爱听、爱看、爱玩业务完全禁止,像联通营业厅的免费流量为用户设置上限,比如每一个用户每个月有200Mb的营业厅专用流量,超出部分从用户的普通流量套餐中扣除。

让流量更加优惠。这点还是比较实在的,免流是打击不尽的,民间总能出现很多奇奇怪怪的高手去破解,但是如果流量资费可以更低的话,运营商的利润还是非常可观的,一定程度上也可以降低用户对于免流的需求。根据最近出的腾讯大小王卡、蚂蚁宝卡,不难看出,三大运营商给虚拟运营商的流量资费还是比较划算的。

端口封禁策略,利用137/138/53端口实际上还是走了漏洞,对于用户而言,我相信80%的用户不知道DNS是怎么回事,三大运营商只要各自做好DNS就行了,至于专业用户也可以对于别的端口设置DNS请求。

加大打击力度。对于运营商来讲,高流量低费用的用户必然有问题,如果免费流量过多,基本可以判定这个用户使用了免流软件,应予以警告。做到这个技术应当并不是很难。当长期破坏运营商利益并且造成重大损失时应当采取必要的法律手段从源头打击,如某些专门做免流发财的商户。