对不起,现在才让你了解XSS语义分析!

Posted 长亭安全课堂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对不起,现在才让你了解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 检测做好非!常!难!

 

对不起,现在才让你了解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 语义检测同样是如下图四个步骤:

 

对不起,现在才让你了解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))"


对不起,现在才让你了解XSS语义分析!


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:

对不起,现在才让你了解XSS语义分析!


二逼XSS:

对不起,现在才让你了解XSS语义分析!


CSS Expression:

对不起,现在才让你了解XSS语义分析!


混淆绕过:

对不起,现在才让你了解XSS语义分析!


注释绕过:

对不起,现在才让你了解XSS语义分析!


再来一波表情:

对不起,现在才让你了解XSS语义分析!


可以看到,无论XSS语句穿着怎样的外衣,被包裹得有多隐蔽,通过对语义的精准分析都可以判断出其具有攻击性。


杜绝误报:

对不起,现在才让你了解XSS语义分析!

对不起,现在才让你了解XSS语义分析!


对不起,现在才让你了解XSS语义分析! 有兴趣的同学可以把上面这两句话扔给传统的基于规则的防护WAF,看看会不会被误拦。对不起,现在才让你了解XSS语义分析!



此外在我们已经部署的客户中,经常能发现直接传整段 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小时保护企业安全。

 

欢迎扫描二维码申请试用~


以上是关于对不起,现在才让你了解XSS语义分析!的主要内容,如果未能解决你的问题,请参考以下文章

六万字长文!让你懂透编译原理——第七章 语义分析和中间代码产生

潜在语义分析概念

HTML5 语义化-详细分析

语法分析和语义分析

语法分析和语义分析

大数据语义分析开启“智能预测客户”时代