理解跨站脚本( XSS) – 不仅仅是脚本注入

交叉网站脚本(XSS)仍然是最普遍的网络应用漏洞之一,在OWASP Top 10中一直出现。在核心,XSS允许攻击者将恶意客户端的脚本注入其他用户浏览的网页。注入的脚本在受害者的浏览器中执行,允许数据被盗(cookies,会话符),会话劫持,毁损,或重定向到翻页网站。要了解防火墙如何帮助 — — 以及它们落差的地方 — — 我们必须首先区分XSS的三个主要类型:

  • Stored (Persistent) XSS – 恶意脚本永久存储在目标服务器上(例如,在数据库,评论字段,或论坛帖子中). 每个访问受影响页面的用户都会执行有效载荷.
  • Reflected(Non ⁇ persistent) XSS – 注入的脚本在网络服务器上反射,一般通过一个精心设计的URL或格式提交来反映. 有效载荷没有存储;它只有在受害者点击恶意链接时执行.
  • DOMQ基于 XSS – 脆弱性完全存在于浏览器的客户端的QSide代码中。攻击有效载荷从未发送到服务器;相反,它修改了DOM环境,并从那里执行。这些攻击对于服务器的XSide防御来说是看不见的。

每一种类型都对安全控制提出了独特的挑战。 防火墙 — — 特别是Web应用程序防火墙 — — 能够提供强大的防护,防止反射和一些存储的XSS,但基于DOM XSS的XSS要求额外的客户端++边措施。

现代网络安全中的防火墙是什么?

防火墙最初是网络的“级别”设备,根据IP地址、端口和协议过滤流量。今天,这个词包括一系列安全系统:

  • 网络防火墙 – 运行于第3–4层(IP,TCP/UDP). 它们可以屏蔽已知的恶意IP或限制端口,但检查的应用程序-%%layer数据很少.
  • Web应用防火墙(WAF)–Layle ⁇ 7设备,旨在检查HTTP/HTTPS流量,分析恶意模式的请求内容(标题,机身,URL参数). WAFs是针对XSS的主要防火墙工具.
  • 以云为基础的防火墙(包括WAF ⁇ as ⁇ a ⁇ 服务) — — 例子包括AWS WAF, Cloudflare WAF, 以及Azure应用网关。 它们提供可伸缩性、低潜度,并经常与CDN集成。

所有防火墙都运行在一套规则上,但只有应用程序的QQAWAF可以有意义地对抗XSS。 即使如此,恶魔也在规则设计和检测方法中。

防火墙如何探测和封存XSS

签字 ⁇ 基于检测

大多数WAFs飞船的预定义签名与已知XSS有效载荷匹配 — — 例如,像 , , 或编码变体等模式。防火墙会阻断任何有效载荷触发签名的请求。签名数据库由供应商定期更新,以覆盖新的攻击矢量。

然而,基于签名的检测可以通过简单的模糊来逃避:使用不同的编码,分割关键字,或者注入垃圾字符. 攻击者经常变换有效载荷,直到它不再匹配签名,而同时在浏览器中仍然可以运行.

异常检测和高血压检测

高级的WAFs使用机器学习或统计模型来检测异常模式。它们学习每个端点和旗子偏差的有效请求的典型结构 — — 例如,通常的数值参数突然包含HTML标记。 高压规则可以捕捉零\x天XSS矢量,而这种矢量缺乏已知的签名,但也有可能出现假阳性。

限制费率和行为分析

一些WAFs监视请求速度。 快速连续测试许多有效载荷的攻击者可能会被暂时封锁。 虽然这不会直接检测XSS, 但会减缓自动扫描, 并会迫使攻击者进行较慢的手工测试。

防火墙一级的具体保护机制

  • 输入验证和过滤 – WAF检查每个参数,饼干,和头。已知的危险字符()在到达应用程序服务器之前被编码或封存.
  • 输出编码意识 — 现代WAF可以关联到用户输入最终在响应中(例如脚本标记对HTML属性内)并应用上下文的QQ特定规则。这种智能水平是罕见的,但像F5和Imperva这样的主要销售商会提供它。
  • 虚拟补丁 – 当发现服务器%%side XSS 的弱点但无法立即固定时,一个WAF可以创建虚拟补丁:一个自定义规则,在不改变应用程序代码的情况下阻断开发路径.
  • Request Normalization – WAFs在检查签名前,经常解码多层编码(URL ⁇ encode,Unicode,双 ⁇ encode),挫败基本模糊.

