劫持不可避免,但了解现有应用被劫持情况是解决问题的第一步。足够覆盖均匀的真实机器或手机监测点,覆盖所有大中小运营商和地域,就可以从用户视角通过比对校验机制自动监测到链路劫持,并可以分析出劫持范围和保留下劫持现象等。
一、链路劫持
TCP链路劫持其实就是指网络链路上侦听、伪造TCP包,达到控制目标网络链路的行为。最常见的就是某些设备实现的对非法站点的访问拦截,以及一些地区运营商的网页植入广告行为。也有篡改正常网页进行SEO、骗流量的。
因为广域网的链路劫持影响面大,一般会影响一个地区甚至是全国,所以本文重点讨论广域网的TCP链路劫持,局域网的劫持如ARP攻击不在讨论范围。
二、链路劫持形式
目前发现的TCP链路劫持攻击一般有两种形式:中断访问型(分为单向发包和双向发包)和替换页面型。
中断访问型(多以单向发包为主,单向发包被劫持服务器端不易被发现)常见于阻止用户访问某些网站,如某些设备禁止用户访问某些站点。中断访问型阻止用户访问策略也是有概率调整的。目的多是恶性在一个区域让同类竞争对手的应用无法服务,或降低竞争对手应用的用户可用性。
其原理就是伪造服务端给用户发RST包阻止TCP连接的建立(单向发包)。某些设备做得比较狠,在冒充服务端给用户发RST包的同时也冒充用户给服务端发RST包(双向发包)。
替换页面型(多以部分增加页面内容为主,不改动返回被劫持页面请求的目的,也是让服务器端无法主动发现被劫持。)原理也简单,就是在一个HTTP请求后伪造服务端的HTTP响应给客户端,这些利用链路劫持进行的弹窗广告、“技术问题”产生的误拦截、植入代码不慎将页面弄乱、甚至是钓鱼等将会损害用户利益。同时也大大降低了用户体验导致被劫持业务流失,造成被劫持应用的竞争力和公信力下降等等。
补充说明:双向发包劫持概率极低,但对最终用户隐私安全损伤性更大,也给应用运营者带来不必要的法律风险,这种情况可以通过部署在机房的IDS也可以发现端倪。
三、监测链路劫持
要解决链路劫持先要搞清楚哪些地区出现劫持,如劫持大致覆盖范围。链路劫持是区域性的,一般来讲某地区用户集中投诉,就可以联系用户调查了。用户往往不懂Wireshark抓包,还要远程协助,劫持现象也无法还原,没有证据。无从推进解决,甚至都不知道损失有多大。
单项发包中断访问型链路劫持针对应用或url或域名或IP的,可以通过客户端监测采集来判断,如果是替换页面型,页面大小或者HTML元素个数会有异常,也可以通过客户端监测采集来判断。但通过监测点采集判断劫持,就要求监测点覆盖全面且均匀,因为一般劫持都出现在小运营商和区域范围内,并且要保证监测频率均匀稳定,才能发现一些概率性劫持策略的现象。
目前市场上专业拥有真实监测网络资源的监测厂商极少,并且适时推出针对链路劫持监测功能的只有博睿(Bonree)。
链路劫持监测是了解被劫持状况,和劫持预先发现、确定劫持影响范围、保留劫持证据的第一步。
链路劫持解决都是基于前期搜集证据阶段,可以参考文章引用的文章。
四、预防链路劫持挑战
防范链路劫持就比较困难,毕竟攻击者控制着网络链路。不过并非不可能。
一是网站全程使用SSL。再一个就是在客户端或(和)服务器丢弃伪造的TCP包。比如单向中断访问型,就可以丢弃包含伪造特征的TCP包(如Id为0或8888)。但某些项目就是利用客户端、服务端同时丢弃的方式来翻墙的,又会造成次生安全风险。
最后,我们可以看到广域网一点都不安全,所以敏感信息传输一定要加密,还要高强度加密;高端网页最好有个校验机制;自动升级的程序也一定要校验文件签名。
相关文章:http://security.tencent.com/index.php/blog/msg/81