如何使用 Rational Insight 与 Security AppScan Standard 生成安全问题趋势报表

IBM Rational Insight 是一种全面的面向整个软件生命周期的项目度量解决方案,它提供了从各种类型的数据源中抽取、转化并存储历史数据(ETL)的能力,同时还可以通过可视化的报表自动客观地展示项目的进度和状态。IBM Security AppScan Standard (以下简称 Security AppScan )是一种自动化 Web 应用程序与服务安全性测试引擎,能够连续、自动地审查 Web 应用,发现 Web 应用中存在的安全问题,并生成包含修订建议的行动报告。本文描述了如何结合这两种产品,以直观、可视化的方式展示所测试的 Web 应用各个版本的安全问题趋势。

金 鹏, 软件工程师, IBM

金鹏,IBM 中国开发中心(CDL)Rational 软件工程师,Rational Insight 项目组成员,熟悉 Rational 产品与 Cognos 解决方案,目前从事Rational Insight 功能性测试工作。您可以通过 developerWorks 社区与金鹏进行交流。



李 亚强, 软件工程师, IBM

李亚强,IBM 中国开发中心(CDL)Rational 软件工程师,Rational Insight 项目组成员,熟悉 Rational 产品与 Cognos 解决方案,目前从事Rational Insight 开发工作。



2012 年 12 月 31 日

下载试用版:IBM® Security AppScan 标准版  |  Web 应用安全与 AppScan 工具包
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

前言

IBM Rational Insight 是一种全面的面向整个软件生命周期的项目度量解决方案,它提供了从各种类型的数据源中抽取、转化并存储历史数据(ETL)的能力,同时还可以通过可视化的报表自动客观地展示项目的进度和状态。Security AppScan 是一种自动化 Web 应用程序与服务安全性测试引擎,能够连续、自动地审查 Web 应用,发现 Web 应用中存在的安全问题,并生成包含修订建议的行动报告。

Security AppScan 提供了一些简单的基于 BIRT 的报表来展示扫描结果,但是它只针对 Web 应用程序当前正在扫描的版本,而不能显示趋势性报表,即无法显示 Web 应用程序在多个版本间的安全问题的趋势图。Rational Insight 作为一款基于专业报表设计工具 Cognos 的项目软件领域度量解决方案,它提供了存储项目历史数据的数据仓库,而且提供了强大的 ETL 能力,还支持包括趋势图在内的更多类型的报表。Security AppScan 提供将问题扫描结果导出为 XML 文件的功能,而 Rational Insight 从版本 1.0 就已经支持以纯粹的 XML 文件作为数据源的方式,更是在版本 1.1 的时候提供了直接利用 XML 数据来定义 XML 数据配置(XDC)文件,不需要额外的 XML 模式文件,这使得集成 Rational Insight 和 Security AppScan 这两种产品成为可能。本文将介绍一种简单有效的集成这两种产品的方法,用户只需要做一次定制,大大减少了后期的维护工作量,方便快捷地生成 Web 应用的安全问题趋势报表。

本文中涉及到 Rational Insight 中 ETL 的定制,ETL 的定制本身比较复杂,在 IBM DeveloperWorks 上有关于 ETL 定制的系列文章,读者可以参考。由于篇幅限制,本文假设读者对于 ETL 定制过程已经有了一定的了解,将着重介绍本文中关键的定制过程。另外,本文示例所用的软件版本是 Rational Insight 1.1 和 Security AppScan Standard 8.5,但是同样适用于 Rational Insight 1.1 后期的版本以及其他 Security AppScan 版本。


通过 AppScan 扫描发现 Web 应用安全问题

在 AppScan 中新建一个项目,选择扫描模板(如常规扫描),扫描类型(如 Web 应用扫描),输入扫描 Web 应用的 URL,录制登陆过程(通常需要输入登陆的用户名和密码),最后开始扫描,扫描完成后将显示 Web 应用按严重性分类的安全问题个数,以及每个安全问题的详细说明和建议的修复方法。如图 1 所示。鉴于本文并不是描述如何使用 Security AppScan 的,这部分内容请参考 Security AppScan 的相关文档。

扫描结果可以导出为各种类型,如 PDF、XML 等等,单击“文件”菜单 ->“导出”->“导出为 XML”,将结果导出为 XML 文件,XML 片段如图 2 所示。为了便于接下来 ETL 定制过程,我们做如下规定:(1)将扫描结果文件命名为:Web 应用名称_版本号,如果 Web 应用还在开发周期中,版本号为内部版本号,一般以日期编号表示;(2)将 Web 应用的所有扫描结果存在同一个目录下面。

