无视HTTPS建议中间人进犯
大约十年前,Firesheep制作了一个大新闻。多年来,安全人员现已了解了公共WiFi网络的损害,但直到有人创立了这个用户友爱的Firefox扩展插件之后,这个安全问题才得到了人们的重视。从那时起,网络上发作了许多作业,那么这样的作业还有或许再发作吗?
TL; DR; 由于HTTPS的存在,MITM进犯现在不再是一个问题。可是,运用CORS,postMessage和其他一些很帅的东西,有时也能够绕过HTTPS。尽管这是网站一切者的错,但受害的却是用户。
几年前Firesheep是人们脑际中最重要的东西。在那个时代的网站,比如说Facebook,默许状况下还没有开端运用HTTPS。移动设备(包括笔记本电脑和手机)的急剧增加使得连接到不受信赖的WiFi网络变得越来越遍及。
八年后的今日,这实践上不再是一个问题。这是由于HTTPS的广泛选用,让许多的网络流量能够被加密传输。就在上星期,WIRED宣布了一篇名为“ 关于运用酒店的Wi-Fi 你知道些什么?。来自你的设备的流量现在已被加密,即便有人主张MITM进犯,你也不会遭到什么太多的影响。这肯定是真的,当谈论到安全性时,你在酒店或咖啡店所说到的第一件作业便是MITM,但它现已发作了很大的改变。
当你在假日旅行时,从机场到上飞机再到入住酒店,你或许会发现自己面临着一个了解的窘境:我真的要挑选信赖这些随机的公共Wi-Fi网络吗?就在几年前,答案简直肯定是挑选不信赖。可是在2019年,你的答复或许会有不同。– Wired
可是,即便网络流量被加密了,但假如有人主张了MITM进犯,依然会发作许多欠好的作业。能够从几个视点动身评论这个论题。本文将要点介绍怎么运用现代Web技能持续主张MITM进犯,以及网站一切者该怎么阻挠这种进犯。
(WIRED发布的文章依然有一个有用的观念,但也有很大技能评论空间。)
进犯场景的其余部分将依据下面的一些条件
你正在酒店过夜,并将你的设备连接到酒店的WiFi。由于你处于不受信赖的网络中,因而你或许不会去阅览任何灵敏的信息。
可是,你正在运用与平常相同的阅览器会话。出于便利,人们永久不会退出Facebook或他们的作业电子邮件。
HSTS和cookie标志
咱们需求从一些有关HSTS的基本信息开端。
HSTS是一个HTTP标头,它指示阅览器后续只应测验经过HTTPS的方法加载该页面。从阅览器第一次拜访具有此标头的网站时,它会将域名增加到列表中,并在标头中指定的时间内记住它。即便我清晰的写了http://网页阅览器也会直接经过HTTPS发送恳求。
也能够增加一个标志来预先加载标头。当Web阅览器获取更新或下载时,会包括预加载的域名列表。Web阅览器将回绝向这些域名发送HTTP流量,即运用户第一次拜访这些站点也是如此。
HSTS的另一个重要特性是名为includeSubDomains的标志。假如https://example.com包括此标头,则Web阅览器将回绝发送任何未加密的流量到http://foo.example.com。
HSTS标头只能在HTTPS恳求中设置。依据标准,这个标头在HTTP恳求上应该是不起作用的(实践上没有经过足够多的阅览器测验来确认这一点)。当人们按以下次序进行重定向时,这会导致一个常见问题:
http://example.com> http://www.example.com> https://www.example.com
由于第一个HTTPS恳求将转到www. 因而includeSubDomains-flag并不起作用的,由于必须在apex域名上设置。
最终,还需求说到的一个东西是安全标志(secure)。这是在创立cookie时在cookie上设置的标志。设置此标志后,将永久不会经过HTTP发送cookie。假如向http://example.com宣布恳求则呼应看起来像是用户没有保存的cookie相同。
CORS
咱们之前在这里现已说到过一些关于CORS常见的过错装备。假如你还没有正确装备,那么我主张你先阅览那篇文章。
最简略的进犯方法是压根儿不运用HSTS。假定CORS现已启用,那么http://example.com能够恳求https://example.com并读取数据。这在MITM场景中是或许发作的,由于宣布恳求的那个恳求是经过HTTP保管的。由于实践的恳求将经过HTTPS发送,因而即便带有secure标志的cookie也会随之发送。
另一个十分常见的问题是CORS答应拜访任何子域名,但HSTS没有设置includeSubDomains-标志。这意味着进犯者能够在http://foobar.example.com上保管歹意的javascript然后向https://example.com宣布恳求。在MITM进犯场景中,进犯者能够随意结构他们想进犯的任何子域名。在评论HSTS时,咱们在前面现已解说过,它存在一个重定向问题,因而当主应用程序保管在www上时,这种进犯方法就很常见的。
一个风趣的进犯向量是在运用HSTS时,CORS能够支撑多个域名。咱们用一个实在的事例来阐明一下,在periscope.tv上的CORS能够经过HTTP和HTTPS承受*.periscope.tv,*.pscp.tv和*.twitter.com。只需有人登录到periscope.tv,HSTS就会保证后续的恳求不会经过HTTP发送到该域名。可是,受害者之前从未拜访过*.pscp.tv的或许性很大,并且在MITM进犯场景中,进犯者能够在那里假造一个HTTP的页面并发送恳求到periscope.tv。在这种状况下,这种进犯将被阻挠,由于一切这些域名的一切HSTS战略都是预加载的。
postMessage
正如咱们之前所述,在运用postMessage时查看音讯的来历十分重要。可是,这些查看仅查看来历是否以特定内容作为结束并因而导致进犯者能够匹配任何子域名,这是个很常见的问题。这意味着彻底没有查看协议。任何子域名上的HTTP页面都能够将音讯发送到主应用程序。
还有一些依据正则表达式的来历查看,有意答应了HTTP和HTTPS,即便Web应用程序应该只能经过HTTPS运用也会答应匹配HTTP。还应该留意的是,有几种网络协议实践上也能够保管Web内容,例如FTP。因而,必须保证将HTTPS列入了白名单,而不是将HTTP列入黑名单。相关事例请查看:https://hackerone.com/reports/210654
至于与HSTS的组合运用,实践上与CORS的问题遵从的是相同的准则。
WebSocket
WebSocket实践上在握手恳求中同享了cookie,因而需求用与CORS恳求相似的方法进行源的查看。这仅在应用程序需求重视cookie数据时才很重要,因而并不总是适用于许多状况。
https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers
或许现已有一些相似的方法或技能以上述相似的方法被乱用。假如今日没有,那很快就会有。假如MITM在你的要挟模型中,那么这些都是不该忽视的问题。
[1] [2] 黑客接单网