zl程序教程

您现在的位置是:首页 >  其它

当前栏目

XSS语义分析

分析 语义 XSS
2023-09-14 09:11:49 时间

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

长亭安全课堂 2017-11-01
 

长亭雷池(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小时保护企业安全。

 

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