下载:IBM® Rational® AppScan 标准版 | Web 应用安全与 IBM Rational AppScan 工具包
获取免费的 Rational 软件工具包系列,下载更多的 Rational 软件试用版。
一. 前言
随着信息技术的高速发展,特别是 Internet 技术的飞速发展,越来越来和企业商业行为以及和我们日常生活工作相关的应用服务都需要依赖 Internet 这个信息平台来开展业务。我们在享受方便、快捷的信息化服务的同时,也面临着信息安全问题给我们带来的影响甚至伤害。由于网络技术日趋成熟,黑客们也将注意力从以往对网络服务器的攻击逐步转移到了对 Web 应用的攻击上。这些年来,每次对于应用安全的攻击,都将成为大事情,并对当事企业和个人带来很大的危害。应用安全目前已经成为继系统功能验证以及系统压力测试之后,逐渐被大家认识的系统质量和安全方面的第三大问题。由于应用安全问题的技术性和复杂性,包括我们目前的技术人员,甚至包括安全技术人员,在应用安全领域都有技术缺失,因此,目前采用 Web 应用安全自动化检测工具,就成为解决应用安全问题的一个重要手段和技术方法。IBM Rational 的应用安全测试工具 Rational AppScan,就是被大家熟知的业界领先的应用安全检测工具。
到目前为止,Rational AppScan 在国内以及在全球的各行各业,已经具有众多的用户。在这些用户当中,虽然决大多数的用户直接使用 Rational AppScan 现有的功能,就已经能够完全满足他们的需求。但是,也有部分用户根据自己的特殊需求,需要去扩展 AppScan 的现有功能,包括将 Rational AppScan 和企业的其他安全管理系统进行集成,甚至是 OEM AppScan 的核心功能。本文就主要介绍 Rational AppScan 标准版的可扩展性和二次开发能力。
二.Rational AppScan 标准版简介
IBM Rational AppScan 是对 Web 应用和 Web Services 进行自动化安全扫描的检测工具,它不但可以简化企业发现和修复 Web 应用安全隐患的过程(因为这些工作,以往都是由人工进行,成本相对较高,但是效率却非常低下),还可以根据发现的安全隐患,提出有针对性的修复建议,并能形成多种符合法规、行业标准的报告,方便相关人员全面了解企业应用的安全状况。
IBM Rational AppScan 标准版是 Rational AppScan 产品家族的重要成员,是自动化 Web 应用安全性测试的桌面解决方案,一种自动化 Web 应用安全性测试引擎,能够连续、自动地审 Web 应用程序、测试安全性问题,并生成包含修订建议的问题和修复任务报告,简化修复过程。
IBM Rational AppScan 标准版提供:
- 核心漏洞支持:包含 WASC 隐患分类中已识别的漏洞,如 SQL 注入、跨站脚本攻击和缓冲区溢出等;
- 广泛的应用程序覆盖:包含集成 Web 服务扫描和 JavaScript 执行(包括 Ajax)与解析;
- 自定义和可扩展功能:全面的 AppScan SDK 支持,以及方便灵活的 AppScan eXtension Framework 装载和运行用户社区共享的开源插件;
- 高级修复建议:展示全面的任务清单,用于修复扫描过程中发现的问题;
- 面向渗透测试人员的自动化功能:高级测试实用工具和 Pyscan 框架作为手动测试的补充,提供更强大的能力和更高的效率;
- 法规遵从性报告:40 种开箱即用的遵从性报告,包括 PCI Data Security Standard、ISO 17799 和 ISO 27001 以及 Basel II 等。
三.Rational AppScan 标准版的可扩展性介绍
众所周知,应用安全检测工具的核心能力是应用安全规则库。IBM Rational AppScan 具有业界最全面、最准确、和更新速度最快的规则库,这些符合行业标准的规则库,是 IBM 众多应用安全专家的劳动成果的结晶,同时也展现了 IBM 在应用安全领域毋庸置疑的专家和领导地位。应用安全规则库就是安全领域的知识库,而应用安全检测工具就是通过引用和分析知识库,依据规则库的应用安全规则,来生成测试用例和测试数据。检测工具通过在 HTTP 请求中插入测试用例的办法,模拟攻击来检测和分析应用的安全问题,并生成问题报告和提出修复建议。
根据以上对于应用安全检测工具原理和背景的介绍,大家可以了解到一款优秀的应用安全检测工具就应该围绕着应用安全规则库来进行设计和部署。AppScan 标准版虽然只是个桌面级的应用程序,但却具有着多层、松耦合的经典应用程序逻辑架构。下面我们就详细的介绍 AppScan 标准版的逻辑架构,而这个经典的逻辑架构,也赋予了 AppScan 标准版强大的可扩展性和二次开发能力。
1. AppScan 标准版的逻辑架构
图 1. Rational AppScan 标准版逻辑架构
首先,AppScan 标准版的最底层也是最核心的部件是 AppScan 分析引擎。可以说,AppScan 分析引擎是 AppScan 的心脏,在分析引擎内,包括用于安全扫描和检测的模块、用于生成问题报告的信息、用于保存和装载扫描的机制,以及其他很多的核心组成部分。
在核心引擎之外,或者说包裹着 AppScan 引擎的是 AppScan SDK,AppScan SDK 是一套完整的、具有良好定义的应用程序编程接口,用于外部世界和 AppScan 引擎的通讯和交流。AppScan SDK 非常完整,他覆盖了 AppScan 引擎提供的所有功能,包括:开始扫描的动作、重新发起一个独立的安全扫描、生成一个基于 PDF 格式的报告、或者修改检测的规则。同时,AppScan SDK 能够提供对于扫描过程中所产生信息的完整访问机制,比如:已发现的 HTML 的注解、得到“Page not found”的相应的链接、当然还包括安全问题以及相关的修复任务。同时,如果 AppScan 引擎推出新的版本,AppScan 应用程序编程接口(SDK)也会同时增强以提供访问新的功能,而与此同时,AppScan SDK 还支持向下兼容,以支持老版本的 AppScan 分析引擎。
在 AppScan SDK 之上,是 AppScan 图形用户客户端(GUI),而图形用户客户端也是我们使用 AppScan 的最常用的方法。事实上,AppScan GUI 几乎完全用于展现和交互,它通过 AppScan SDK 来获取数据和传递操作指南。尽管 AppScan GUI 是使用 AppScan 的最主要同时也是最常用的使用途径,但是 AppScan 还包括几种其他的使用界面。这里面就包括 AppScan 调度程序,AppScan 调度程序是用来指定和安排在特定的时间来运行扫描的组件,以及 AppScan 命令行接口。以上的两种使用界面提供了不同的访问 AppScan SDK 的途径,并最终访问 AppScan 分析引擎的核心功能。
由于 AppScan SDK 应用程序编程接口都是公开的,并且具有完整的 AppScan SDK 文档,因此第三方的应用程序也可以很容易的使用 SDK,从而按照他们的途径来访问和调用 AppScan 的方法和功能。举个例子,当您在执行回归测试的时候,可以通过自动化的测试脚本来调度 AppScan 安全扫描,从而实现一键式的自动化测试平台。
2. AppScan 应用程序编程接口
接下来,我们来详细的了解一下 AppScan SDK 应用程序编程接口。AppScan 应用程序编程接口是采用 Microsoft® .NET 2.0 技术实现的,这就意味着 AppScan SDK 的使用可以通过 .NET 编程语言来实现,包括:C#、VB.NET、JS.NET、IronPython,以及其他编程语言。
正如之前我们所提到的,AppScan SDK 是非常全面的,通过它允许我们访问 AppScan 引擎提供的任何数据和功能。因为 AppScan 图形化用户界面也是完全通过 SDK 来和 AppScan 分析引擎交互的,所以我们可以说,通过 AppScan 图形化用户界面可以做到的事情,直接通过 AppScan SDK 完全可以做到。AppScan SDK 应用程序编程接口包括了访问分析引擎各种功能的同步和异步的方法,以及大量的事件用于外部的监听,从而实现基于事件驱动的方法调用。这些事件包括从完成一个扫描、发现一个单一的问题变种以及重启之前保存的扫描的各种事件信息。
最后需要指出的是,AppScan SDK 应用程序编程接口具有良好的、完整的 SDK 文档,而且 SDK 达到了很好的颗粒度水平。AppScan SDK 文档是以 CHM(Compiled Microsoft® HTML Help)的文件格式发布的,在 AppScan 标准版的安装目录下就可以找到。同时,在 AXF(AppScan eXtensions Framework)门户站点,也可以找到 AppScan SDK 文档的最新版本。关于 AXF 门户网站,我们会在接下来的内容里介绍。关于 AppScan SDK 的详细说明,请参考 AppScan SDK 文档。
四.如何针对 AppScan 进行二次开发
通过上面的介绍,我们可以看到 AppScan 具有设计良好的逻辑架构以及全面的、强大的应用程序编程接口。这就使得 AppScan 标准版具有强大的可扩展性。对于 AppScan 的可扩展性我们也可以从几个角度和层面来做介绍。事实上,由于客户的使用需求不同,所以对于 AppScan 的二次开发的要求也是不尽相同的。大体来说,AppScan 标准版的二次开发主要有三种方式:
1.开发自己的安全检测工具
从 AppScan 标准版的介绍我们可以得知,事实上,AppScan 标准版是一个桌面级别的应用程序。AppScan 的核心是分析引擎,而 AppScan 标准版的所有功能也都是通过调用 AppScan 应用程序编程接口得到的,因此,我们可以认为,AppScan 标准版本身就是一个单一的图形化用户界面。
明确了上面的事实,我们会发现如果用户想利用 IBM Rational 关于应用安全方面的核心技术,来研发出自己的一套应用安全测试方案(或者确切的说是一款应用安全检测工具),是完全有可能。而且,事实上目前已经有用户和第三方的机构,在和 IBM 合作,通过使用 IBM 应用安全规则库,特别是 AppScan 分析引擎,来完全实现自己的应用安全检测解决方案,我们可以把它们称之为 AppScan 标准版的姊妹工具。
而利用 IBM 的应用安全核心技术,来开发自己的安全检测工具,也是比较可行的和非常便利的。用户只需通过调用 AppScan SDK 来调用 AppScan 分析引擎的功能,至于工具的开发,重点主要放在用户体验和工具使用方面就可以了。接下来,我们简单介绍一下 AppScan SDK 的框架和使用。
AppScan 的 Namespace 主要有 Classes、Interfaces 以及 Enumerations 所组成,如下所示:
表 1. Classes
Class | 描述 |
---|---|
AppScanFactory | AppScanFactory 是 AppScan 的主接入点。使用这个类可以创建实例接口 IAppScan。AppScanFactory 是个静态类,不能够被继承和实例化 |
ScanOperation | 是代表 AppScan 执行的具体操作的类 |
ScanStatus | 是代表当前扫描动作状态的类 |
表 2. Interfaces
Interface | 描述 |
---|---|
IAppScan | IAppScan 是 AppScan SDK 的主接口。他封装着 AppScan 分析引擎的功能,同时作为任何企图访问 AppScan 分析引擎的客户端的接入点 |
ICustomProperties | ICustomProperties 是代表 key/value 模式用户数据存储库。这个接口被 AppScan 用于让用户保存客户化的字符项 |
IMainFactory | 用户内部使用 |
IScanDataLoader | 将装载和保存扫描数据的操作展现出去 |
IScanManager | 展现扫描管理操作 |
IVersion | 用于掌控 AppScan 的版本信息。版本信息的格式是: V.R.M.F. 分别是 Version、Release、Modification 以及 Fix。构建和规则库编号不属于应用版本的内容 |
表 3. Enumerations
Enumerations | 描述 |
---|---|
AppScanFeature | 代表各种不同的 AppScan 功能 |
ScanOperationResult | 代表所有可能的应用扫描结果 |
ScanOperationState | 代表扫描操作阶段(比如:探索,测试等等 ...) |
ScanOperationType | 代表各种可能的扫描操作种类 |
VersionFlags | 代表各种版本标示符 |
使用 AppScan SDK 进行图形化用户界面的开发,需要调用 AppScan 的库文件,并引用 AppScan 的命名空间。下面我们举个例子,说明如何使用类 AppScanFactory 来创建接口 IAppScan:
清单 1. 使用类 AppScanFactory 来创建接口 IAppScan
Namespace: AppScan Assembly: AppScanSDK (in AppScanSDK.dll)
语法
Visual Basic (Declaration) Public NotInheritable Class AppScanFactory C# public sealed class AppScanFactory C++ ref class AppScanFactory sealed J# public final class AppScanFactory JScript public final class AppScanFactory
代码示例
using AppScan; using System; class MyClass { public static int Main() { IAppScan appScan = AppScanFactory.CreateInstance(); Console.Out.WriteLine(appScan.Version.ToString()); } }
2.AppScan 标准版插件的开发
相比开发自己的安全检测工具来说,绝大多数的用户还是倾向于直接使用 AppScan 标准版,同时又希望能够很方便的去扩展 AppScan 标准版的功能。而 AppScan 标准版本身就具有强大的插件管理框架,我们称之为 AppScan eXtensions Framework,而 AXF 的基础就是 AppScan 的体系架构,特别是 AppScan SDK 应用程序编程接口。AppScan eXtensions 是一些独立的 AppScan 标准版的插件,这些插件提供一些附加的功能,用于扩展标准版的能力。AppScan eXtensions 插件在 AppScan 标准版应用程序启动时被 AppScan 加载,从而能够马上访问 AppScan SDK,AppScan eXtensions 插件将以多种方式挂载和嵌入 AppScan 标准版的用户界面。这边需要强调的是,AppScan eXtensions 插件和 AppScan GUI 图形用户界面并不是同级的,AppScan eXtensions 插件的安装、调用和运行都要依赖于 AppScan GUI,并需要和 AppScan GUI 进行交互。如下图 2 所示:
图 2. AXF 和 AppScan GUI 的关系
AppScan eXtensions 和 AppScan GUI 访问 AppScan 分析引擎的方式是一样的,都是通过相同的 AppScan SDK 来和分析引擎进行交互。这种访问方式就使得 AppScan eXtensions 和 AppScan GUI 具有相同的功能和一样的强大,事实上 AppsScan eXtensions 和 AppScan GUI 所能访问到的 AppScan 核心功能是相同的。对于用户的使用和交互,AppScan eXtensions 还可以对于 AppScan 用户界面进行一些特殊的控制。这些控制包括:菜单栏项目、右键菜单项目、工具栏项目等等。同时,AppScan eXtensions 还可以打开自己的窗体和用户界面对话框,以及实现其他的功能和用户使用增强。AppScan Extensions 可以以各种不同的形式和用户界面嵌入到 AppScan 标准版的图形化用户界面当中来。这些窗体和用户界面可以很小(可以什么都不做只是从用户界面到 Windows 剪切板进行数据的拷贝),同时也可以很大(比如 SQL 注入探测工具)。AppScan Extensions 可以是前摄式的(执行一个扫描,生成报告等等),也可以是事件驱动式的(比如当发现一个安全漏洞时,可以发送一个 e-mail 信息)。同时 AppScan Extensionsde 的运行还可以大量的依赖使用人员的交互(比如提示用户输入用于手工测试时信息),或者完全的自动化(比如静默得将扫描结果导入到共享网络的 XML 文件里)。
总体来说,AppScan Extensions 具有 AppScan GUI 同样强大的功能,可以实现开发者想要的任何功能。接下来,我们回顾一下对于 AppScan Extensions 的使用,通过一些简单的例子,我们来学习一下这些 AppScan Extensions 是如何来实现我们期望的一些需求的。
一个最常见的对于 AppScan eXtensions 的应用就是支持你的流程。一般来说,运行 AppScan 只是我们发现和修复安全问题的一个阶段。比如:这个流程还可能包括读取应用程序的详细信息从而从某个在线的协作平台来开始一个安全扫描,或者在安全扫描之后将发现的应用安全问题导出到缺陷跟踪系统当中。AppScan eXtensions 可以以自动化的方式来执行这些动作,从而节省你重复执行这些任务的时间。
功能的缺失是另外一个使用 AppScan eXtensions 的常见情况。有些时候我们会发现 AppScan 没有提供我们所需要的一些小功能,而这些小功能的缺失又确实会影响我们的工作或者浪费我们的时间,这时候我们就可以很容易通过开发 AppScan eXtensions 插件来满足这些功能,从而让我们摆脱暂时的困境。
第三个使用 AppScan eXtensions 的场景是需要将 AppScan 和其他的工具进行集成,比如网络安全检测工具,数据库安全检查工具以及很多其他的工具。在这些工具之间复制配置是一件非常浪费时间的差事,包括使用多个用户界面也会使问题恶化,以及管理不同的多个工具所产生的结果数据来支持统一的应用审计也是一个很大的问题。AppScan eXtensions 可以很容易的调用和执行这些工具,将这些不同工具所产生的数据都导入 AppScan 存储库,从而使用 AppScan 强大的报表框架来生成报告。
第四个典型的使用 AppScan eXtensions 的场景是创新。安全研究人员时常会萌发出一些新的测试理念和技术,您经常会发现自己需要编写很长的代码用于连接站点(处理代理和 SSL)、登录一个网站(跟踪 session cookies 和一些动态的组件)、以及展现结果数据。AppScan 和 AppScan SDK 提供了一个强大的框架用来支持重新发明,我们可以开发出一些独立的 AppScan eXtensions 用于功能验证和创新,而这些改动又不会影响现有的 AppScan 标准版程序。
AppScan eXtensions framework 可扩展插件框架允许你扩展功能以满足个性化的需求,而这些需求通常又具有普遍性(当然一般来说都会稍许有些不同)。一个用户可能希望将 AppScan 发现的一些安全问题导入到 IBM® Rational® ClearQuest®工具当中,而另外一个用户又可能希望将安全问题导入到工具 Bugzilla 当中,而实现这两个需求的插件从功能上来说很多地方是相同的。为了使 AppScan 的用户和 IBM 实验室能有个很好的协作和互动,通过最简单的方式共同研究和开发最好的 AppScan eXtensions 插件,IBM 针对 AppScan eXtensions 创建和维护了一个专门的信息门户网站 AppScan eXtensions Portal。这个门户网站提供关于 AppScan eXtensions 的各种不同的信息,包括:开发 AppScan eXtensions 插件的详细指南以及最新的产品文档和插件案例。AppScan eXtensions Web Portal 具有网络社区的各种功能,比如:论坛和意见提交系统,以及其他更进一步提升不同用户协作和交互的功能。
AppScan eXtensions Portal 门户网站还包括所有目前发布的 AppScan eXtensions 插件案例,这些插件有些是 IBM 自己开发的,有些是由 AppScan 的一些用户开发的。你可以下载和安装这些插件,并通过简单的点击就可以实现你所需要的一些特定的功能。用户可以免费的使用这些插件,每个插件都有自己的信息页面,来提供插件信息,包括为什么和如何使用它们,以及必须的安装操作说明。AXF Portal 门户网站所提供的几乎所有的 AppScan eXtensions 插件都是开源的,这些插件的源代码都可以在 Google Code Web 站点上找得到。AppScan eXtensions 的开源精神本身就是 AXF Protal 门户网站的基石,插件的开源可以很方便的让用户去修改已有的插件从而满足其个性需求,或者增强现有插件以弥补功能上的一些缺失。而这些增强的 AppScan eXtensions 插件又可以重新发布到 AXF 门户网站上来,帮助论坛上其他的用户更好的使用 AppScan。
Appcan 标准版提供 AppScan eXtensions 插件管理器,来帮助用户安装 AppScan eXtensions 插件,或者管理现有的插件。AppScan eXtensions 插件管理器如下图 3 所示:
图 3. Rational AppScan eXtensions 插件管理器
你可以通过 AppScan 标准版的“工具 > 扩展 > 插件管理器”来打开 AppScan eXtensions 插件管理器。插件管理器罗列了现有的已安装的插件,允许你启用和不启用这些插件。不启用并不是删除,而是在 AppScan 下次启动时不加载这些插件。如果你想得到关于下载和安装 AppScan 插件的演示视频,你可以访问 AXF Portal 门户网站。
3.通过命令行扩展 AppScan
AppScan 标准版不但包含图形化用户界面,同时还包括命令行界面,也就是说 AppScan 标准版的功能可以通过使用“命令行界面”来执行,即不使用“图形化用户界面”,而是出现命令提示符时输入命令,来执行 AppScan 的相关操作,使用 AppScan 的相关功能。
大家知道,一个工具如果提供命令行的使用界面,将给该工具的使用赋予更多的灵活性,这些命令行功能,在您需要自动从脚本或批处理文件中控制 AppScan 时特别有用。从命令行中,您还可以使用 AppScan CMD 命令来启动 AppScan 的图形界面。如果说 AppScan eXtensions 是扩展 AppScan 标准版的现有功能的话,那么使用命令行就是专注于如何使用 AppScan 了。
AppScan CLI 命令的结构是这样的,包括三个部分:
- 实用程序命令:AppScanCMD
- 将执行的特定命令,例如:exec
- 所选命令必须的选项,例如:/base_scan < 完整路径 >/d < 完整路径 >
AppScan CMD 主要包括以下一些命令:
- Help 命令:help 命令会列显本节中描述的命令用法
- Exec 命令:
- exec 命令会创建与所指定基本扫描具有相同配置的新扫描
- 执行扫描(“探索”和“测试”步骤)并将扫描结果保存到指定目录
- 还可以选择将其用于生成和保存新扫描的报告
- Report 命令:report 命令用于装入指定的扫描和生成报告
- AppScan CMD 还包括完整的“退出状态”代码
下面我们举个例子来说明为什么和如何来使用 AppScan CMD 命令行。我们知道,应用安全属于信息安全领域,同时也属于系统测试领域。从完整的系统测试的角度来说,不但包括功能测试、性能测试,同时也包括系统应用安全测试。如果我们的客户拥有自己的一套系统质量和测试管理平台,而又想把 AppScan 集成到这个平台当中来,把 AppScan 标准版作为一个自动化的安全测试终端来用。这个需求就可以通过 AppScan CMD 命令行来实现,包括:AppScan 安全扫描的调度、扫描过程的监控和控制、以及扫描结果的同步和集成。集成质量测试管理平台来调度 AppScan 的命令的例子如下:
- AppScanCMD exec /base_scan < 完整路径 > /d < 完整路径 >
此命令将使用所选基本扫描的配置来运行新的扫描,并将结果保存在特定位置。关于 AppScan 标准版命令行界面的详细使用说明,请参考 AppScan 标准版使用手册。
五. 总结
综上所述,AppScan 标准版具有设计良好的逻辑架构,和完整全面的 AppScan SDK 编程接口。而 AppScan 逻辑架构和 SDK 编程接口,就赋予了 AppScan 标准版无限的、和多种的可扩展性和二次开发能力。而这些可扩展性和二次开发的方法又适用于不同用户的不同使用要求。如果您非常关注用户使用界面,甚至想开发一套自己的应用安全检测工具,但是暂时又没有能力去开发和维护底层的应用安全规则库和扫描引擎,你完全可以和 IBM 合作,采用 IBM 业界领先的应用规则知识库和规则引擎,同时通过 AppScan 强大的编程接口来开发展现自身理念的图形化客户端;如果 AppScan 标准版已经能满足您的绝大多少的需求,您只是想通过开发一些小插件来扩展 AppScan 标准版的功能,你可以利用强大的 AppScan eXtensions 插件管理器,来安装和管理现有的一些 AppScan eXtensions 插件,或者增强和开发新的 AppScan eXtensions 插件;如果 AppScan 已经能满足你的安全检测功能上的需求,你只是希望能够将 AppScan 集成到您现有的安全管理平台当中,或者直接把 AppScan 标准版作为一个扫描探针来用,或者通过脚本来实现自动化的批处理活动,这时 AppScan CMD 命令行接口就能满足你这方面的需求。