本文系全文转载

作者:raysonx

点击查看原文


西元 2016 年 2 月 5 日晚

(注:本人只是一名技术人员,凭专业知识和经验写成本文,并非运营商员工,如有错误还请各位看官指出。)

0. 前言


互联网行业的火( pao )热( mo )真是让猪也飞起来了,而运营商的日子却不怎么好过。
面对传统话言短信业务收入下滑,辛辛苦苦建设的光纤网络和 3G 、 4G 基站成本没收回来又被要求提速降价,相对于其他垄断行业,运营商真是个软柿子。
看看国内绝大多数网民都是小白级别,连设置家用路由器都玩不利索,于是运营商打起了各种如意算盘……

1. 从最原始的 DNS 投毒谈起


DNS 作为互联网的基础设施之一,起到把域名转换成 IP 地址的作用,比如 www.baidu.com --> 115.239.211.112 。
各大运营商通常会以省为单位建设 2-4 台递归(或缓存) DNS 给用户使用,在 PPPoE 拨号时自动配置。
假若用户输错了域名,正常情况下 DNS 服务器会返回 NXDOMAIN ( nonexistent domain?)错误,然后浏览器或应用程序会报「域名无法解析」错误。
运营商通常会对 NXDOMAIN 结果进行污染,返回一个假冒的 IP 地址,这个 IP 地址指向运营商的服务器,于是你便看到了「贴心」的满屏广告的各种网址纠错页。
这种方式简单粗暴,用户一般也不会太反感,而且似乎也不会违反任何法律法规(?)。
我曾见过个别地区的某运营商竟然对正常网站也有一定概率劫持到纠错页,不过这种现象现在很少见了。

2. HTTP 劫持,你奈我何?


只在用户输错网址时才会显示广告内容,太不给力了吧?!特别是现在大多数人多用手机 APP 或是用搜索引擎找网站,根本不可能输错网址好不好!更可气的是现在居然有了很多第三方的无劫持的公共 DNS (这里有一份公共 DNS 列表),由于没有广告,用户都跑去用他们的服务了,这可不妙。于是运营商灵机一动,转而在 HTTP 协议上做手脚。
HTTP 协议是万维网( WWW )的基石。浏览网页时,地址覧最前方的 https://即表示当前正使用 HTTP 协议(现最新版的 Chrome 、 Safari 、 Edge 会隐藏这个协议前缀,可能以后的小白越来越不知道什么是 HTTP 了)。
目前手机上的 APP 和服务器通信时大多也采用 HTTP (基于 HTTP 的 API 或者直接内嵌网页),只是你不能用肉眼一下子看出来而已。
HTTP 协议本身未提供任何的安全措施,你和服务器之间的通信可以被任何中间设备窃听、记录、篡改,甚至目标服务器本身都可以伪造。
于是便有了:上网时正常页面被植入广告或恶意代码,连使用手机 APP 都不能幸免(如求问怎么找到运营商劫持加广告的事实依据),上 A 网站却有一定机率被跳转到 B 网站等(如扒皮-联通是如何劫持任意网站到携程的),访问网站被多次跳转并被添加返利小尾巴等。
由于信息不加密,意味著运营商可以随意记录并出售你的上网数据。更为安全的 HTTPS 协议则完全没有上述提到的问题,只要你别忽略浏览器的报的证书错误(如访问 12306.cn 时),你和服务器之间的连接就是安全的(当然你的设备要是中毒了当我没说)。之前淘宝没启用 HTTPS 加密连接之前,经常有人在淘宝上买完东西后马上收到诈骗电话,订单号、收件人等各种私密信息均被泄露,估计和某些运营商脱不了关系。

