深入解析HTTPS-Only模式——攻击与防御(存档)
Christoph Kerschbaumer, Julian Gaibler, Arthur Edelstein and Thyla van der Merwe
2021年3月10日
HTTPS-Only的连接模型
当前浏览器实践的根本安全问题是:在初始连接网站时默认使用不安全的http而非安全的https,这使得攻击者可拦截初始请求。劫持初始请求足以让攻击者执行中间人攻击,从而降级连接、窃听或修改客户端与服务器间传输的数据。
左图: 浏览器当前标准行为,默认使用http(服务器支持https);
右图: HTTPS-Only行为,默认使用https并在服务器不支持时回退到http。
行业默认连接模型
当前应对中间人安全风险的最佳实践主要依赖HTTP严格传输安全(HSTS)。但HSTS无法解决初始请求以明文http发送的问题。如上图左所示,当前浏览器默认首先通过http连接foo.com(步骤1)。若服务器遵循最佳实践并实现HSTS,则响应重定向至网站安全版本(步骤2)。在后续GET请求(步骤3)后,服务器添加HSTS响应头(步骤4),表明其偏好https连接,浏览器应始终向foo.com发起https请求(步骤5)。
HTTPS-Only连接模型
相反,如上图右所示,HTTPS-Only方法首先尝试通过https连接Web服务器(步骤1)。鉴于大多数流行网站支持https,我们的升级算法通常能建立安全连接并开始加载内容。少数情况下,https连接失败且服务器报错(步骤2)。此时,HTTPS-Only模式会提示用户说明安全风险,选择放弃请求或通过http连接(步骤3)。
HTTPS-Only的实现细节
我们遵循“默认安全”原则设计HTTPS-Only模式,即默认将所有传出连接从http升级为https。此原则使实现具备未来兼容性,例外情况需通过设置HTTPS_ONLY_EXEMPT标志显式标注。
我们提出的安全增强功能内部通过将URL方案从http重写为https,升级(a)顶级文档加载及(b)安全网站内的所有子资源加载(图像、样式表、脚本)。此升级算法通过调用函数nsHTTPSOnlyUtils::ShouldUpgradeRequest()实现。
升级顶级(文档)请求时存在响应不确定性,浏览器需处理此类情况。例如,无响应防火墙或配置错误/过时服务器可能导致长时间超时。为减轻用户体验降级,HTTPS-Only首先发送https顶级请求,若3秒内未收到响应,则通过调用nsHTTPSOnlyUtils::PotentiallyFireHttpRequestToShortenTimout()发送额外http后台请求。若http后台连接先于https连接建立,则强烈表明https请求将超时。此时取消https请求并向用户显示HTTPS-Only模式异常页面。
除全面强制子资源使用https外,HTTPS-Only还通过调用nsHTTPSOnlyUtils::ShouldUpgradeWebSocket()处理WebSocket。
最终,HTTPS-Only还需与两个关键浏览器安全机制完全集成:(a)混合内容拦截器,及(b)跨源资源共享(CORS)。我们通过调用nsHTTPSOnlyUtils::IsSafeToAcceptCORSOrMixedContent()适配这两项安全机制。
HTTPS-Only的成功率
HTTPS-Only方法专门确保连接使用安全https协议(传统浏览器会使用http协议)。为此数据集,我们记录HTTPS-Only模式通过将URL方案从http重写为https成功升级连接的案例。
通过HTTPS-Only将顶级(文档)传统地址从http升级为https的尝试(2020年11月17日至12月17日收集数据)。
如上图所示,HTTPS-Only机制成功将73%以上的传统地址顶级(文档)加载从http升级为https。这73%的成功升级源于用户点击传统http链接或在地址栏输入http(甚至无方案)URL,且目标网站幸运地支持https。
我们观察到HTTPS-Only能成功将十分之七的顶级加载从http升级为https,反映了网站普遍迁移至支持https的趋势。同时,传统地址的成功升级比例也证实网页仍包含大量基于http的URL,传统浏览器会建立不安全连接。
启用HTTPS-Only时顶级(文档)加载的https使用情况(2020年11月17日至12月17日收集数据)。
如上图所示,收集信息表明92.8%的情况下顶级URL已是https无需升级。进一步发现,HTTPS-Only用户在3.5%的加载中成功从http升级为https,总体96.3%的页面加载为安全。剩余3.7%的不安全页面加载发生在用户显式允许不安全连接的网站上。注意,观察到的不安全顶级加载总数取决于用户在豁免HTTPS-Only的网站上访问的页面数量。
未来展望
提供系统安全设计的架构洞察对于真正开放工作至关重要。我们希望分享技术细节和收集的升级信息能让贡献者、黑客和研究人员验证我们的主张,甚至基于所提供见解构建新的研究模型。