关于浏览器混合内容的安全性

Seebug Paper之前收录了三篇文章有些关联性,分别是:

  1. 绕过混合内容警告 – 在安全的页面加载不安全的内
    http://paper.seebug.org/112/
  2. 检测本地文件躲避安全分析
    http://paper.seebug.org/87/
  3. 基于浏览器的指纹识别:影响和缓解措施
    http://paper.seebug.org/64/

有个关键点是:混合内容的安全性

这里提到的主要是协议的混合,如https/http/file/res/mhtml等,现代浏览器逐渐开始隔离这些协议,比如https下加载http的内容时,给出安全提示;再比如“修补”file/res/mhtml这些协议在http协议的网页里带来的安全问题,如本地文件探测(常见的是杀软探测)。

玩前端Hack的都知道,修补与绕过总是在博弈,而且浏览器们的修补是存在差异的,也就是可能出现浏览器安全差异。

很早以前,我在写https协议下的XSS exp时,就注意到:当载入http内容时,浏览器的安全提示。后来解决方案是采用DOM动态操作来绕过,这个技巧和第一篇文章里提的一样。为什么这样可以?这个关键点就是浏览器安全机制的触发机制,采用DOM动态操作时,这个浏览器安全机制并不会触发。我的理解是DOM的操作实在过于繁杂,为了性能平衡,许多浏览器安全机制并不会触发,而仅在页面加载时触发。当然,我也认为这种理解不总是成立,具体问题还得看场景分析。

这种特性能带来很多有意思的前端Hack技巧,比如AngularJS发布时,我就做了个有趣的安全测试(Bypass CSP),当时利用AngularJS丰富的前端异步加载机制,有些外域内容通过合法的异步加载再在本页面渲染解析,达到无视CSP策略的效果。

顺着这个关键思路,我们的绕过就不需要那么直接去面对对应的安全机制,而是采用规避方式:也就是想办法不触发某些我们不喜欢的安全机制,这是我们绕过的核心点。

还有,第二篇文章提到的window.open技巧,是一种好技巧,浏览器需要特别对待,否则这对于前端Hacker来说也是个非常好的“触发机制混沌区”。在我看来,浏览器对待window.open多少有些无奈,首先是历史原因导致还未摒弃,然后奇特的父子权限模型,及为了用户体验而允许点击事件下的不拦截弹窗,这还导致了一系列其它类别的安全问题,如钓鱼。

回到混合内容的安全性。现在及未来,不仅协议之间如此隔离,内容也一样,CSP策略正是为此而生。

在HTML5如日中天及前端框架百花齐放的现在,DOM里的博弈不会消减,可预见的是会更加激烈。虽然,这三篇文章都是上古时代的Hack延续了…

本文,手机上写的。先这样:-)

发表评论

电子邮件地址不会被公开。 必填项已用*标注