结合 JavaScript 代码而言,出于跨浏览器兼容、更好的 Ajax 特性需求等原因,越来越多的 Web 应用依赖于第三方的 JavaScript 代码库,譬如 Dojo、JQuery 等。这些代码库为了降低文件大小,往往都进行了代码压缩,导致其可读性极差,因此手工代码审查几乎不具备可行性。此外,页面 JavaScript 调用入口很多,手工对其进行渗透测试的工作量和难度都非常大。因此,我们需要推荐使用自动化测试工具来检测 JavaScript 安全漏洞。
Rational AppScan JSA 原理简述
JSA 是 Rational AppScan Standard V8.0 新推出的一项 AppScan 扩展,用来进行执行静态 JavaScript 分析,以检测常见客户端安全漏洞。JSA 融合了 JavaScript 静态污点分析技术和网站动态爬虫技术。简而言之,AppScan 会保存爬虫所探索到的所有 URL 的完整的 HTTP 响应,然后 JSA 对这些响应页面逐个进行 JavaScript 代码分析。JSA 在分析每个页面时应用两个阶段:数据流分析和字符串分析。首先,JSA 查找从源(Source)到接收器(Sink)中未经过清除工具(Sanitizer)的轨迹。如果可找到此轨迹(Trace),那么 JSA 将在第二步中使用字符串分析的变体——字符串前缀分析(SPA)进行验证。相比于单纯的 JavaScript 代码静态分析技术而言,JSA 技术更为先进和准确,因为它是在完全解析好的 HTML 页面及 DOM 环境中进行安全漏洞分析。
如今 Web2.0 网站及 Ajax 应用中,HTML 页面往往都需要浏览器基于服务器响应里的 HTML 和 JavaScript 代码进行动态解析后才形成完整的 HTML 和 DOM,单纯基于服务器响应中的 JavaScript 代码进行静态污点分析存在一个明显缺陷 -- 其所测 JavaScript 代码及执行环境不一定完整,因此它无法保证测试的准确度和全面性。JSA 正是克服了以上缺点,融合了白盒检测和黑盒检测两种测试方法的优点,并引入 IBM 的字符串分析技术,所以 JSA 有着更好的准确性和全面性。
利用 AppScan 检测 JavaScript 安全漏洞
Altoro Mutual 是 IBM 所提供的 Web 安全漏洞演示网站,下文笔者将向读者展示如何利用 AppScan JSA 来检测该网站所存在的 JavaScript 安全漏洞。
启动 AppScan,点击菜单"扫描– 扫描配置"打开扫描配置对话框,设置起始 URL 为""。
图 1. 设置起始 URL
在扫描配置对话框左侧,点击"登录管理",然后点击右侧的"记录 ..."按钮录制登录过程,确保会话中检测处于活动状态。
图 2. 设置登录方法
在扫描配置对话框左侧,点击"测试策略",检查测试策略设置。默认测试策略应该是"缺省",其已经包含了常见 JavaScript 测试,可以点击"已启用 / 已禁止"查看当前默认启用的测试策略。
图 3. 检查测试策略
关闭扫描配置对话框,点击菜单"扫描 -- 仅探索"或单击快捷按钮(如图 4 所示)启动探索。本文仅示例如何检测 JavaScript 安全漏洞,所以选择"仅探索"+ 客户端 JavaScript 分析的测试方式。
图 4. 启动探索
点击菜单"工具– 扩展名– JavaScript Security Analyzer"或者快捷按钮(如图 5 所示)打开"分析 JavaScript"。在弹出的 JavaScript Security Analyzer 对话框中,单击"立即分析"。
图 5. 分析 JavaScript