微软IE8 XSS过滤器的深度思考与安全解析

本文深入探讨了微软IE8 XSS过滤器的架构、优势与局限性,分析了其对反射型XSS攻击的防护效果,同时指出了对DOM型和存储型XSS的未覆盖问题,并讨论了客户端脚本选择性禁用的潜在风险。

微软IE8 XSS过滤器的深度思考

嗨,我是Trusteer的Amit Klein。
不久前,微软SWI的David Ross联系我,询问我是否愿意评审新的Internet Explorer 8 XSS过滤器。鸡喜欢啄食吗?;-) 我当然自愿参与了。我的评审以一种相当有趣的方式进行。我没有直接访问过滤器本身。不确定这是否是故意的,但在我看来结果很好。我没有直接对抗实时过滤器,而是与David进行了一系列讨论(主要是我提问,David回答),围绕过滤器的架构和算法。在某个时候,David给了我架构概述(现在已公开)。基于David提供的信息,我提出了潜在的问题/漏洞/攻击,然后我们讨论了这些,通过这些讨论我学到了更多,导致我修订了对过滤器的心理模型,进而产生了更多潜在攻击,如此循环。我对微软在保护XSS过滤器方面已经进行的工作印象深刻。虽然beta 2过滤器并不完美,但请记住,完整版本(在IE 8中)的过滤器将基于略微不同的实现,以及(我希望)微软从所有评审beta过滤器的个人那里收集的反馈。我相信这将使微软能够为完整的IE 8版本提供一个非常强大的过滤器。

优点

总体而言,我认为XSS过滤器是微软在减少最普遍XSS类型攻击面方面的一大举措。正如我所说,我对微软投入的工作量和过滤器的覆盖范围印象深刻。从我与David的讨论中明显看出,微软团队对当前XSS知识体系非常熟悉——他们在雷德蒙德确实做了功课。现在,我确信过滤器中的缺陷会出现,但这样想:没有过滤器,XSS(我这里只谈类型1)利用完全取决于应用程序中XSS漏洞的存在。找到它,你就成功了。对于IE 8客户端(受害者),你需要找到应用程序中的XSS漏洞,并希望它与过滤器中的漏洞对齐。这有多可能?可能不太可能。所以XSS可利用性大大降低。这是一个经典的80-20规则决策。

缺点

XSS过滤器只尝试过滤“类型1”(又名“非持久性”/“反射型”)XSS。它不处理“类型0”(又名“DOM型”)XSS和“类型2”(又名“持久性”/“存储型”)XSS。我想强调,微软明确说明了这一点(“Internet Explorer 8 XSS过滤器旨在缓解反射型/类型1 XSS漏洞”)。所以只处理类型1 XSS是设计上的。并且是合理的,因为类型0和类型2不一定将注入的字符串反射到响应页面中。处理它们将需要完全不同的架构。

然而,我担心人们(技术性稍差的)会从字面上理解“XSS过滤器”这个标题,并因此认为它是所有类型XSS的解决方案。反过来,这可能导致挫败感和误解。

换句话说,我在这里的担忧更多是关于消息传递/定位,而不是过滤器的实际性能。

潜在问题

过滤器可以选择性地停用客户端脚本,这让我有点担忧。参考威胁是一个恶意网站框架另一个(受害者)网站。通过精心构造框架URL,攻击者可以停用框架中的一些(也许是所有)脚本标签。这让我有点不舒服。然而,David公正地评论说,这个“功能”已经以某种形式存在,即通过将框架的安全属性设置为“restricted”。所以这里没有新东西…

总结

IE 8 XSS过滤器是Web安全向前迈出的一大步。然而,它(至少目前)不是XSS问题的决定性解决方案,因此Web开发人员在编码应用程序时仍建议遵循安全编程实践。

我真的很享受评审过滤器并与微软(特别是David Ross)合作改进它。而且,当我们在这里时——我看到微软的开放性和与非微软安全研究人员的接触是我们Web安全社区成熟的标志。所以毕竟还有希望;-)

谢谢阅读,
-Amit

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计