跨站脚本(XSS)攻击可能会通过如下方式出现:用户输入的数据包含了恶意代码,而服务器没有将这些输入进行安全过滤便直接返回给用户浏览器,恶意代码因此被浏览器执行,攻击者从而可能控制浏览器DOM。这些包含恶意代码的输入可能利用以下几种形式实现:script tags, Data URI references, onEvent references, iframes等。梭子鱼Web应用防火墙可以帮助阻断跨站脚本(XSS)攻击。
梭子鱼Web应用防火墙跨站脚本(XSS)规则集把跨站脚本(XSS)签名划分为不同类别,每个类别下包含所有可能的违规漏洞。其中一个类别针对基于事件属性的跨站脚本(XSS)攻击,涵盖onmouseover、oninput、onformchange等事件类型,这些事件类型可以在OWASP上找到完整的事件处理程序列表。
然而不同浏览器对于服务器响应内的JavaScript脚本的识别可能有较大的差异。这也让攻击者因此采取许多模糊化的策略,例如在事件处理程序嵌入一些字符,比如嵌入回车键、空字符、换行符、编码过的字符、多余的括号、注释标记等。这些嵌入的字符可以分隔输入数据,让浏览器无法正确的识别脚本代码,以实现绕开安全过滤器的行拦截,服务器给浏览器的响应将仍然包含这些脚本代码,最终将被浏览器执行。
尽管不同平台或版本的浏览器可能对脚本的识别有些差异,但是梭子鱼对这些浏览器进行了适配,可以进行防护,以应对模糊攻击策略。用户可以在梭子鱼WEB应用防火墙的WEB管理页面的‘高级设置’-‘默认数据类型’页面查看到部分梭子鱼定义的特征类型,数据类型正则表达式里‘xNN’代表十六进制值表示的ASCII码字符,例如:退格(08)、回车(0D)等,可以点击‘详情’查看防护的事件处理程序的名称。
然而对于太老的浏览器或者引入新的事件处理程序(比如在HTML5中),可能会出现无法过滤的情况,但是这是极少。梭子鱼实验室通过监测威胁状况以及来自安全研究领域的贡献,不断更新数据类型。当新的数据类型进行更新时,各种型号之间对其采取的防护模式略有不同。梭子鱼Web应用防火墙460及以下的型号采取主动模式。而660及以上的型号采取被动模式,设备的管理人员在预览了更新的数据类型之后可根据其需求将其调整为主动模式。
对于这些数据类型的另一个考虑因素就是安全性与可用性之间的权衡。一个非常严格的数据类型策略可能会误拦一些正常的输入,比如我们如果定义阻断所有包含on*的事件的话,那么一些输入,比如one=xyz,可能被误判为跨站脚本(XSS)攻击。一种数据类型表达式也可用来阻止所有“on”后面跟随3-16个字符的输入(和其他的反规避构造一起),当然,这是一个更加严格的模式,可能会在案例中导致误判,比如某个输入中包含onerous=。以上讨论是基于黑名单参数输入防护策略。在使用白名单时,可以选择手动,或者通过自动分析器,这种错误根本就不会出现。目前最理想的状况就是修复代码。然而,如果不提供源代码,或者缺乏修复代码的专业知识和资源,修复代码就不可行。梭子鱼Web应用防火墙规则库和其它高级功能提供了一个针对这种应用层攻击的非常强大的修复机制,无需修改任何源代码。
原文发布时间为:2015-12-07
本文来自云栖社区合作伙伴至顶网,了解相关信息可以关注至顶网。