由于不能改变用户的输入习惯,很多网站在实现全站HTTPS后,选择通过配置强制301的方式让用户的http请求重定向到https,以保障网站的安全性。然而,在用户发起http请求的时候,仍然存在有中间人攻击的风险,这种方案并非是绝对安全的。下面就结合我们最近亲历的一次中间人攻击,来深入分析下这种劫持行为。
事情的起因,是当我们实现全站HTTPS后,对核心页面都部署了监控任务来分析页面的劫持情况。我们惊讶的发现,虽然劫持率有大幅度的下降,然而仍然存在零星的劫持现象。如下图所示,拨测访问http://www.suning.com/并没有按我们预期的那样301重定向到https://www.suning.com/。而是被302临时重定向到了另一个流量页面。
于是,我们下载了拨测中的抓包文件,进行了分析。如下图所示,是发生劫持的TCP流。
过滤出对应的HTTP流如下所示:
很明显,在客户端和服务端通信的链路上发生了中间人攻击,中间人在服务端响应返回之前迅速返回给客户端一个恶意的报文,报文内容是
http://101.201.79.5:12224/dsgeneral?c=suning1&u=https%3A%2F%2Fsucs.suning.com%2Fvisitor.htm%3FuserId%3D29792464%26webSiteId%3D1800%26adInfoId%3D0%26adBookId%3D104049%26channel%3D14%26vistURL