这种劫持属于违法甚至犯罪行为,见青岛联通劫持百度流量被罚 20 万元 百度助警方破获全球首例打击流量劫持刑事案件
目前,国内外的许多网站已开启全站 HTTPS 加密,如 Google 的各类产品(包括 YouTube )、 Facebook 、 Twitter 、 Wikipedia 、淘宝、天猫、百度搜索。另外知乎和 V2EX 都已支持 HTTPS 方式访问(但没有强制 HTTPS ),听京东的同学讲京东也正在测试全站 HTTPS 。 Google 已经表示对于启用全站 HTTPS 的站点,在搜索排名上会优先显示,鼓励各网站启用 HTTPS 。新版的 Chrome 和 Firefox 浏览器已经支持速度更快的 HTTP/2 ,但只支持启用了 HTTPS 的站点。可见,将来会有越来越多的网站转而使用 HTTPS ,明文的 HTTP 会被冷落, HTTP 劫持终会成为历史。

3. 谈一谈所谓的「良性」劫持


用户跨运营商访问网络时,运营商可能需要为用户支付网间结算费用。比如中国移动宽带用户访问位于中国电信网络的服务器,中国移动必须为这些流量或带宽支付给中国电信网间结算费用。
由于众所周知的原因,网间结算费用十分昂贵,为了节省网间互联费用,部分运营商部署了缓存服务器,在用户跨网访问时,采用技术手段将用户与目标服务器的连接劫持到自家的缓存服务器上。
各小区宽带运营商和部分地区的移动最爱干这事,二大基础电信运营商(中国电信和中国联通)一直不存在这个现象。但从 2016 年 1 月起联通也开始部署这套东西了。也就是说,目前不存在缓存劫持的网络在中国只剩中国电信一家,这真是我国网络的大退步啊。
楼主曾于 2016 年 1 月 19 日将此事投诉给工信部电信用户申诉受理中心,两天后劫持现在全国消失,于是楼主撤诉。但最近几天劫持又来了,楼主在 2 月 3 日又重新向工信部投诉了一次,但愿这事能有个好结果(虽然不抱太大希望)。楼主第一次投诉时曾开了个帖子记录投诉过程,见直播投诉联通宽带和数据网络( 3G-4G )的 HTTP 链路劫持行为

4. 楼主对所谓「良性」劫持的看法


坚决反对。
有人说,联通的缓存劫持加快了某些境外网站的访问速度啊,体现了联通改善用户体验的诚意啊 balabala (如我投诉直播帖 66 楼),但我觉得这件事情没那么乐观。
因为劫持本质上并没有提高网间互联带宽,互联网的本质是点对点互联,缓存劫持只是造成了网间互联性的假象,当你使用非 HTTP 协议时,带宽不足的问题就出现了。
联通出于成本考虑,在接入网带宽日益上升的大环境下,不去对骨干网和互联带宽扩容,反而去搞缓存劫持,可以预见到以后的网间互联问题会越来越突出。
上面说过,全站 HTTPS 是大势所趋,可以预见,在 HTTPS 流量越来越多的前提下,缓存劫持将变得越来越没有意义。和各大网站合作发展 CDN 才是王道。

5. 「良性」劫持的危害


个人观点表达完了,我们来看看这种劫持是否合乎法律法规。

《中华人民共和国电信条例》 第五十七条 任何组织或者个人不得有下列危害电信网络安全和信息安全的行为:
(一)对电信网的功能或者存储、处理、传输的数据和应用程序进行删除或者修改;
(二)利用电信网从事窃取或者破坏他人信息、损害他人合法权益的活动;
(三)故意制作、复制、传播计算机病毒或者以其他方式攻击他人电信网络等电信设施;
(四)危害电信网络安全和信息安全的其他行为。
第六十五条 电信用户依法使用电信的自由和通信秘密受法律保护。除因国家安全或者追查刑事犯罪的需要,由公安机关、国家安全机关或者人民检察院依照法律规定的程序对电信内容进行检查外,任何组织或者个人不得以任何理由对电信内容进行检查。
电信业务经营者及其工作人员不得擅自向他人提供电信用户使用电信网络所传输信息的内容。
第六十六条 违反本条例第五十六条、第五十七条的规定,构成犯罪的,依法追究刑事责任;尚不构成犯罪的,由公安机关、国家安全机关依照有关法律、行政法规的规定予以处罚:
第六十九条 违反本条例规定,有下列行为之一的,由国务院信息产业主管部门或者省、自治区、直辖市电信管理机构依据职权责令改正,没收违法所得,处违法所得 3 倍以上 5 倍以下罚款;没有违法所得或者违法所得不足 5 万元的,处 10 万元以上 100 万元以下罚款;情节严重的,责令停业整顿:
(四)擅自中断网间互联互通或者接入服务的