防火墙对南苏丹的限制 -- -- 其失败之处

绕过世界武装部队

决定性攻击者经常设计绕道。

  • 使用经典 / ] 外的另类 JavaScript 事件集 — 例如, 与 。
  • 利用SVG,,,或其他可以执行脚本的HTML元素.
  • 探索字符集会错配WAF和浏览器(例如,UTF 7攻击历史上绕过ASCII Qlefters).
  • 突破多个请求参数或使用HTTP块状转移编码将内容偷运过检查引擎。

DOM 基座 XSS – 大部分防火墙都看不见

基于 DOM SSS 的 XSS 从未触及服务器。 弱势客户端 side JavaScript 读取来自 [[FLT: 10]] , [[FLT: 11]]] 的数据, 或本地存储并不安全地写入 DOM 。 一个服务器 side 防火墙只看到一个合法请求; 恶意执行完全发生在浏览器中。 防御需要客户端的安全措施, 如严格的内容安全政策和强大的客户端 sanitiation 库 。

加密流量挑战( HTTPS)

虽然现代的WAF可以解密TLS来检查平版,但这增加了延迟性,需要适当的证书管理. 一些较小的部署可能会跳过高流量端点的检查,留下盲点.

最佳做法:防火墙作为防层的一部分

仅仅依靠一个WAF是危险的。最有效的SS预防战略包括四条防线:

1. 安全开发与amp; 服务器'Side Sanitization

所有用户的QQ提供的数据在插入到 HTML 响应之前必须经过验证,消毒,或逃脱. OWASP 提供了 Java 编码器工程 和各种背景(HTML 机构,属性,URL,JavaScript,CSS)的输出编码指导. 没有任何防火墙可以固定应用程序层的薄弱的输入处理.

2. 内容安全政策

CSP是一个浏览器 QQ级别安全机制,它告诉浏览器允许哪些脚本来源以及是否允许内置脚本. 严格的CSP可以屏蔽除最持久DOMQXSS以外的所有内容. WAF可以通过注入或修改响应头来帮助执行CSP,但CSP本身是WAF无法替换的防御层.

3. 定期补丁和更新

防火墙规则基础必须随着新的 XSS 变体的出现而更新。 同样,服务器软件(web服务器,应用程序框架)也应该被补丁以消除 XSS 漏洞的根源。虚拟补丁会购买时间,但不能取代代码的修补。

4. 安全教育和测试

开发者和安全工程师应该了解XSS如何在WAF之外工作. 定期的渗透测试(包括人工测试)和代码审查将发现WAF错过的绕行模式. OWASP ZAP或Burp Suite等工具可以补充防火墙日志.

选择用于 XSS 保护的右防火墙

并非所有防火墙都是平等的。在选择 WAF 时,请考虑:

  • 检测精度[ — — 它是否同时使用签名和行为休眠? 它是否支持自动假阳性调制?
  • 虚拟补丁的简单 — 你能轻松添加自定义规则来阻断新发现的 CVE 吗?
  • 性能影响 – 一种WAF,它每次请求都加注>5 ms的耐久度,可能不适合高流量站点.
  • 管理 vs.self understand – 云WAFs(Cloudflare,AWS WAF)的运行管理费用往往较低,并且自动更新规则集. On'premise WAFs(F5,英普尔瓦)给予更多的颗粒控制,但需要专门的工程师.

真实的世界实例:2022年Twilio XSS事件

2022年,Twilio SendGrid电子邮件仪表板中存储的XSS弱点允许攻击者输入伪造登录提示,从内部用户那里窃取证书。 有效载荷被蒙蔽以逃避SendGrid的WAF签名。 违反规定表明,当攻击者定制有效载荷和WAF时,即使部署成熟的大型公司也可能被XSS击中。 后事故分析强调,需要结合CSP、强大的服务器Xeide逃生和WAF调试。

结论

防火墙 — — 特别是Web应用防火墙 — — 是防御-in-septect 脚本攻击的深入战略不可或缺的组成部分。 它们擅长自动过滤众所周知的XSS有效载荷,并为未标码提供快速的虚拟补丁。 然而,它们不是银弹。 攻击者继续寻找绕过基于签名的规则的创造性方法,基于DOM-s的XSS在很大程度上逃避了服务器的检查。 最有弹性的方法结合了一个配置良好的WAF,它有安全的编码做法,严格的内容安全政策,定期软件更新,以及连续的安全测试。 通过将防火墙视为一个强大的外层而不是唯一的防御,各组织可以大幅降低XSS损害其用户和数据的风险。