XSS语义分析
对不起,现在才让你了解XSS语义分析!
长亭雷池(SafeLine)防护系统是新一代基于智能语义分析技术的WAF产品,其核心检测引擎包含多个语义分析子引擎,之前我们介绍SQL注入语义检测比较多,其实XSS 语义检测引擎也是其中非常重要的组成部分。
在目前市面可见的 WAF 系列产品中,长亭是唯一一家正式在WAF产品中使用语义分析方法来进行 XSS 检测的,下面我们就着重介绍一下XSS语义分析引擎的工作原理以及实测效果。
XSS攻击概况
XSS(Cross Site Scripting) 即跨站脚本执行,它指的是恶意攻击者向Web页面中插入恶意Javascript代码,当用户浏览该网页时,嵌入其中的Javascript代码会被执行,从而达到恶意攻击、盗取个人信息资料、拿下整个网站的管理权、控制企业数据等目的。
XSS检测及防御困难
XSS具备极大的编码灵活性。
相信很多人都已经了解到 jsfuck,它只用6个字符即可实现任何Javascript语义,即任意一段Javascript代码都可以转换成用 “[]()+!” 所写的“天书”。(如下图)
除此之外还有 aaencode 可以完全把 Javascript 编码成表情,这点真的让人感到十分无奈。因此,要想将 XSS 检测做好非!常!难!
Javascript 有很多不同的版本
不同的浏览器对于同一Javascript的解读都会存在或多或少的差异,导致Javascript形成不同的版本,而这种差异无疑加大了对于XSS检测的难度。
XSS自从2000年正式提出以来,已经有快 20 年的历史了。然而直到今天,前端技术已经迅猛发展、花样翻新,但是几乎所有大型互联网公司以及大流量网站,几乎都曾受到过XSS攻击,无一幸免,因为……
传统基于规则的防御太脆弱
目前传统的XSS检测方式是使用XSS Filter、输入过滤、输出编码、黑名单和白名单……
前面提到XSS编码具有灵活多变的特点,而传统检测防御方法都是基于规则的,无法覆盖所有的XSS语句,很容易造成误报和漏报。这又该如何是好?
XSS语义分析来了
长亭科技顶尖技术团队凭借多年的攻防研究和技术积累,研发出新一代智能Web应用防火墙——雷池(SafeLine),雷池(SafeLine)防护系统的智能威胁识别引擎,采用目前最先进的语义分析原理,不仅能够检测复杂的Web应用攻击,而且能够识别未知的安全威胁和攻击。
其中,长亭的技术人员在对海量数据的积累和分析的基础上,结合计算机编译原理与自动机技术,研究出了一种不基于规则的XSS检测与防御引擎。通过针对XSS的语义分析可以非常精准地检测到攻击行为,并进行有效拦截。
XSS 语义检测的原理是什么?
XSS 的本质脱离不了通过 HTML/Javascript 片断引入恶意代码这个基本行为。因此语义分析的对象就是 HTML/Js 代码(CSS在某种情况下也能引入Js,这里不做讨论)。
常见XSS代码注入示例:
/post_reply.html?content=%3CIMG+SRC%3D%2F+onerror%3D%E2%80%9Calert%28String.fromCharCode%2888%2C83%2C83%29%29%22%3E%3C%2Fimg%3E
与 SQL 注入检测的语义分析方法类似,XSS 语义检测同样是如下图四个步骤:
一
编码处理
主要作用是把代码外层包裹编码去除,暴露出攻击 payload,方便分析。
由此得到:
<IMG SRC=/ onerror=“alert(String.fromCharCode(88,83,83))"></img>
二
词法提取
这个步骤与 SQL 注入完全不同,要先分析提取 html,再处理 Javascript。
分析结果如下:
HTML结构分析:
Tag_name = IMG
Tag_value[src] = /
Tag_value[onerror] = “alert(String.fromCharCode(88,83,83))"
Javascript词法序列分析:
<bareword alert><left paren><bareword String><dot><bareword fromCharCode><left paren><number><comma><number><comma><number><right paren><right paren>
三
语法检测
html 的部分没有必要进行语法分析,语法分析只针对 Javascript。
大家都知道 Javascript 标准也已经有了很多版本,为了能够处理足够多的情形,我们直接支持到最新的 ECMAScript2017。
在以上词法分析的基础上,根据由Javascript语法规范定义出来的自动机可以检查语法结果,如下:
alert(String.fromCharCode(88,83,83)) 的 token 序列符合 ECMAScript2017 标准
四
语义判断
目标是在语法解析成功的基础上,判断其危害程度,最终根据危害程度,给出评级。
当然前面是最简单情形的分析,这里已经略过了 HTML Entity编码、空白字符绕过、半开闭处理问题、svg 特殊处理、HTML attribute parsing 等一堆头痛的问题,相信做过 XSS 检测的人都会感同身受。
实测效果
基于这样的原理,雷池(SafeLine)对于XSS的检测更加智能,方便使用,无需对规则进行维护,检测时间不再冗长,误报率、漏报率不再居高不下,能够有效拦截0day攻击。
以下为XSS语义分析引擎针对不同XSS语句进行检测的实际效果:
普通XSS:
文艺XSS:
二逼XSS:
CSS Expression:
混淆绕过:
注释绕过:
再来一波表情:
可以看到,无论XSS语句穿着怎样的外衣,被包裹得有多隐蔽,通过对语义的精准分析都可以判断出其具有攻击性。
杜绝误报:
有兴趣的同学可以把上面这两句话扔给传统的基于规则的防护WAF,看看会不会被误拦。
此外在我们已经部署的客户中,经常能发现直接传整段 HTML 的情况,很难说这里面有多少 XSS 会发生,而语义检测是在 XSS 发生前找到所有这些 HTML 传递情况,所以能在攻击发生之前就辨别出攻击行为,从而进行有效拦截。
长亭雷池(SafeLine)防护系统中的XSS注入检测模块能检测出分别存在于链接中、CSS中、事件中、特定属性内、特定标签内部、外部js导致、js的XSS攻击,还支持对包括但不限于IE、Chrome、Firefox、Safari在内的特定浏览器的绕过方式的检测。
欢迎大家直接到长亭线上 Demo 体验更多效果:
https://xsschop.chaitin.cn/demo/
Tips:亦可点击“阅读原文”进入
除XSSChop之外,雷池(SafeLine)防护系统的智能威胁识别引擎还包含SQLChop、PHPChop、JAVAChop等基于语法词法分析的无规则子引擎以及规则子引擎,不但能够检测复杂的Web应用攻击,更能够识别未知的安全威胁和攻击。
此外,雷池(SafeLine)集成了长亭云巡检系统,对系统内部的漏洞进行实时的检查。一旦在后续持续跟进监控中发现漏洞,长亭云将在第一时间将结果通过微信、邮件等多种方式发送给用户,7×24小时保护企业安全。
欢迎扫描二维码申请试用~