Part1 前言
在世界杯举办期间,链路劫持的攻击风险估计会升高很多。链路劫持攻击是各类应急响应事件中危害比较大的,溯源起来有一定的难度,很多新手会感觉无从下手。本次ABC_123就分享一个自己曾经做过的真实的链路劫持分析案例。
Part2 前置基础知识
为了照顾一下新手朋友,我在这里给出链路劫持分析的前置基础知识,这些基础知识看不懂,后面的分析过程也是看不懂的。已经了解的同学可以直接跳过这一部分。
-
链路劫持定义:
链路流量劫持,是一种针对骨干网等关键信息基础设施的互联网链路的网络攻击方式,利用网络链路和节点,架设服务器部署攻击程序,实现对用户的互联网数据的分析和修改,替换或嵌入有害链接,从而实现不法获利。
链路劫持多用于篡改HTTP响应数据包,然后投放游戏、色情、博彩等领域广告,或者重定向进行网络钓鱼,捕获用户的正常流量,窃取用户敏感信息,进行广告推广及电信诈骗。攻击者可能是黑客,也可能是有相关权限的内部工作人员。
-
IP数据包中TTL作用
TTL(TimeTo Live)生存时间值,在IP数据包从源到目的的整个转发路径上,每经过一个路由器,路由器会把该TTL的值减1,然后再将IP包转发出去。Linux给数据包的默认ttl是64,Windows系统是128,Unix系统是255。设计这个TTL值最初是为了防止环路产生。
-
IP数据包中Identification作用
对于给定地址和协议的ip包来说,它的唯一识别码identification是公差为1的单调递增数列。当程序产生的数据长度超过网络 MTU 而需要分片时,则把标识字段的值复制到所有分片数据包中,最后目的设备才能依据标志字段而正确的重组数据包。因此该字段可以唯一标识某个IP报文。
Part3 溯源分析过程
-
事件背景
某运营商的不少宽带用户反映,访问www.xxx.com(真实的域名就不贴出来了)等网站后,会跳转到一个博彩页面,运营商客户请求我们协助进行溯源分析。
如下图所示:访问www.xxx.com后,服务器返回包中被插入了一段js代码,接着跳转到一个博彩站。(以下截图为虚拟机截图)
-
获取不同区域的流量包
首先,我们找了10多位同事、网友帮忙测试,分别涵盖了移动、电信、联通3大运营商的宽带网及手机热点,让大家用各自的家庭宽带及手机热点去访问www.xxx.com,然后统计哪些同学访问此网站会发生异常行为。这样做目的就是查看异常流量包的影响范围,也可以大致确定攻击手段。
最终发现仅有其中一个运营商的用户,而且尽在一个省的网络环境下,访问www.xxx.com网站会出现跳转到博彩网站,而且家庭宽带及手机热点均会发生异常(为了规避风险,真实的运营商及省市就不写出来了)。由此大致猜测,链路劫持的可能性大,而且是一个区域性的链路劫持。
-
分析异常数据包
接下来使用wireshark抓取一个异常的数据包进行分析,很快发现了异常。同一个http请求,却返回了两个数据包,先到的返回数据包中,被插入了恶意js链接,后到的返回数据包没有被篡改,但是已经被丢弃了。至此基本上确定是链路劫持了。
进一步分析,发现这两个返回数据包的TTL值差别较大,第一个返回数据包的TTL值是56,与上述数据包差别较大,不符合逻辑,第2个正常返回包的TTL值是51。这说明劫持者将篡改后的数据包先于正常的数据包提前给用户返回,导致正常的返回包被丢弃。因为伪造的第一个返回数据包先到,所以正常的返回数据包就被丢弃了。
-
找到出问题的路由节点
这里以www.baidu.com为例子演示吧。如下图所示,数据包由我本机到www.xxx.com,经过了13个路由节点,初始TTL值假设是64,那么最终正常的返回包的TTL值是64-13=51,这一点与wireshark抓包结果相符合。
而伪造异常返回包的TTL值是56,假设劫持者发送数据包的初始TTL值是64,通过计算64-56=8,说明劫持者的位置与我本机相隔8个路由节点,那么出问题的节点应该是在如下图所示的第9个节点。
通过简单的计算,我们很快就找到了问题路由节点,但是溯源真的到此就结束了吗?没那么简单,有时候攻击者会将TTL值进行伪造,不用默认的64、128或者255。在TTL值被伪造的情况如何溯源出异常路由节点呢?请关注本公众号,敬请期待文章《某运营商链路劫持(被挂博彩页)溯源异常路由节点(下篇)》。
Part4 总结
1. 链路劫持攻击是不太可能彻底解决的,对于网站管理者来讲,最有效的解决办法就是全站开启https了,同时要选择可靠的https证书。
专注于网络安全技术分享,包括红队攻防、蓝队分析、渗透测试、代码审计等
每周一篇,99%原创,敬请关注
原文始发于微信公众号(网络安全abc123):第32篇:某运营商链路劫持(被挂博彩页)溯源异常路由节点(上篇)