图 1. AppScan 扫描 Web 应用
图 1. AppScan 扫描 Web 应用

图 1 大图

图 2. 扫描结果 XML 片段
图 2. 扫描结果 XML 片段

图 2 大图


Insight 定制

将扫描结果的 XML 文件作为数据源,接下来需要进行 Insight 的定制将数据抽取到数据仓库中,并最终设计报表展现出来。Insight 的定制包括以下几个步骤:一是创建 XDC 文件,建立 XML 元数据结构和关系数据库表列的映射关系;二是分析将数据抽取到哪些表以及相应字段中,如有必要,需要进行数据仓库的定制,添加新表或修改已有的表结构;三是定制 ETL,对数据源进行抽取、转换并加载到第二步中设计的数据表中;最后如果数据仓库进行了定制,需要相应地定制报表模型,并设计报表。由于篇幅限制,本文将侧重介绍第一步和第三步的定制过程。

1. 创建 XDC 文件

XDC 文件是 Insight 的 XML 数据配置工具建立的,用于存储 XML 的元数据结构和关系数据库表列的映射关系。首先需要打开 XML 数据配置工具,创建一个新的数据配置文件 testfire.xdc,接下来创建一个资源组 testfire,资源组的 URL 类型选择“通用 XML”,URL 的值是本地文件夹的路径,接着测试连接是否通过,如果测试通过则表明设置正确。

图 3. 创建资源组
图 3. 创建资源组

图 3 大图

接下来在资源组下创建资源 issues,对应于数据源,相对路径的值为扫描 XML 的文件名,取消勾选“资源具有关联的 XML 模式”,Insight 从版本 1.1 开始支持只需要提供 XML 数据文件,之前的版本还需要提供 XML 数据格式定义文件。

图 4. 创建资源 issues
图 4. 创建资源 issues

图 4 大图

接下来需要在 Issues 资源下面创建数据映射表,通过数据映射,将树形的 XML 数据结构转化为关系型数据结构。这部分操作与非 XML 数据源创建方式相同,一共创建 3 个数据映射表,分别为 Issues、IssueType、ProjectRelease,Issues 对应应于 XML 中 <Issue> 节点下的数据,包括 IssueTypeID、URL、Severity 等字段,对应于安全问题的类型、在哪个 URL 发现以及严重程度;IssueType 对应于 XML 文件中的 <IssueType> 节点,包括 ID 和 Name 属性;ProjectRelease 对应于 XML 文件中的 <XmlReport> 中的 Name 属性,通过该属性得到 Web 应用名称和版本号。最终的 XDC 文件如图 5 所示。

表 1. 映射表结构
Data Mapping TableXPathField NameSQL Type
ProjectRelease /XmlReport/@Name Name VARCHAR(255)
IssuesType /XmlReport/Results/IssueTypes/IssueType/@ID ID VARCHAR(255)
  /XmlReport/Results/IssueTypes/IssueType/advisory/name advisory_name VARCHAR(255)
Issues /XmlReport/@Name ProjectRelease VARCHAR(255)
  /XmlReport /Results/Issues/Issue/@IssueTypeID IssueTypeID VARCHAR(255)
  /XmlReport /Results/Issues/Issue/Severity Severity VARCHAR(255)
  /XmlReport /Results/Issues/Issue/Url URL VARCHAR(255)
图 5. XDC 文件的结构
图 5. XDC 文件的结构

图 5 大图

2. 数据仓库设计

我们可以视每个安全问题(Issue)为一个缺陷,数据仓库中 RIODS.REQUEST 表用来存储变更请求,因此可将 Issue 的各个字段对应到 RIODS.REQUEST 表。Issue 中的 Severity 属性对应到 RIODS.REQUEST_SEVERITY 表。IssuesType 可视为缺陷类型,对应于 RIODS.REQUEST_TYPE 表;根据 ProjectRelease 的 Name 属性得到项目名和版本号,对应于 RIODS.PROJECT 和 RIODS.RELEASE 表。具体对应关系在后面会详细描述。

3. ETL 定制

