IBM Security AppScan Glass Box:一种全新的漏洞扫描思想
IBM Security AppScan Glass Box:一种全新的漏洞扫描思想
Glass Box 是 IBM Security AppScan Standard Edition(以下简称 AppScan)8.5 版本以后引进的一个新的组件,是对 AppScan 的一个比较大的改进。Glass Box 引进了运行时分析的技术,通过部署在服务器端的代理,在探索和测试阶段搜集 Web 应用程序信息,并进行分析,进而反馈给 AppScan,使 AppScan 更有针对性的进行探索和扫描,提高了扫描的精确性,并有利于发现更多的漏洞。
Glass Box 并不仅仅是 AppScan 的一个新的特性,而是代表了一种全新的思想,将动态分析技术与传统的 AppScan 黑盒测试技术结合起来,对 Web 应用程序进行代码级别的分析,给出更精确的分析结果,从而更有效的帮助客户保护好自己的网站。
前言
产品名称变更说明
AppScan 从 V8.6 版本开始由原来的 IBM Rational AppScan 改名为 IBM Security AppScan。
Glass Box 是 IBM Security AppScan Standard Edition(以下简称 AppScan)8.5 版本以后引进的一个新的组件,是对 AppScan 的一个比较大的改进。Glass Box 引进了运行时分析的技术,通过部署在服务器端的代理,在探索和测试阶段搜集 Web 应用程序信息,并进行分析,进而反馈给 AppScan,使 AppScan 更有针对性的进行探索和扫描,提高了扫描的精确性,并有利于发现更多的漏洞。Glass Box 并不仅仅是 AppScan 的一个新的特性,而是代表了一种全新的思想,将动态分析技术与传统的 AppScan 黑盒测试技术结合起来,对 web 应用程序进行代码级别的分析,给出更精确的分析结果,从而更有效的帮助客户保护好自己的网站。
本文首先简单介绍了 AppScan Glass Box 的技术架构,然后介绍了在 AppScan 8.5 中 Glass Box 在 Windows XP 下使用效果。Glass Box 支持 WebSphere、Tomcat、JBoss 等多种应用服务器,本文选择的 Web 服务器为大家常见的 Tomcat 7.0。
技术架构
Glass Box 可分为客户端和服务端。客户端又可分为 GlassAPI 和 Glass Box 引擎服务,GlassAPI 用于和服务器端通信,获取服务端返回的问题信息;Glass Box 引擎服务基于预定义的验证规则,对获取到的服务端进行分析,判断是否存在漏洞。服务端通过代理程序搜集服务器端信息,包括 Web 应用程序运行时信息(根据预定义的特征匹配规则)、源代码信息、配置文件信息、操作系统信息、数据库信息和 Web 服务器信息等,并将搜集到的信息返回给客户端。
图 1. Glass Box 技术架构图
配置及使用
打开扫描配置面板,可对 Glass Box 进行配置。点击 Glass Box 面板中的添加按钮,可添加 Glass Box 代理程序。
图 2. Glass Box 代理程序定义
代理程序的用户名和密码分别为安装 Glass Box 时设定的用户名和密码,如需要修改密码,可运行 AgentCredentials.bat <username> <password> ,或直接修改位于 GBootStrap\WEB-INF 目录下的 users.xml 文件,重启 Tomcat 后生效。用户可添加多个 Glass Box 代理程序,但 AppScan 同一时间只能使用其中的一个。添加代理程序成功后,可对 Glass Box 进行设置,选中"在探索阶段使用 glass box ",可发现更多的隐藏的 URL;选中"在测试阶段使用 glass box",可发现更多的漏洞和提供更详细的漏洞信息。配置成功后,AppScan 右下角状态栏将显示"Glass box 扫描:已启用"。
Glass Box 配置成功后,需要对 Web 应用程序重新扫描。需要注意的是,由于 Glass Box 对 URL 的解析问题,扫描本地网站需要配置虚拟域名,即起始 URL 不能是“http://localhost/myproject”, 而应该是“http://mysite/myproject”。Glass Box 目前仅支持 Java 项目。本文所选用扫描网站是 IBM AppScan 开发人员提供的 AltoroJ 项目。
通过对配置 Glass Box 前后的扫描结果进行分析,我们分析一下使用 Glass Box 的三个优势。为方便起见,本文采用默认的扫描配置(新建一个常规扫描,采用默认的扫描策略,对扫描配置的各项参数不做任何修改),并且没有对结果进行分析,排除误报的漏洞。每次扫描,结果可能会略有不同;若差别太大,则应该检查扫描配置信息,查看日志,找出问题所在。
1. 在探索阶段通过检测出代码中不可见的参数和 cookie 信息,探索隐藏的扫描路径,提高扫描覆盖率。
在应用程序中,有一些参数并未暴露给用户,即对用户是"不可见"的,传统的 AppScan 运行在客户端,并不能够检测到这些参数,更无法探索到相关的页面。 Glass Box 运行于探索阶段全过程,预定义一些"感兴趣"的方法(如 getParameter、Runtime.getRuntime().exec 等),并时刻检测这些方法是否运行,并进而探索出其中的参数,再根据这个参数构造扫描路径。
2. 在测试阶段,Glass Box 可增强 AppScan 在各种漏洞类型方面的检测。
Glass Box 通过搜集服务端信息,可减少误报率,增强 AppScan 对各种漏洞类型的检测,主要能够增强 AppScan 对注入攻击、不安全的直接对象引用、安全配置错误和不安全的加密存储等漏洞的检测。通过扫描 AltoroJ 项目可以发现,配置 Glass Box 前,共扫描出了 100 个漏洞;而配置 Glass Box 后,共扫描到了 139 个漏洞;Glass Box 增加了了大约 40% 的漏洞扫描发现数量。下表是按照 OWASP Top 10 漏洞分类方法,对使用 Glass Box 前后的扫描漏洞数量进行的对比。
表 1. 使用 Glass Box 前后发现的漏洞数量对比
漏洞类型 | 未使用 GB 发现漏洞数 | 使用 GB 发现漏洞数 |
---|---|---|
注入攻击 (A1) |
20 | 38 |
跨站点脚本攻击 (XSS) (A2) |
39 | 39 |
失效的身份认证和会话管理 (A3) |
62 | 62 |
不安全的直接对象引用 (A4) |
8 | 8 |
跨站点的请求伪造 (CSRF) (A5) |
62 | 62 |
安全配置错误 (A6) |
11 | 12 |
不安全的加密存储 (A7) |
13 | 14 |
不限制 URL 访问 (A8) |
17 | 18 |
传输层保护不足 (A9) |
6 | 6 |
未经验证的重定向和转发 (A10) |
- | - |
有时候,Web 开发人员会屏蔽错误信息,比如设置一个错误页面,发生异常时直接跳转到该页面,AppScan 无法直接从 response 信息中判断是否存在漏洞。Glass Box 通过预定义的方法,搜集服务器端的信息,从而判断是否存在漏洞。
通过扫描我们发现,未使用 Glass Box 前,AppScan 并未检测出用户登录页面的 SQL 注入漏洞(AppScan 可检测出各种类型的漏洞,未检测出该页面的 SQL 注入漏洞属于个别情况)。我们来分析一下原因。
AppScan 在测试阶段,向登陆页面发送请求,我们假定 AppScan 将 Username 和 Password 均设置为"'",服务器返回错误信息"Syntax error: Encountered "\'" at line 1, column 63. "。由于在 Response 中并未包含 SQL 异常信息,所以 AppScan 无法判断是否存在 SQL 注入漏洞。
图 3. 页面显示的错误信息
但是如果我们写一个测试代码,可得知当我们输入单引号时,服务器端确实报了 SQL 语法错误信息,如图 4 所示。Glass Box 安装在服务器端,当它发现请求值为 g'[number]b,且包含了单引号的信息请求时,如果出现 SQL 异常错误信息,那么 Glass Box 便判断出该页面存在 SQL 注入漏洞。
图 4.SQL 异常信息
3. 在生成报告阶段,可提供代码级的调试信息和修复建议
我们以 AltoroJ 项目的登陆页面为例,对比一下使用黑盒测试和使用 Glass Box 发现的漏洞的修复过程。AppScan 通过分别在 Username 和 Password 输入框中输入"4ppSc4n"和"A' OR '7659'='7659",发现了该页面存在 SQL 注入漏洞(AppScan 中称之为"SQL 注入的认证旁路")。我们根据"请求 / 响应"信息可以发现,该漏洞存在于 doLogin 这个 servlet 中,如图 5 所示。
图 5.AppScan “请求 / 响应”
我们根据 WEB-IBF/web.xml 中的信息进一步判断出漏洞存在于 LoginServlet.java 文件中。
清单 1.web.xml 文件中的 LoginServlet 配置
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/doLogin</url-pattern>
</servlet-mapping> <servlet>
<description>
</description>
<display-name>
LoginServlet</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>
com.ibm.rational.appscan.altoromutual.servlet.LoginServlet
</servlet-class>
</servlet>
打开 LoginServlet.java 文件,我们依然很难一眼就判断出漏洞的准确位置,需要对代码做进一步的分析。经过分析,找到存在漏洞的语句:
清单 2. LoginServlet.java 文件中存在漏洞的语句
if (!DBUtil.isValidUser(username, password))
然后,我们再找到 DBUtil 类中的 isValidUser 函数,最终找到了存在漏洞的 sql 语句:
清单 3. 存在漏洞的 SQL 语句
ResultSet resultSet = statement.executeQuery("SELECT COUNT(*)FROM PEOPLE WHERE USER_ID
= '"+ user +"' AND PASSWORD='" + password + "'");
/* BAD - user input should always be sanitized */
虽然有时候对于经验丰富的开发者来说,对于逻辑简单程序能够直接定位到某个 java 文件,省去一些步骤,但是大部分情况下,我们都需要一步步的去分析。而对于 Glass Box 发现的漏洞,则可以大大节省开发人员定位代码漏洞的时间。Glass Box 可报告出漏洞的具体位置信息,如方法名、类名、文件名和行号等信息;并可报告运行时信息。如图 6 所示。
图 6. Glass Box 问题信息
总结
黑盒测试技术由于无法获取应用程序的内部信息,导致扫描覆盖率偏低,且无法提供详细的调试信息;而白盒测试技术的代价过于高昂,需要大量的人工成本,且误报率较高。而 Glass Box 是有别于传统黑盒测试和白盒测试的一种混合测试技术,将有效解决这一难题,为客户创造更好的价值。
参考资料
学习
- 查看文章“Web 应用安全利器:IBM Security AppScan”,了解 IBM Security AppScan Standard 的基本使用方法。
- 查看文章“深入探析 IBM Security AppScan Standard Edition 新特性之 Glass Box 扫描”,了解 Glass Box 的安装和使用。
- 查看文章“Through the Looking-Glass”,更加深入的了解 Glass Box。
- 参考IBM Security AppScan 产品专题,查看 IBM Security AppScan 产品介绍及文档库。
- 参考OWASP 网站,了解 OWASP Top 10 项目。
- 访问 IBM developerWorks 中国网站 Rational 专区,获得关于 IBM Rational 软件交付平台(Rational Software Delivery Platform)产品的技术资源和最佳实践。
- 订阅 IBM developerWorks 时事通讯,一份关于 developerWorks 指南、文章、下载、社区活动、网络广播和技术讲座的电子周刊。
获得产品和技术
- 下载免费的 IBM Security AppScan Standard Edition(标准版)试用版。
- 获取免费的 Rational 软件工具包系列,了解最新的 IBM Rational 软件开发工具技术文档和资源。
- 下载更多免费的 IBM Rational 试用版软件,了解 IBM Rational 软件的最新特性。
- 获取更多 IBM 试用版软件,并熟练掌握来自 DB2®、Lotus®、Tivoli®,以及 WebSphere® 的开发工具和中间件产品,用这些试用版软件开发您的下一个项目。这些试用版软件可以免费直接从 developerWorks 下载。
IBM Security AppScan Glass Box:一种全新的漏洞扫描思想的更多相关文章
- IBM Security AppScan Standard使用方法
一.常规配置Appscan (安全自动化测试工具) Appscan是web应用程序渗透测试舞台上使用最广泛的工具之一.它是一个桌面应用程序,它有助于专业安全人员进行Web应用程序自动化脆弱性评估.本文 ...
- IBM Security AppScan Standard WEB扫描工具
IBM Security AppScan Standard是一款著名的web漏洞扫描工具, 可以设定登录账户,录制登录 扫描完成后可以生成报告,生成的报告非常详细
- IBM Security AppScan Standard 用外部设备录制脚本(手机端应用、app、微信等)进行安全测试
一.打开AppScan,选择外部设备/客户机,点击下一步 二.记录代理设置,可以手动输入需要的端口号,也可以自动选择,记住端口号以及PC电脑的ip地址,手机端如何设置对应的端口跟ip可以参考 Jmet ...
- IBM Security App Scan 资料整理
转自:http://blog.csdn.net/u013147600/article/details/50002089 这是学习和使用IBM AppScan过程中总结整理的一些资料. 扫描系统操作 ...
- 深入探析 Rational AppScan Standard Edition 新特性之 Glass Box 扫描
众所周知,Web 应用安全测试通常有黑盒安全测试和白盒安全测试两种方法.这两种方法孰优孰劣一直众议纷纷.广为公认的是,这两种测试方法有着良好地互补性,两种测试方法的结合是未来安全测试技术的发展趋势.G ...
- AppScan--图解Web扫描工具IBM Security App Scan Standard
App Scan用法: 首先打开IBM Security AppScan Standard 工具 点击 创建新的扫描 -> 点击”常规扫描“ ->之后你就会看到如下图: ...
- 安装Glass Box代理程序
安装玻璃盒代理程序 目前版本的玻璃代理程序主要支持主流 Java EE 应用程序服务器(如 JBoss,Tomcat,WebLogic 和 WebSphere).玻璃盒代理程序可以自动化安装,但考虑到 ...
- IBM Rational AppScan使用详细说明
转自:http://www.nxadmin.com/tools/675.html 本文将详细介绍Appscan功能选项设置的细节,适合E文一般,初次接触Appscan的童鞋参考阅读. Appscan是 ...
- Web漏洞扫描-AppScan
Web漏洞扫描-AppScan 一.AppScan简述 二.功能及特点 一.AppScan简述 IBM Security AppScan是一个适合安全专家的Web应用程序和Web服务渗透测试解决方案. ...
随机推荐
- js继承的实现
js继承有5种实现方式: 1.继承第一种方式:对象冒充 function Parent(username){ this.username = username; this.hell ...
- delphi 开机自动运行代码
unit Unit1;//download by http://www.codefans.netinterface uses Windows,Registry, Messages, SysUtils ...
- Flask插件系列之flask_celery
现在继续学习在集成的框架中如何使用celery. 在Flask中使用celery 在Flask中集成celery需要做到两点: 创建celery的实例对象的名字必须是flask应用程序app的名字,否 ...
- laravel 安装碰到的问题:全局安装 Laravel Installer,然后用下面的指令创建新项目: laravel new blog报连接超时解决方案
在执行laravel new project 的时候报错 cURL error 7: Failed to connect to cabinet.laravel.com port 80: Timed o ...
- (5)C#运算符
运算符 参照javase (7)java基础知识-原码.反码.补码.运算符
- NYOJ16 矩形嵌套 【DAG上的DP/LIS】
矩形嵌套 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c ...
- (转)NSArray类的使用
NSArray的基本应用总结 NSString *string1 = @"two"; NSString *string2 = @"one"; //创建数组 NS ...
- CodeForces - 985F Isomorphic Strings
假如两个区间的26的字母出现的位置集合分别是 A1,B1,A2,B2,....., 我们再能找到一个排列p[] 使得 A[i] = B[p[i]] ,那么就可以成功映射了. 显然集合可以直接hash, ...
- 动态规划 001 - 编辑距离(Levenshtein Distance)问题
问题 字符串的编辑距离也被称为距Levenshtein距离(Levenshtein Distance),属于经典算法,常用方法使用递归,更好的方法是使用动态规划算法,以避免出现重叠子问题的反复计算,减 ...
- zend studio9.0.3破解及汉化 windons版
注册码: 34E606CF10C3E4CF202ABCEAA9B0B7A64DD2C5862A514B944AAAB38E3EB8A5F2CD735A2AB4CF9B952590EFA62BA0AB2 ...