2015 年 5 月 30日,广受开发者们欢迎的又拍云 Open Talk 技术沙龙再次登陆帝都北京——以《 移动应用技术架构的解读 》为主题的第八期活动,邀请到三位资深技术专家为我们解读移动应用技术架构背后的秘密:初页 CTO 丁乐;风云直播 技术总监 杜川;汽车之家技术架构师莫松,先后登场为开发者们解答技术架构难题。汽车之家技术架构师莫松在活动上作了题为《移动架构漫谈》的分享,以下是演讲实录:

什么是 http 劫持,DNS 劫持为何物?

HTTP 劫持是在使用者与其目的网络服务所建立的专用数据通道中,监视特定数据信息,提示当满足设定的条件时,就会在正常的数据流中插入精心设计的网络数据报文,目的是让用户端程序解释“错误”的数据,并以弹出新窗口的形式在使用者界面展示宣传性广告或者直接显示某网站的内容。

DNS 劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的 IP 地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能反应或访问的是假网址。

【实例 1 】

优酷客户端页面上方的小广告,并不是优酷所添加的,但是却出现在优酷应用中。

image.png
【实例 2 】

传统浏览网页经常会弹出很多弹窗广告,现在这种情况也移植到移动互联网上。经常会弹跳出不堪入目的内容,甚至利用更加恶劣的方式弹跳广告内容。

image.png
【实例 3 】

这是汽车之家的一个页面,最后在客户产生劫持的情况下,直接替换成了另外一个页面。

image.png

产生的原因

①广告插码

发布“流氓广告”的厂商以推销他们的产品形式,将广告投放到各个应用中。

②中小运营商节省流量成本,使用缓存技术,制造一个网速“飞快”的假象

一些中小运营商或者宽带运营商,为了节省流量成本,建立很多类似于缓存技术,多是做假象,直接在内部做一个缓存。

③恶意攻击

竞争对手的攻击,都是属于劫持类的。应用被非法广告植入,数据被非法缓存,被恶意攻击,已成为一种危害。

怎么劫持的呢?

劫持主要是:向客户端发起一个请求向 DNS 服务器,然后去请求我们的 IP。这有三个因素,第一来自网络运营商的机房,这时候有一些漏洞,可能会被内部一些人员或者是一些牟利的机构加以利用。对请求的数据还有来源进行一些篡改。第二,常见的就是“三大运营商”经常做一些推广,向应用接口直接发一些他们的推广信息。他们会直接去劫持拦截你的数据,返回运营商,提示你充值一些数据。

image.png

造成的危害

①应用数据无法更新

②非法跳转,导致页面数据无法展示

③弹出广告影响视觉

④内嵌非法内容影响 APP 产品形象

反劫持实战

①数据合法性校验

合法性管理校验是唯一评判这个数据是否有效的一个手段。他包括两个内容,一个是数据是否完整,还有一个数据的时效性。

合法性的判断来说我们还是惯用的,会去用一个内容生成一个校验串,进行一个验证。如果校验串不匹配,会判定为数据是非法的,被篡改的。

②数据时效性校验

时效性的判断,我们会在数据内容有一个约定,证明数据产生的时间点,客户端有一个校验保证。针对应用里边的页面内容,会对页面的内容以及跳转地址会进行一个黑白名单的匹配,这样来去判别这些数据是否是合法的时效性保证的。

解决方案

①域名劫持

首先针对域名劫持来说,如果是 DNS 劫持,根据它的原理 DNS 是指向被篡改的 IP,需要打破通用的 DNS 获取的方式。所以使用一种 Http DNS 的技术。这个技术简单来说就是使用 Http 的方式,将以往的传统的 DNS 协议替换为 Http 包装的域名解析的一个 IP 地址的集合。如果是针对 Http 链路层的解释,数据篡改的内容,直接对链接进行修改的重试,可以让错误的请求有机会通过我们加设的反向代理机制,帮助他在获取正确的数据。

【Http DNS 的原理】

首先这是一个终端用户,他以前获取目标服务器的方式直接提供域名,访问目标服务器。现在如果他根据之前的图示,他走传统的 DNS 解析服务器方式的话,如果遭受 DNS 解析,他可能指向错误的服务器。这个 Http DNS 方式就是打破传统的 DNS 解析的路径,将 DNS 通过一个 Http DNS 服务器的方式去帮他去从真正的 DNS 服务器,把目标 IP 方式返回到最终用户。用户再根据返回的真正的 IP 地址去返回目标服务器。通过这个方式去对 DNS 劫持方式进行一个有效的访问率的反制。有时候他返回的 IP 可能不止一个,客户端拿到 IP 以后,在客户端来说是注意加速请求的响应,客户端有对被审的 IP 进行一个测速。每次会根据一个失效周期会阶段性的对这个 IP 进行速度的测速,实时转换。这样保证我们提供的 IP 是快速,能够让用户这些请求快速的达到正确的。

image.png
②运营商缓存

运营商缓存这种情况来说,他也是缓存的机制。可以在他的请求的 Url 串里面添加,缓存运作,这时候可以把缓存的方式来得到解决。

③非法跳转

非法跳转是在客户端的浏览器的加载,应用黑白名单策略的匹配。通过这些方式来去实现反劫持的一些措施。

④非法内容插入

更多方式

①网络择优

②劫持日志系统

首先他会能够根据我们之前的如何判定一个劫持的情况,在客户端搜集劫持的一个状况,他会把劫持的类型部分被劫持的接口给客户端,通过在有网比较快速的情况下,WIFI 情况下发送中心服务器去实现这样的搜集。并且他是经过压缩,尽可能的保护流量的节省。

实时数据检测:

image.png
这是反劫持后台日志一个位置的图表,纵向是这一天当中发生的劫持的数量,单位是接口请求数量。横向是每个时间点他产生劫持的情况。今天从0点到24点区间产生劫持的一个数量。还有一个数据是橙色这个线,昨天的数量,蓝色是今天,我们会有一个两天之内的对比,用来发现变化。某些时候运营商的 DNS 解析,他有时候会爆发性的增长,他在某一天有别的活动,他给你劫持很多接口,向移动用户返回他们的促销信息,他被篡改之后的弹窗或者是嵌入式广告。我们能在图表里面发现这个类别里面的情况,有时候运营商做这个事情他的数量会激增,跟前一天有很强烈的比较。出现这样的情况,通过日志里它的劫持样本,就能发现他具体的原因。如果当原因发现某个地区的用户,出现大面积的接口访问错误,我们通过这个表能够找到答案。

成功率对比:

image.png

这个表格是产生劫持以及客户端去用我们反侦策略去重试结果反馈表。白色这个柱状高度表现是他产生的总体数量,绿色这部分表示是改善之后一个成功的数量。绿色这部分是产生的劫持,使用反劫持策略,成功修复的一个数量。通过这个表格,不断的调整优化反劫持的策略,逐渐去努力把白色区域慢慢消除,或者是减小。实际上分析的时候发现,这个数据表跟当日 PV 还是能够吻合,也同时验证判断的结果。比如对劫持类型,劫持发生的时机那种方式是有效的。这种日志系统不管是对于 PV 或者用户行为统计还是对这种劫持的防御工作来说都是很重要。