首先通过操作系统自带的 ODBC 数据源管理工具创建系统 ODBC 数据源,名称为 testfire,指向之前创建的 testfire.xdc 文件,然后打开 Cognos DataManager 并且导入 Insight 随产品提供的 OOTBE2E.ctg 文件,并创建 ODBC 数据源连接,数据源名称为 testfire。

接下来我们创建 4 个事实构建:Issues、IssueSeverity、IssueType 和 ProjectRelease,将数据抽取到对应数据表中,根据数据仓库的设计,从映射表到目标表的对应关系如表 2 所示。这些都是比较基础的 ETL 定制操作,本文假定读者对于 ETL 定制已经有一定的了解,因此这里不过多介绍,读者可参考附录中的 ETL 定制系列文章,只详细介绍 Issues 这个事实构建。

表 2. 映射表到目标表对应关系
映射表字段数据转换目标表字段
ProjectRelease Name Project_Name RIODS.PROJECT NAME
PROJECT_ID
Release_Name RIRIODS.RELEASE NAME
RELEASE_ID
IssuesType ID ID RIODS.REQUEST_TYPE EXTERNAL_KEY2
NAME
REQUEST_TYPE_ID
advisory_name advisory_name
Issues Severity Severity RIODS.REQUEST_SEVERITY NAME
REQUEST_SEVERITY_ID
Issues ProjectRelease 参照 RIRIODS.PROJECT RIODS.REQUEST
PROJECT_ID
参照 RIRIODS.RELEASE RELEASE_ID
IssueTypeID 参照
RIODS.REQUEST_TYPE
REQUEST_TYPE_ID
Severity 参照
RIODS.REQUEST_SEVERITY
REQUEST_SEVERITY_ID
URL URL URL

首先需要创建 Issues 事实构建的数据源,选择 DataManager 的数据连接 testfire 作为数据源,输入如图 6 所示 SQL 语句,最后需要设定两个派生列 Project_Name 和 Release_Name(参照图 6)。

图 6. ISSUE 事实构建的数据源定义
图 6. ISSUE 事实构建的数据源定义

然后创建数转换模型(Transformation Model),进行数据字段的映射。以 Severity 为例,单击“添加”(Add)按钮,添加一个“维度”(Dimension),这里命名为 Lookup_Severity,单击右侧的浏览按钮,选择 OOTBE2E 中已经存在的 Lookup_Severity,接下来选中 Severity 和 Lookup_Severity.NAME 字段,单击“映射”(Map)按钮完成映射操作。接下来,我们创建一个派生列(Derivation)作为数据流的输出,创建方法是:单击添加按钮,添加一个属性(Attribute),这里命名为 Severity_ID,在弹出的对话框中单击确定,然后右键单击 Severity_ID,选择“转化为派生列”(Convert to Derivation),双击 Severity_ID,在“计算式”(Calculation)中输入:

if NOT Unmatched( Lookup_Severity )
then return Lookup_Severity.REQUEST_SEVERITY_ID ;
else return -1;

经过上述操作后,数据流的输入字段为 Severity,经过转换后,输出字段为派生列 Severity_ID,对应于 RIODS.SEVERITY 表的主键,详细映射如图 7。

图 7. ISSUE 事实构建的数据源定义
图 7. ISSUE 事实构建的数据源定义

最后需要建立数据转换模型到数据递送目的地 RIODS.REQUEST 表的映射,详细映射参见图 8,选择 Url,Project_ID,Severity_ID,IssueType_ID 和 Release_ID 这四个映射元素为数据递送的主键,并且需要强调的是,在“模块属性”(Module Properties)中选择“更新方式”(Refresh Type)为“UPDATE/INSERT”,默认为“APPEND”。同理,创建 Project、IssueType 和 Release 的数据映射,创建完成后右键选中“Issues”事实构建,选择“执行”(Execute),这时会发现运行出现错误,这是因为 Lookup 查询表中引用了变量 ODS、DW 和 RESOURCEGROUP_ID 时,右键选中“Issues”事实构建,选择“属性”(Properties),在“变量”(Variables)页面中依次添加 ODS、DW 和 RESOURCEGROUP_ID 变量并赋值,ODS 和 DW 代表数据库的模式名称,默认为‘RIODS’和‘RIDW’,对于 RESOURCEGROUP_ID 的值,打开 testfire.xdc 文件,选中“testfire”资源组,下方属性栏中“GUID”属性值即是 RESOURCEGROUP_ID。

图 8. ISSUE 事实构建的数据递送映射
图 8. ISSUE 事实构建的数据递送映射

