手机版

JavaScript常见安全漏洞及自动检测技术

时间:2021-09-08 来源:互联网 编辑:宝哥软件园 浏览:

随着Web2.0的发展和Ajax框架的普及,富互联网应用程序(RIAs)不断增加,越来越多的逻辑从服务器转移到客户端,通常是用JavaScript语言编写的。遗憾的是,目前开发人员普遍很少关注JavaScript代码的安全性。根据IBM X-Force 2011年中期趋势报告,全球500强网站和常见知名网站中,有40%存在JavaScript安全漏洞。在本文中,我们将结合代码向读者展示常见的JavaScript安全漏洞,旨在帮助读者在日常编码工作中避免这些安全漏洞。此外,客户端JavaScript安全漏洞的原理与服务器端略有不同,自动检测JavaScript安全漏洞存在较大的技术难度。本文将与读者分享如何利用IBM Rational AppScan标准版V8.0 (JSA)技术自动检测JavaScript安全漏洞。

JavaScript的常见安全漏洞

2010年12月,IBM发布了一份关于Web应用中客户端JavaScript安全漏洞的白皮书,其中介绍了IBM安全研究院进行的JavaScript安全调查。样本数据包括675个网站,包括财富500强公司的网站和另外175个著名网站,包括IT公司、Web应用安全服务公司和社交网站。为了不影响这些网站的正常运行,研究人员使用了无创爬虫,只扫描一些无需登录即可访问的页面,每个网站的页面不超过200页。这些页面被保留下来,研究人员利用IBM的JavaScript安全分析技术对这些页面进行了离线分析,重点是基于DOM的跨站点脚本和重定向。

测试结果令人惊叹。在这些知名网站中,有14%存在严重的JavaScript安全问题。黑客可以利用这些漏洞植入流氓软件、植入钓鱼网站和劫持用户会话。更神奇的是,随着IBM JavaScript安全分析技术的成熟发展,2011年年中的X-Force报告显示,IBM对这些知名网站进行了重新测试,发现了更多的安全漏洞,约40%的网站存在JavaScript安全漏洞。

Java企业通用权限安全框架源代码Spring MVC MyBatis或Hibernate Ehcache Shiro Druid Bootstrap HTML 5

下面的文章将结合代码向读者展示这些常见的JavaScript安全漏洞,让读者在实际编码过程中注意到这些安全问题,尽早规避这些风险。

基于DOM的跨站点脚本

我们都听说过XSS (cross site scripting,也称为跨站点脚本攻击),它是指攻击者将恶意脚本代码(通常是HTML代码和JavaScript代码)插入到合法的Web页面中,然后向服务器提交请求,然后在服务器响应页面中植入攻击者的恶意脚本代码,攻击者可以利用这些代码进行会话劫持等攻击。跨站点脚本通常分为反射式和持久性:当请求数据在服务器响应页面中出现未编码和未过滤时,就是反射式跨站点脚本;持久化是指将包含恶意代码的请求数据保存在Web应用的服务器上,每次用户访问页面时都会自动执行恶意代码。这种攻击对于Web2.0类型的社交网站尤其常见,威胁更大。处理跨站点脚本主要有两种方法:一是不要相信用户的任何输入,尽量使用白名单技术验证输入参数;二是输出时对用户提供的内容进行转义。

但鲜为人知的是,还有第三个跨站点脚本漏洞。2005年,Amit Klein发布了白皮书《基于 DOM 的跨站点脚本编制—第三类跨站点脚本编制形式》(“基于DOM的跨站点脚本或第三类XSS”),该白皮书揭示了基于DOM的跨站点脚本不需要依赖服务器端响应。如果一些HTML页面使用了DOM元素的属性,比如document.location,document。URL或document.referer,攻击者可以利用这些属性植入恶意脚本,实现基于DOM的跨站点脚本攻击。

接下来,我们将通过一个简单的HTML页面演示基于DOM的跨站点脚本的原理。假设有这样一个静态的HTML页面(如清单1所示),用来显示欢迎用户成功登录的消息。

清单1。基于DOM的XSS的HTML代码已经存在

html title欢迎!/title hiscript var pos=文档。URL . indexof(' name=')5;document.write(文档。URL.substring(pos,document。URL . length));/scriptbr欢迎来到我们的系统…/html根据这个页面的JavaScript代码逻辑,它将接受URL中传递的name参数并显示欢迎消息,如清单2所示:

清单2。正常情况下访问网址

http://www.vulnerable.site/welcome.html?名字=杰里米

但是,如果恶意攻击者输入类似于下面的脚本,如清单3所示,页面将执行注入的JavaScript脚本。

清单3。访问网址中的注入脚本

http://www.vulnerable.site/welcome.html?name=script alert(document . cookie)/脚本

显然,当受害者的浏览器访问上面的URL时,服务器会正常返回清单1所示的HTML页面,然后浏览器会继续将这个HTML解析成DOM。DOM中包含的文档对象的URL属性将包含清单3中注入的脚本内容。浏览器解析JavaScript时,会执行注入的脚本,成功实现跨站点脚本攻击。

