您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
移动开发构架漫谈——反劫持实战篇
 
 来源:21CTO  发布于: 2016-10-20
   次浏览      
 

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

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

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

【实例 1】

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

【实例 2】

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

【实例 3】

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

产生的原因

①广告插码

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

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

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

③恶意攻击

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

怎么劫持的呢?

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

造成的危害

①应用数据无法更新

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

③弹出广告影响视觉

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

反劫持实战

①数据合法性校验

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

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

②数据时效性校验

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

解决方案

①域名劫持

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

【HttpDNS的原理】

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

②运营商缓存

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

③非法跳转

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

④非法内容插入

更多方式

①网络择优

②劫持日志系统

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

实时数据检测:

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

成功率对比:

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

   
次浏览       
 
相关文章

手机软件测试用例设计实践
手机客户端UI测试分析
iPhone消息推送机制实现与探讨
Android手机开发(一)
 
相关文档

Android_UI官方设计教程
手机开发平台介绍
android拍照及上传功能
Android讲义智能手机开发
相关课程

Android高级移动应用程序
Android系统开发
Android应用开发
手机软件测试
最新活动计划
软件架构设计方法、案例与实践 8-23[特惠]
Linux内核编程及设备驱动 8-15[北京]
Python、数据分析与机器学习 8-23[特惠]
嵌入式软件架构设计 8-22[线上]
QT应用开发 9-5[北京]

android人机界面指南
Android手机开发(一)
Android手机开发(二)
Android手机开发(三)
Android手机开发(四)
iPhone消息推送机制实现探讨
手机软件测试用例设计实践
手机客户端UI测试分析
手机软件自动化测试研究报告
更多...   


Android高级移动应用程序
Android应用开发
Android系统开发
手机软件测试
嵌入式软件测试
Android软、硬、云整合


领先IT公司 android开发平台最佳实践
北京 Android开发技术进阶
某新能源领域企业 Android开发技术
某航天公司 Android、IOS应用软件开发
阿尔卡特 Linux内核驱动
艾默生 嵌入式软件架构设计
西门子 嵌入式架构设计
更多...