约定中将 Web 应用的所有版本扫描结果的 XML 文件存放在同一个目录,接下来定制 ETL 读取该目录中的所有文件,目录名被设计为输入参数,并依次替换 XDC 文件中的相对路径(参照图 4),这样就可以一次性将各个版本的扫描数据抽取到数据仓库中。

在 DataManager 中创建一个方法 GetFileList(),实现如图 9 所示,在 Interface 页面添加输入参数 dir,类型为 CHAR,表示目录名,在 Variables 页面添加 files、count、index 和 item 变量,类型分别为 ARRAY、INTEGER、INTEGER 和 CHAR(200)。实现中采用的函数是 Cognos Data Manager 的内部函数,详细说明请参阅 Cognos 帮助。GetFileList 方法返回包含目录 dir 中所有以 .xml 结尾的文件的文件名组成的数组 files,主要思路是首先得到 dir 变量定义的目录下的 XML 数据文件数量,然后取得每个 XML 数据文件的文件名,并存入 files 变量。

图 9. GetFileList() 实现
图 9. GetFileList() 实现

创建一个任务流 testfire,如图 10 所示,任务流中 init 节点用于初始化变量,files 数组记录目录下的文件名,index 是数组索引。hasmore 节点判断是否遍历到最后一个文件。对于 Replace 节点,通过 System 方法调用操作系统 copy 和 sed 命令,替换 XDC 文件为同一个 XDC 文件的副本,并替换其中的相对路径,读者需根据自己的实际情况替换图中标示的路径。变量 $xdc_file 指向 testfire.xdc 文件,在运行 testfire 前拷贝 testfire.xdc 文件,将它重命名为 testfire_bak.xdc,变量 $xdc_file_org 指向该拷贝文件。另外,在运行 testfire 前,需要下载 sed.exe,然后拷贝到 Insight 的安装目录的“cognos\bin”目录下,在 32 位 Windows 操作系统上的默认路径是“C:\Program Files \IBM\Rational Insight\cognos\bin”。各节点的实现如图 11~13 所示。

图 10. testfire 任务流
图 10. testfire 任务流

图 10 大图

图 11. init 节点实现
图 11. init 节点实现
图 12. hasmore 节点实现
图 12. hasmore 节点实现
图 13. Replace 节点实现
图 13. Replace 节点实现

图 13 大图

运行 testfire 任务流,会出现找不到变量的错误,同样,我们需要在 testfire 任务流的属性页中添加变量并赋值,如图 14 所示,变量的值读者需要根据自己的环境进行修改。运行完成后,再运行 StartJobs 目录下的 Build_Star 任务流,抽取维度(Dimension)和事实(Fact)数据到数据仓库中,至此 ETL 定制部分完成。

图 14. testfire 任务流变量定义
图 14. testfire 任务流变量定义

趋势报表设计

由于没有对数据仓库进行了定制,因此不需要修改报表模型,启动 Report Studio,选择“Reporting Data Model (DW)”报表模型,创建一个 Chart 型报表,这里设计一个简单的报表,X 轴为产品版本,Y 轴为安全问题的个数,Legend 设为问题严重性,如图 15 所示。通过这个报表可以发现相比于前一个版本,应用程序的安全问题数量得到了控制,是一个良好的趋势。反之,如果安全问题数量骤升,或者引入了新的安全问题,则需要开发人员去分析原因并及时解决。

读者可根据自己的需要设计相应的报表,也可添加钻取功能,查看具体的安全问题信息列表、哪些是新增的安全问题等等。另外,Insight 随产品提供的一系列的开箱即用的报表,可以重用其中关于变更管理的部分报表。

图 15. 安全问题趋势报表
图 15. 安全问题趋势报表

总结

本文结合了 Security AppScan 和 Rational Insight 两种产品,采用 Security AppScan 扫描 Web 应用中存在的安全方面的问题,通过定制 Rational Insight,以直观、可视化的方式展示 Web 应用各个版本的安全问题趋势,有助于分析产品在开发过程中是否引入了新的安全隐患,以及是否及时地降低了已有的安全隐患。用户只需要做一次定制,大大减少了后期的维护工作量,方便快捷地生成 Web 应用的安全问题趋势。

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational
ArticleID=853765
ArticleTitle=如何使用 Rational Insight 与 Security AppScan Standard 生成安全问题趋势报表
publish-date=12312012