《全国人民代表大会常务委员会关于维护互联网安全的决定》
四、为了保护个人、法人和其他组织的人身、财产等合法权利,对有下列行为之一,构成犯罪的,依照刑法有关规定追究刑事责任:
(二)非法截获、篡改、删除他人电子邮件或者其他数据资料,侵犯公民通信自由和通信秘密;

唔,这种良性劫持说到底还是检查了用户的访问内容,切断了用户与目标服务器的通信,估计法律法规上这一关很难过得去。

联通的缓存劫持是通过用 HTTP 302 重定向报文抢答实现的,下面是我整理的缓存劫持对普通用户的危害:
一、可能造成网站和 APP 功能故障。
1. 缓存更新时间及失效时间对用户和网站不可控,缓存的旧数据和新数据无法在时间上保持一致性,可能引发一些「奇怪」的问题。比如好多软件的最新版本下载地址是不变的,如 https://www.example.com/download/latest.exe ,由于缓存的原因会让你一直下载到旧版本。这可能会影响到部分软件的自动更新、自动升级功能。还有如网页中部分资源引用到旧数据导致网页排版和功能异常,验证码被缓存导致验证码怎么都输不对等问题。
2. 由于劫持的方式是使用 HTTP 302 重定向指令,有的应用可能只接受 HTTP 200 OK 为正确的响应,不会识别 HTTP 302 Found 指令,造成通信故障。
3. 劫持后网址经生变化,可能会触发浏览器和部分程序的跨站保护功能,导致网页上的脚本程序无法执行。或者由于相对路径发生变化导致 HTTP 404 错误。
3. 从技术上缓存系统只能通过 URL 来区别不同的资源,不能识别具有相同 URL 的不同资源,这会导致资源加载错误。比如看视频时,出现前一段和后一段内容不一致,下载 Windows 7 系统的驱动结果下载完成后发现是 Windows XP 的驱动,带有敏感用户信息的文件被缓存后对所有人可见等安全问题。
二. 缓存服务器具备篡改或出售缓存数据的隐患,对信息安全不利。目前部分地区的用户已经在网上讨论过下载 A 软件却被替换成 B 软件的情况。
三. 缓存服务器故障时,会造成大量用户「部分断网」。
四. 缓存服务器带宽和处理性能有限,据网上反映由于缓存服务器经常报 HTTP 403 、 502 错误,导致资源无法加载,或由于缓存服务器超载导致加载速度缓慢。
五. 缓存服务器可能触发部分网站的反爬虫(反机器人)、反盗链机制,缓存的内容是服务器报错信息,导致资源无法加载。
六. 破坏了 URL 对用户的透明性。假设用户将劫持后的链接分享给其他人,而联通对缓存服务器做了访问控制,将会导致链接无法在外部打开;另外如果缓存失效而又没有及时更新的话,可能导致用户无法通过此 URL 访问被引用的资源。
七. 损害了 IDC 和 CDN 的利益,此种网络劫持使 IDC 和 CDN 的流量大幅减少,影响 IDC 和 CDN 的流量收入。题外话,话说联通为何不提供商业 CDN 服务而偏要搞劫持?
八. 目前联通的劫持依靠 TCP 抢答的方式,但原始数据包还是会到达目标服务器并被正确响应。就我抓包的情况来看,虽然你访问资源时被 HTTP 302 数据包重定向到了联通的缓存服务器,但原目标服务器的 HTTP 200 响应还是会被送到用户端,且由于得不到用户端的确定不断触发超时重传,极大地浪费了用户带宽。