值得注意的是,从上面的例子可以看出,不需要在服务器的响应中嵌入恶意代码,基于DOM的跨站点脚本攻击就可以成功。有读者可能会认为主流浏览器会自动对URL中的“”和“”符号进行转义,转义后的注入脚本不会被执行,基于DOM的跨站点脚本编写不再是威胁。这句话前半句是对的,后半句不准确。我们应该意识到,攻击者可以轻松绕过浏览器对URL的转义,例如,攻击者可以用锚点“#”欺骗浏览器,如清单4所示。浏览器会认为' # '后面是片段信息,不会做任何处理。

清单4。在访问网址中组合锚点的注入脚本

http://www.vulnerable.site/welcome.html#?name=script alert(document . cookie)/脚本

通过网址重定向钓鱼

网络钓鱼是一个通用术语,它意味着试图欺骗用户交出私人信息,以电子方式欺骗他们的身份。通过网址重定向进行网络钓鱼是指网页使用HTTP参数保存网址值,网页脚本将请求重定向到保存的网址。攻击者可以更改HTTP参数中的URL值以指向恶意站点,从而使网络钓鱼能够欺骗当前用户并成功窃取用户凭据。清单5显示了一个通过URL重定向包含网络钓鱼漏洞的常见代码片段。

清单5。执行重定向的JavaScript代码片段

