关于应用宝劫持的技术分析

你有没有遇到过下面这些情况:

  • 在手机上下载 XX 应用安装包时,打开下载回来的安装包后发现根本不是 XX 应用,而是应用宝
  • 一些应用提示更新,更新包下载完成之后,你发现根本不是这个应用的安装包,而是应用宝
  • 在一些国内安卓市场上下载应用时,本来安装的是 XX 应用,但安装成功后发现实际上安装的是应用宝

如果你遇上过上面任何一种情况,恭喜你,你被劫持了。

为了通俗地解释应用宝劫持是怎么回事,首先我们需要了解下载是怎样进行的。

———-下面是科普内容,专业人士可跳过——————–当你要下载某个应用的时候,会经过下面几个步骤:

  1. 我:我需要下载 XXX 文件
  2. 服务器:给,这是你要的文件

其实基本的流程很简单,不过有时候,这个流程会稍微复杂一些:

  1. 我(对服务器 1):我需要下载 XXX 文件
  2. 服务器 1:这个文件不在我这里,你去服务器2那里下载
  3. 我(对服务器 2):我需要下载 XXX 文件
  4. 服务器 2:给,这是你要的文件

这叫做重定向,我们本来是想去服务器 1 上下载文件的,但是服务器 1 告诉我们去服务器 2 上下载,最后我们就到服务器 2 上下载了。

应用宝劫持的过程是这样的:

  1. 我(对服务器 1):我需要下载 XXX 文件
  2. 应用宝劫持黑手(抢在服务器 1 前面回答):你要的文件不再我这里,你去服务器 XX 那里下载(注意,XX 服务器是应用宝劫持黑手给出的,我们一旦去 XX 服务器下载,就会下载到应用宝)
  3. 我(对服务器 XX):我需要下载 XXX 文件
  4. 服务器 XX:给,这是你要的 XXX 文件(其实不是 XXX 文件,而是应用宝)

然后你下载回来的安装包就是应用宝的安装包了。

——————-上面是科普内容,专业人士可跳过——————-

下面开始技术细节的讨论。

应用宝的劫持很聪明,它在一段时间内仅仅做一次劫持,根据我的体验,可能是 24 小时。也就是说,如果你已经被劫持过一次,那么在接下来的 24 小时内,你都不会被劫持了,可以正常下载 APK 安装包了。

这是一个很聪明的策略,在劫持用户的同时不会引起用户太多的反感,也不会实质性地影响用户的下载(因为用户可以重新下载,而重新下载时是不会被劫持的),这样,就不会引起大规模的用户投诉。不得不承认,幕后黑手确实很狡猾。

有些人认为这是 DNS 劫持,其实不是的,DNS 劫持要做到这种效果,其实代价很大。要做这样的劫持,HTTP 流量劫持是最好的。事实上,从 Google Play 上安装软件就不会被劫持,这可能是 Google Play 在下载安装包的时候使用了加密的连接。

幕后黑手的另一个狡猾之处是,它仅对试图下载 APK 文件的流量进行劫持,甚至,它可能还会使用 User Agent 的信息,仅仅劫持 Android 系统的流量。这就把流量劫持限定在了 Android 用户身上,而不会对其他用户造成任何影响,这就进一步降低了用户投诉的数量。

事实上我自己已经被劫持过多次,但是因为在一段时间内仅仅会劫持一次,所以在被劫持之后再去收集证据就变得比较困难。我在被劫持了多次之后,终于摸索到劫持的规律,也就是一段时间内仅劫持一次。摸索到这个规律后,我就估摸着劫持快要发生的时候,先打开 Wireshark 进行抓包,然后再尝试下载 APK 文件,最后抓到了应用宝劫持流量的证据。

不出所料,应用宝确实是劫持 HTTP 流量的,下面三张截图很清晰地反应了这一事实:

应用宝劫持抓包数据-01

这是第一张图:我发起了一个 APK 下载请求,请求下载小米运动的最新版。图中可以看到,请求的文件后缀是 apk,User Agent 显示我是 Android 系统,这已经给了劫持方足够的信息:这是一个可以劫持的流量。


应用宝劫持抓包数据-02

这是第二张图:劫持方抢在服务器之前回应了我的 HTTP 请求,并使用 HTTP 302 重定向告诉我应该去 s3.fenghaoda.com 上下载这个文件。请注意,这个 TCP 包的 ACK 是 305。此时,我已经被引导到劫持者给出的下载地址去了。


应用宝劫持抓包数据-03

这是第三张图:这是真正的服务器回包,ACK 也是 305,但由于劫持者的包先到达,所以这个包被当作重复包被操作系统丢弃了。可以看到,虽然这个包也要求进行 HTTP 302 重定向,但重定向地址明显是真正的下载地址。

以上三张图已经可以作为应用宝进行 HTTP 流量劫持的证据了,下面来讨论一些其他的问题。

流量被劫持到了 s3.fenghaoda.com 这个域名上,我对这个域名做了 WHOIS 查询,得到信息如下:


