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服务渗透测试解决方案. ...
随机推荐
- 文件夹操作-DirectoryInfo类
DirectoryInfo类是一个密封类,它可以用来创建.移动.枚举目录和子目录.DirectoryInfo类包括4个属性,可以用来获取目录的名称.父目录等. DirectoryInfo类的属性表 属 ...
- 使用windos电脑模拟搭建web集群(一)
资源规划 1.环境准备 centos7.2 虚拟机 13个 可以先配置一台,做好基础优化,然后克隆13台分布在 windos宿主机上 两台windos笔记 都是8g的内存 一台有点内存吃紧. 没有物 ...
- Servlet4.0 注解不生效解决
当我们创建好一个4.0的servlet 生成的注解大概是这样 name=xxxxx 默认的是不具有效果的 你可以有两种方式 1.去掉属性name,3.0就是这样子的 2.非要有name属性 请加上u ...
- MVC中@Html.Action的用法(类似自定义控件)
MVC项目中如果有公共部分的代码就可以单独拿出来作为控件来用(比如头部和底部代码).跟ASP.NET中的ASCX实现的效果一样,但MVC比它方便的多. 一.@Html.Action的用法 @Html. ...
- Netty源码学习(三)NioEventLoop
0. NioEventLoop简介 NioEventLoop如同它的名字,它是一个无限循环(Loop),在循环中不断处理接收到的事件(Event) 在Reactor模型中,NioEventLoop就是 ...
- Python的并发并行[1] -> 线程[1] -> 多线程的建立与使用
多线程的建立与使用 目录 生成线程的三种方法 单线程与多线程对比 守护线程的设置 1 生成线程的三种方法 三种方式分别为: 创建一个Thread实例,传给它一个函数 创建一个Thread实例,传给它一 ...
- 大数据技术之_16_Scala学习_09_函数式编程-高级
第十三章 函数式编程-高级13.1 偏函数(partial function)13.1.1 提出一个需求,引出思考13.1.2 解决方式-filter + map 返回新的集合13.1.3 解决方式- ...
- JD2
Business Requirement Support l Develops and communicates plan to manage vendor review of requirement ...
- Delphi创建开机启动项的方法示例
Delphi可以通过创建开机启动项键值的方法,将程序添加到开机启动项中.通过本实例代码就可以为您的程序添加到快速启动中,随着Windows一起启动,开机即运行的程序.该实例代码简单,主要是通过添加注册 ...
- tiny4412 串口驱动分析三 --- log打印的几个阶段之内核自解压
作者:彭东林 邮箱:pengdonglin137@163.com 开发板:tiny4412ADK+S700 4GB Flash 主机:Wind7 64位 虚拟机:Vmware+Ubuntu12_04 ...