SCRIPT…var SData=document . location . search . substring(1);var SPos=SData . indexof(' URL=')4;var ePos=sData.indexOf(',sPos);var newURLif(ePos 0){ new URl=SData . substring(SPos);} else { new URl=SData . substring(sPos,ePos);} window . location . href=NewURl;…/SCRIPT

可以看到这些JavaScript脚本负责重定向,新地址是从document.location、document等DOM元素的属性值中截取的。用户输入如清单6所示。

清单6。重定向的网址

http://www.vulnerable.site/redirect.html?url=http://www.phishing.site

显然,一旦用户执行了清单6所示的网址,他们将被重定向到钓鱼网站。该漏洞的原理非常简单,比服务器端重定向漏洞更好理解。但是,在通过URL重定向进行钓鱼的情况下,钓鱼网站的网址不会被服务器拦截和过滤。因此,此漏洞通常比服务器端重定向漏洞更隐蔽。

客户端JavaScript Cookie引用

Cookie通常由网络服务器创建并存储在客户端浏览器中,用于在客户端保存用户的身份、会话信息甚至授权信息。客户端JavaScript代码可以操作Cookie数据。如果客户端使用JavaScript在网站上创建或修改cookie,攻击者可以查看代码,通过阅读理解其逻辑,甚至可以根据自己的知识使用它修改cookie。一旦cookie包含权限信息等重要信息,攻击者就很容易利用这些漏洞进行权限提升和其他攻击。

JavaScript劫持

很多Web应用使用JSON作为Ajax的数据传输机制,通常容易受到JavaScript劫持攻击,但传统Web应用并不容易受到攻击。JSON实际上是一段JavaScript,通常是数组格式。攻击者通过其恶意站点页面中的SCRIPT标签调用被攻击站点的一个JSON动态数据接口,并通过JavaScript Function Hook等技术获取这些JSON数据。如果用户登录到被攻击网站(假设他的身份认证信息是基于Session Cookie保存的),被攻击者引诱访问恶意网站页面,恶意网站会向被攻击网站发送JSON数据获取请求,因为标签为SCRIPT src='http: '的请求会带来Cookie信息,被攻击网站服务器会认为当前请求合法,将相关JSON数据返回给恶意网站的当前用户,导致用户数据泄露。整个过程相当于一次异地跨站请求伪造CSRF攻击。

随着Ajax的进一步推广和HTML5的逐步应用,客户端出现了更多的安全漏洞。目前对于JavaScript的安全性研究不多,新推出的HTML5客户端存储、跨域通信等新特性也与安全性息息相关,感兴趣的读者可以进一步阅读。鉴于笔者知识有限,暂时就分享这么多与JavaScript相关的安全漏洞,下面就来讨论一下JavaScript安全漏洞的检测技术。

JavaScript安全漏洞的自动检测

众所周知,检测代码安全漏洞一般有白盒检查和黑盒检查。白盒检查侧重于代码分析,这可以通过手动代码审查或自动代码分析工具来完成。黑盒检测主要模拟黑客攻击进行渗透测试。一般来说,黑盒检测的准确率较高,但代码覆盖率较小,而白盒检测的代码覆盖率较高,但误报率较高。两种方法的结合可以弥补彼此的不足,混合检验法将是未来的趋势。

结合JavaScript代码,出于跨浏览器兼容性和更好的Ajax特性的考虑,越来越多的Web应用依赖于第三方JavaScript代码库,比如Dojo和JQuery。为了减小文件大小,这些代码库经常被压缩,导致可读性差,所以手动审查代码几乎是不可能的。另外,页面上有很多JavaScript调用条目,手动测试非常困难。因此,我们需要建议使用自动化测试工具来检测JavaScript安全漏洞。

理性应用简介——扫描JSA原理

JSA是Rational AppScan Standard V8.0的新AppScan扩展,用于执行静态JavaScript分析,以检测常见的客户端安全漏洞。JSA结合了JavaScript静态污点分析技术和网站动态爬虫技术。简而言之,AppScan会保存爬虫探索的所有URL的完整HTTP响应,然后JSA会逐一分析这些响应页面的JavaScript代码。JSA在分析每个页面时应用了两个阶段:数据流分析和字符串分析。首先,JSA寻找从源头到下沉的轨道,它没有通过清理器。如果可以找到这个Trace,JSA将在第二步中使用字符串分析——字符串前缀分析(SPA)的变体进行验证。与JavaScript代码的纯静态分析技术相比,JSA技术更先进、更准确,因为它分析的是完全解析的HTML页面和DOM环境中的安全漏洞。

如今,在Web2.0网站和Ajax应用中,HTML页面往往需要由浏览器基于服务器响应中的HTML和JavaScript代码进行动态解析,才能形成完整的HTML和DOM。服务器响应中单纯基于JavaScript代码的静态污点分析存在一个明显的缺陷——测试的JavaScript代码和执行环境不一定完整,无法保证测试的准确性和全面性。JSA克服了上述缺点,结合了白盒检测和黑盒检测的优点,并引入了IBM的字符串分析技术,因此JSA具有更好的准确性和全面性。

使用应用扫描检测JavaScript安全漏洞

Altoro Mutual是一个由IBM提供的Web安全漏洞演示网站。在下面,作者将向读者展示如何使用AppScan JSA来检测该网站中的JavaScript安全漏洞。

启动AppScan,点击菜单‘扫描扫描配置’打开扫描配置对话框,将起始网址设置为‘http://demo . testfire . net’。

图1。设置起始网址

在扫描配置对话框的左侧,单击“登录管理”,然后单击“记录.”按钮右侧按钮记录登录过程,从而确保检测在会话中处于活动状态。

图2。设置登录方法

在“扫描配置”对话框左侧,单击“测试策略”检查测试策略设置。默认的测试策略应该是“默认”,它已经包含了常见的JavaScript测试。您可以单击“启用/禁用”来查看当前默认启用的测试策略。

图3。检查测试策略

关闭扫描配置对话框,单击菜单“扫描-仅浏览”或单击快捷按钮(如图4所示)开始浏览。本文只举例说明了如何检测JavaScript安全漏洞,所以我们选择‘只探索’客户端JavaScript分析测试方法。

图4。启动发现

单击菜单“工具-扩展-JavaScript安全分析器”或快捷按钮(如图5所示)打开“分析JavaScript”。在弹出的JavaScript安全分析器对话框中,单击“立即分析”。

图5。解析JavaScript

完成JavaScript安全分析器扫描后,结果列表中将列出发现的客户端JavaScript安全漏洞。如下图所示,Altoro Mutual网站存在“基于DOM的跨站点脚本”和“开放重定向”漏洞,这些漏洞的详细信息将在下面显示。

图6。查看扫描结果

在结果列表中展开“基于DOM的跨站点脚本”,点击第一个‘JavaScript’问题,其详细信息将显示在下面的问题信息中。我们可以看到AppScan保存了JavaScript问题代码的分析结果,并用黄色标识定位了Source和Sink,有利于开发者快速修复这个漏洞。

图7。基于DOM的跨站点脚本问题信息

同样,展开并查看“打开重定向”问题,并在问题信息栏中显示此漏洞的代码分析结果。

图8。打开重定向问题信息

注意:

为了快速展示如何检测JavaScript安全漏洞,本文选择了“只探索”客户端JavaScript分析的测试方法。在实际工作中,建议您只需要照常扫描(即手动浏览和自动浏览站点,然后执行测试),默认情况下,AppScan会在测试过程中自动执行JavaScript Security Analyzer。

Rational AppScan Standard可以检测已知的常见JavaScript安全漏洞,但是Altoro Mutual只展示了基于DOM的跨站点脚本和重定向漏洞,所以这个案例的结果列表只包含了以上两个安全漏洞。

结论

Java企业通用权限安全框架源代码Spring MVC MyBatis或Hibernate Ehcache Shiro Druid Bootstrap HTML 5

介绍了JavaScript常见的安全漏洞,分析了手工检测JavaScript代码的技术难点。IBM Rational AppScan V8.x新引入了JSA扩展组件,这是业界第一个提供客户端JavaScript安全检测方案的组件。在本文中,我们与读者分享了JSA的基本原理和技术优势,并演示了如何使用IBM Rational AppScan JSA测试客户端JavaScript安全性。

本文的写作存在问题和局限。欢迎大家批评学习,共同进步。

版权声明:JavaScript常见安全漏洞及自动检测技术是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

相关文章推荐