Registry Registrant ID:
Registrant Name: yujie
Registrant Organization: yujie
Registrant Street: beijing
Registrant City: shi jia zhuang shi
Registrant State/Province: he bei
Registrant Postal Code: 100000
Registrant Country: CN
Registrant Phone: +86.05922669759
Registrant Phone Ext:
Registrant Fax: +86.05922669759
Registrant Fax Ext:
Registrant Email: 41290478@qq.com
Registry Admin ID:
Admin Name: yujie
Admin Organization: yujie
Admin Street: beijing
Admin City: shi jia zhuang shi
Admin State/Province: he bei
Admin Postal Code: 100000
Admin Country: CN
Admin Phone: +86.05922669759
Admin Phone Ext:
Admin Fax: +86.05922669759
Admin Fax Ext:
Admin Email: 41290478@qq.com
Registry Tech ID:
Tech Name: yujie
Tech Organization: yujie
Tech Street: beijing
Tech City: shi jia zhuang shi
Tech State/Province: he bei
Tech Postal Code: 100000
Tech Country: CN
Tech Phone: +86.05922669759
Tech Phone Ext:
Tech Fax: +86.05922669759
Tech Fax Ext:
Tech Email: 41290478@qq.com

通过这些信息,可以看到一些有趣的东西:

注册城市和省份写的是石家庄市,但邮编和接到地址却写了北京,而联系电话的区号是 0592,这是厦门的区号。

组织名和注册人名字都是 yujie,看来这是个人行为?或者是实施此行为的组织内部管理不够严格?

注册人可能将 QQ 邮箱作为主邮箱,从概率上来说,此人的技术水平很有可能低于平均值。

DNS 服务器对应的是 DNSPod 的个人专业版服务器。

此人不会使用 WHOIS Privacy 保护自己(都上 DNSPod 的收费版了,可能会没钱上 WHOIS Privacy 吗?)

直接访问 www.fenghaoda.com,得到 HTTP 403 错误,访问 www.fenghaoda.com/robots.txt 还是得到 HTTP 403 错误,使用搜索引擎查询 site: www.fenghaoda.com 没有结果。
好吧,直接访问 fenghaoda.com ,结果发现这是一个面向移动端的网站,网站内容看起来像是一个应用市场。网站最下方署名“西昌时空文化传媒广告有限责任公司”。

应用宝被劫持到的地址是 http://s3.fenghaoda.com/Download/main?pid=5 ,我把 pid 参数改成其他值,发现可以下载到 PPAssist,SogouMall 之类的应用。看来这些厂商也会劫持用户的流量?当然这不一定,也有可能是厂商提供安装补贴,然后某些人就以流量劫持的方法谋取这些补贴。这是我接下来要讨论的问题。

那么,劫持流量的人是谁?我们没有直接的证据,只能猜测。

从目前搜集到的信息来看,实施劫持流量的可能是下面几种人或组织:

  1. 电信运营商主动劫持,并获取厂家的应用安装补贴。
  2. 黑客以牟利为目的自发地进行劫持。
  3. 厂商自己花钱请人(可能是黑客、运营商官方或者是运营商内部有权限的工作人员)劫持流量,推广自己的应用。

首先第二种,也就是黑客自发劫持不太可能。以“应用宝 劫持”为关键字搜索一下就会发现,这个现象在全国都有,凭黑客一人或几人之力不太可能在全国进行如此大规模的劫持。

第一种和第三种情况都需要有运营商的参与,事实上这也和观察到的现象比较符合——伪造的 HTTP 回包比真正的 HTTP 回包更早达到客户端,而且延迟很短(从图上可以看出,从发出请求到收到假回包,时差只有不到 10 毫秒),这表明包很有可能是在较近的路由上发回来的,这就需要运营商的支持才能做到。如果在网站服务器所在机房进行劫持,假回包的时差不可能这么小。

从目前搜集到的信息来看,也就只能把可能性缩小到第一种和第三种情况上了。但是,不管是哪种情况,运营商都是难辞其咎的。

于是,又到了工信部出场的时候了,如果你再次遇到了被劫持的情况,就可以向工信部投诉,投诉理由可以是这样:

“我认为电信运营商劫持流量,将我要下载的应用替换成别的应用,这严重影响了我的下载体验。我要求运营商停止劫持行为,并给予合理补偿。”

当然,运营商肯定会矢口否认,这时候,你可以再次投诉,投诉口径如下:

“我遭到了 HTTP 流量劫持,由于运营商否认是他们进行流量劫持,故我认为流量劫持是由于黑客攻击了运营商的网络造成的。我要求运营商加强网络安全建设,并调查流量被劫持的原因,给出调查结果,同时给予我合理的补偿。我已经请专业人士检查过我的电脑,确认我的电脑没有中毒,路由器等网络设备没有问题,可以确定流量劫持是在运营商的设备上发生的。”

这回运营商就没办法了。

其实我早就想投诉了,不过一来懒,二来最近也没怎么被劫持了,所以就没去投诉。现在好不容易抽出时间来写这篇文章,如果你看到了,被劫持了,行动力又很强的话,欢迎你去投诉。

对了,投诉的时候先直接打运营商客服电话投诉,然后再投诉到工信部并表明你对运营商的处理不满意,这样工信部才会受理哦。

本文发表于 技术向,并添加了 , , 标记。保存永久链接到书签。

发表评论

电子邮件地址不会被公开。