6. 有人问,为什么运营商多采用 HTTP 302 跳转进行缓存劫持而不是直接反向代理篡改原始数据


问这个问题的朋友是考虑到用 HTTP 302 劫持容易被发现,只接作为反向代理进行篡改比较隐藏难以发现。
我的看法是,不考虑成本的话可以这么做,但是不考虑成本肯定是在耍流氓。
从技术人员的角度看, HTTP 302 跳转方式部署起来最容易,成本最低。因为不需要对原有设备进行改造,只需要在交换机上以分光并联的方式进行连接即可。劫持设备的 DPI (深度包检测)系统可以实时探测用户和正常服务器的通信内容,可根据网络状况、劫持服务器负载、用户身份、访问内容、劫持概率等按需进行劫持。劫持时,只要伪造目标服务器的身份抢在真正的服务器之前向用户发送一条 HTTP 302 报文让用户跳转到新地址即可完成劫持。劫持设备与路由设备分离,方便维护。
而如果直接篡改原始数据,则需要对原有设备进行改造,串联进路由设备,对每一个通过的数据包进行探测,决定放行或劫持。由于无法从目的 IP 判断数据包应发往真正的服务器还是截持服务器,这种系统还要为每个用户维护一份连接会话信息来作区分。可以想象的是,这套系统将对网络性能产生巨大的负面影响,并且难以维护。另外只要搞劫持,不论方式多么隐藏,时间久了就肯定会被用户发现(比如我)。反正这部分用户都会投诉,干嘛这么大费周折呢?


小结

从目前的国情看,投诉不一定能解决问题,但是不投诉运营商会更加肆无忌惮。这几天有时间我会陆续在 V 站发一些如何发现运营商劫持和如果收集劫持证据的个人经验。希望能有越来越多的朋友为维护祖国的网络环境出力。


订正:

1. 链接「百度助警方破获全球首例打击流量劫持刑事案件」: https://www.chinanews.com/cj/2015/05-22/7295090.shtml
2. 「 0.前言」中「面对传统话

短信业务收入下滑」改为「面对传统话

短信业务收入下滑」。
3. 「 6.有人问……」中,两处「隐藏」改为「隐蔽」,「且由于得不到用户端的确

不断触发超时重传」改为「且由于得不到用户端的确

不断触发超时重传」。


写本文的目的是引起一些网民的重视,欢迎以任何形式转载(请附上本文链接)。

另外,投诉运营商劫持的方法。在这之前,需要收集运营商劫持的证据,比如截屏、录像、网络数据包抓包等。另外,和其他运营商的对比也是证明其网络劫持的一种方式。

  1. 首先需要拨打各运营商的投诉电话,电信 10000 ,联通 10010 ,移动 /铁通 10086 ,注意保留通话录音。不出意外的话,客服人员不懂什么是「劫持」,也坚决不承认「劫持」。这时候你可以告诉他记录并向上级反馈。
  2. 不出意外的话( X2 ),一天以内会有相关人员联系你,并且死活不认账,坚称你电脑中毒。这时候你态度一定要强硬,如果服软一切白费。如果地方运营商搞的劫持,你会发现虽然他们不承认,但劫持不见了(这一步通常会把你加入劫持白名单)。如果是上级运营商的劫持,他们通常会向上级反馈。
  3. 如果这一步不能解决问题,除北京市外,请向当地省级通信管理局投诉。通常省级通信管理局会设有投诉邮箱和投诉电话(一般是省会地区区号+12300 )。北京市可以直接转到第 4 步。
  4. 如果还是无法解决,请向工信部投诉。网站 https://www.chinatcc.gov.cn:8080/cms/ ,电话 010-12300 ,邮箱 accept@chinatcc.gov.cn 。一般一天之内会有运营商负责处理工信部投诉的人员联系你,如果三个工作日没有回应可以拨打 010-12300 咨询。

标签: 瞎吐槽, 劫持, 转载

添加新评论