SOAPSonar™ 测量您的 Web 服务与现实世界之间的距离





0/5 (0投票)
2006 年 8 月 15 日
21分钟阅读

36258
了解如何在开发周期内以最高效率真正测试您的 SOA Web 服务。
引言
Web 服务是一段软件,用于在不同平台上运行的应用程序之间提供互操作性。Web 服务绑定到一个公共 URL,并支持通过公共契约描述的一组功能。调用者连接到 Web 服务的端点,并调用任何已签约的功能。只有在采用通用标准来定义所公开的契约、格式以及交换消息的布局时,这种简单的机制才能在不同平台上工作。
过去几年里,为了促进 Web 服务的互操作性并将其提升到新的水平,已经制定了许多行业标准。这些标准涉及 Web 服务和 Web 服务开发的多个方面,包括安全性、可靠性和互操作性。
Web 服务的理念及其早期实现可以追溯到 90 年代末。如今,Web 服务已成为我们日常生活和活动中不可或缺的一部分。例如,Web 服务使成千上万的人能够与热门网站(如 Google、Amazon、MapPoint、PayPal、eBay 等)进行交互并提取信息,甚至无需通过浏览器进行访问。
最关键的是,当您发布一个 Web 服务时,无论您喜欢与否,您可能都将系统的核心置于任何能够访问互联网的人的掌控之下。有两股相反的力量在拉扯着您。
一方面,业务的力量促使您为潜在客户保持简单。您不希望用各种检查、交叉验证、限制、警告和任何形式的约束来打扰潜在客户。您希望最大限度地扩大覆盖范围以增加业务,并使在软件和 Web 服务上的投资能够快速有效地得到回报。
另一方面,安全的力量建议您保持谨慎,不断提高安全门槛,以免危及核心业务和核心信息系统。
您将如何处理这两股方向相反但强度大致相等的力?是简单地偏向其中一方吗?那太容易了。您无法承受非黑即白的二元选择。这两股力量对任何公司都至关重要;尤其是当公司已经成熟到决定上线一套精心打造的 Web 服务时。
精心打造!这才是关键词。
Web 服务的关键是什么?
一个精心打造的 Web 服务首先是一个能够正常工作并准确交付其 WSDL 契约所承诺的功能的 Web 服务。Web 服务通常是一个门面,它从调用者那里收集消息,然后转发到后端基础设施,并最终到达公司信息系统的核心。Web 服务代表着公司向外界展示的面孔。
攻击 Web 服务可能会对公司造成一些损害。覆盖广泛的受众可能会为公司带来一些成功。Web 服务的质量和性能可能会影响外界对公司的看法。
从业务角度讲,除了基本功能外,评估一个真实世界的 Web 服务有四个基本参数:漏洞评估、标准合规性、质量保证 (QA) 和整体性能。您在开发阶段通过应用最佳实践和最大限度地使用软件开发工具包来解决这些问题。那么,您如何根据真实世界来衡量它们呢?
您应该先部署服务,等待用户调用该服务,然后再评估性能数据吗?您应该先部署服务,然后等待恶意攻击者渗透,才意识到安全门槛不够高吗?
当然,如果您愿意,可以这样做。但这至少不是最佳策略。
换个角度来看,什么是声呐 (sonar)?简单来说,它是一种基于水下声音传播的仪器,用于导航以探测冰山、其他船只以及一般障碍物。例如,潜艇使用声呐来探测其他潜艇和航行路线上的水下障碍物。声呐通过发射声波脉冲并监听脉冲的回声来发现障碍物。声呐通过测量脉冲发射和返回之间的时间来计算与物体的距离。用软件术语来说,声呐通过“ping”一个对象来确保适当的距离、避免碰撞,并保障船员和机器的安全。
有没有一种特殊的声呐可以帮助保护 Web 服务,更重要的是,保护 Web 服务背后的信息系统?有没有一款软件可以“ping”一个 Web 服务,以确保质量、避免渗透攻击,并保障后端系统的安全?
当然有。它的名字就是 SOAPSonar™。
到底什么是 SOAPSonar™?
SOAPSonar™ 是一款专为企业级 Web 服务设计的测试和分析工具。SOAPSonar™ 只需几分钟即可投入使用,无需修改任何代码或网络拓扑,完全无侵入性,并能使不同团队(开发、QA、IT)在部署前后评估 Web 服务的漏洞、性能、标准合规性以及功能能力。
SOAPSonar™ 有两个不同的版本——个人版和企业版。
SOAPSonar™ 个人版
个人版是免费的,提供一组有限的功能,包括加载和测试 WSDL、功能性 QA 回归测试、性能测试和图形化报告。
使用个人版,您可以加载本地或远程 Web 服务的 WSDL,但如果需要基本身份验证之外的认证方式则无法使用。如果托管 Web 服务的站点实现了高级身份验证功能(例如,X509 证书),则需要企业版。
SOAPSonar™ 会解析 WSDL,并生成一个易于导航的可用操作列表。对于用户来说,SOAPSonar™ 就像一个功能丰富的客户端。您可以用它向目标 Web 服务发送 SOAP 请求消息并捕获响应。值得注意的是,所有这些操作都不需要编写代码或具备编程技能。
SOAPSonar™ 企业版
企业版提供了大量附加功能,主要集中在身份验证(SAML、X509、Kerberos)、集成的公钥基础设施 (PKI)、漏洞发现、风险评估和调解,以及设计时和运行时的合规性测试等领域。
企业版还支持带附件的 SOAP 和无限加载代理,以有效测试性能和可扩展性。
总的来说,SOAPSonar™ 是一款基于 Microsoft .NET 平台构建的尖端 Web 服务测试和诊断产品。它提供功能回归测试、性能分析、合规性报告、漏洞评估和身份管理测试。更重要的是,它为 Web 服务测试和诊断提供了一个无代码解决方案。
如果您正在寻找一个能全面比较 SOAPSonar™ 两个版本的资源,请访问 http://www.crosschecknet.com/products/compare.php。
SOAPSonar™ 入门
图 1 显示了 SOAPSonar™ 企业版启动后的用户界面。从用户界面中,您可以轻松了解它的工作原理。
图 1—SOAPSonar™ 主菜单
作为第一步,您需要选择一个 Web 服务,并让软件捕获其 Web 服务描述语言 (WSDL)。如前所述,您可以加载本地或远程 Web 服务的 WSDL。如果您将 WSDL 下载到本地计算机,那么您可以在离线状态下使用 SOAPSonar™。但请注意,在未连接网络的情况下能做的事情并不多。例如,您可以运行 WS-I 合规性分析,但无法对 Web 服务运行测试用例。
在图 1 中,SOAPSonar™ 设置为处理一个名为 PingSvc 的示例 Web 服务。您会看到一个指向失败断言列表的链接——在本例中没有失败的断言。在面板底部,另一个链接指向该服务公开的 Web 方法列表。通过点击每个方法,您可以发送消息并测试方法调用的行为和结果。
仅 QA 是 SOAPSonar™ 的默认工作模式,也是开始测试 Web 服务时要完成的第一步。
Web 服务的 QA 测试
您可以在工具的地址栏中输入 Web 服务的 WSDL 的 URL,也可以通过浏览来定位它。浏览按钮是地址栏右侧的第二个按钮。如果您尝试访问受基本身份验证保护的受限站点,将会弹出一个对话框。如果您知道要访问的 Web 服务需要凭据,也可以点击 WSDL 工具栏中的第三个按钮以获取身份验证选项。您将看到如下对话框:
图 2—指定访问 WSDL 的凭据
当您点击设置证书时,SOAPSonar™ 将检查智能卡读卡器和证书。您可以通过 PKI 管理窗口(见图 3)来定位和查看您的证书。该窗口通过点击“工具”|“PKI 管理”菜单出现。
图 3—PKI 管理对话框
如果 WSDL 被成功定位和加载,WSDL 文档的内容会流入项目树,为您提供一个图形化表示。例如,让我们下载一个真实世界的 Web 服务——Amazon Web 服务。图 4 显示了 WSDL 加载到 SOAPSonar™ 项目树中的样子。
图 4—对亚马逊的 Web 服务进行 QA 测试
WSDL 节点下出现两个子节点:Documents 和 WSDL Services。前者是模式文件的容器;后者列出了文档中描述的服务。对于亚马逊的搜索服务,您会看到列出的所有可能的方法。让我们关注作者搜索方法。该方法发送一个请求,以获取指定作者撰写的所有书籍。
每个方法都可以绑定多个测试。默认情况下,SOAPSonar™ 会为每个方法创建一个示例测试用例。您可以通过在树状视图中的任意位置右键单击来创建自定义测试。一个测试用例如图 5 中的对话框所示。
图 5—配置测试用例
SOAPSonar™ 提供了一个参数列表,您可以在其中指定适当的值。例如,要设置一个返回“Dino Esposito”第一组书籍的请求,您可以按照图 5 的步骤操作。请注意,您必须在 devtag 字段中指明您自己的开发者令牌。您在注册了自己的亚马逊 Web 服务工具包(包括 WSDL)副本后,会获得一个开发者令牌。另请注意,亚马逊 Web 服务允许两种搜索级别——heavy 和 lite。它们的区别在于返回的信息量。例如,就书籍而言,lite 搜索不包括评论和销售排名。
正如您在图 5 中所见,在您插入测试参数的文本框右侧有两个小图标。第一个图标表示您希望与该参数关联的所谓的自动攻击函数 (AAF)。第二个图标表示用于确定测试参数值的响应变量(如果有)。稍后您会看到,响应变量会根据前一个测试的结果自动设置。
AAF 是用户定义的功能,可让您动态生成测试参数的值。AAF 有双重作用。一方面,它们可以让您测试服务的质量;另一方面,它们可以在漏洞模式下用于生成可能有害的数据序列,以验证服务的安全级别。提供了许多受支持的 AAF 功能,不仅包括对测试参数的基于文本的输入,还可以智能地更改 SOAP 请求的 XML 结构。
图 6—使用 AAF 函数
您可以使用多个预定义的操作符来组合 AAF 函数,如图 6 中所列并在表格中注释的那些。AAF 的返回值是 Web 服务方法参数的一个值。然而,AAF 包含一些逻辑来自动生成一系列值,从而使测试更有意义。
函数 |
参数 |
描述 |
|
A|B|C |
按 |-分隔的字符串指定的顺序生成序列 |
|
FROM, TO, STEP |
在指定间隔内以给定步长生成数字 |
|
CHAR, FROM, TO, STEP |
通过重复指定次数的字符来生成一个缓冲区 |
|
VALUE, FROM, TO, STEP |
更改给定节点在 SOAP 请求中出现的次数 |
|
NAME, VALUE, FROM, TO, STEP |
添加一个新元素 |
|
NAME, VALUE, FROM, TO, STEP |
添加一个新的嵌套元素 |
|
NAME, VALUE, FROM, TO, STEP |
添加一个新属性 |
这些函数组合在一起构成一系列有意义的测试用例。例如,XSD 参数组中的 AAF 提供了类型检查功能。可以创建自定义 AAF 以满足特定需求。例如,以下函数将图 5 中的 Page
参数设置为 1 到 4 的序列。
NUMBER(1,4,1)
它的意思是:生成从 1 到 4 范围内,步长为 1 的数字。一旦您将此函数添加到测试用例并运行它,系统会为该范围内的每个值向服务器发送一个请求。
请求详情和测试参数可以本地保存在一个项目文件中,并随时调用。每个请求都可以关联身份验证设置,这些设置可以复制到剪贴板、从 XML 文件加载,并以其原始 XML 格式进行检查和调整。您可以通过请求/响应窗格左侧的垂直工具栏中的按钮来完成这些以及更多操作。
不过,SOAPSonar™ 在测试管理方面提供了更高层次的灵活性。通过点击“测试用例管理”选项卡,您可以将测试用例分组并以批处理方式运行它们。要创建测试组,您只需将测试用例从项目拖到“测试组”面板中。
图 7—测试组面板
结果将自动记录到所选目标目录下的一个 XML 文件中。图 8 显示了该操作的进度。
图 8—运行一批测试用例
您可以随意设置目标目录。结果文件包含有关 HTTP 请求、任何服务的响应以及成功标准的信息。SOAPSonar™ 最终可以将结果解析成一份可打印的报告。要检查结果,您可以将工具切换到“日志记录和报告”模式(主工具栏最右侧的按钮),然后选择所需的测试用例组。大量信息被分为四个视图。通过图中的下拉列表选择您喜欢的视图。
图 9—检查测试用例组的结果
运行性能测试
如果您在性能模式下运行 SOAPSonar™,测试组面板的用户界面会略有变化。如前所述,您可以通过在“模式”菜单中选择相应的项目来设置工作模式。默认工作模式是 QA。
在性能模式下,SOAPSonar™ 允许您设置参数来衡量 Web 服务在真实场景中的性能。特别是,它提供了虚拟客户端加载功能,并模拟对服务的并发访问。每个加载代理最多可以代表 50 个并发虚拟客户端。
测试可以按持续时间或按给定的迭代次数运行。通过选择持续时间模式或迭代模式来做出选择。迭代模式意味着测试中的每个请求将重复指定的次数。在持续时间模式下,测试的运行时间不会超过设定的持续时间。
图 10—为性能测试进行配置
在图 10 中,测试将运行 20 秒,模拟 20 个并发客户端。还有一个节流设置可用。它用于控制在给定时间基础上的期望吞吐量。例如,在图 10 中,测试配置为每秒最多发出一个请求。
任何性能测试结束后会提供哪些数据?
该测试会捕获吞吐量和每秒事务数 (TPS) 统计数据,并以两种视图提供:日志和报告。日志记录和报告引擎与图 10 中生成结果的引擎是同一个。
最后,您可以要求系统跟踪错误,以诊断测试和/或服务的问题。如果您启用跟踪,请注意,由于请求和响应诊断日志记录的开销,性能统计数据将会失真。
检查响应
您可以通过填写字段并点击“发送请求”按钮来发送单个测试请求。响应会立即显示在“响应”选项卡中,如图 8 所示。虽然统计数据很重要,但最先映入眼帘的结果必然是请求的响应。要查看服务返回了什么,只需点击“响应”选项卡,查看原始的 SOAP 数据包即可。(见图 11。)
图 11—Web 服务测试请求的响应
整个响应可以分为两部分——XML 和附件。您可以通过点击“响应”选项卡底部的按钮分别查看它们。如图 11 清楚地显示,还有我尚未提及的第三个选项——响应变量。
响应变量解决了一种特殊的测试场景,即构建测试用例链。想象一下,您需要在一个新的测试用例中使用上一个测试用例的结果。您会怎么做?响应变量是动态占位符,允许您从 HTTP 头部和响应正文中提取信息。与给定测试用例关联的响应变量在测试结束时被填充,并成为下一个测试的有效输入。
您首先定义一个响应变量,然后将其添加到一个或多个测试用例中。要识别一个响应变量,您可以在图 11 中选择“响应变量”选项卡,然后挑选您感兴趣的值。您将该值拖到窗口底部的已选变量窗格中。
图 12—创建一个响应变量
接下来,当为测试用例填充输入参数时,您可以点击我在评论图 5 时提到的两个图标之一。如下图所示,通过点击响应变量图标,您会得到一个可用变量列表,并将字段与该变量的内容绑定。
图 13—将响应变量与测试用例请求关联
每个测试用例响应生成的结果会根据定义的成功标准进行评估,以确定测试是通过还是失败。为了解释 Web 服务响应,SOAPSonar™ 采用了一项名为自动漏洞引擎 (AVD) 的专利待批技术。
测试的成功取决于设置的成功标准。成功标准是在响应包上执行的一组发现操作。可用函数如下所列:
- 检查 HTTP 错误代码
- 扫描 HTTP 头部查找字符串(区分大小写和不区分大小写)
- 扫描 HTTP 头部查找正则表达式
- 检查 SOAP 错误
- 扫描 SOAP 包查找字符串(区分大小写和不区分大小写)
- 扫描 SOAP 包查找正则表达式
- 扫描 SOAP 包查找 XPath 表达式
使用这些函数和相应的评估模式(全部匹配、任意匹配、均不匹配),您可以构建表达式来确定给定的测试是通过还是失败。
合规性测试
当您将 Web 服务的 WSDL 加载到项目中时,如果 SOAPSonar™ 在合规模式下工作,它会对 WSDL 执行 WS-I 基本配置文件扫描。分析结果会显示在屏幕上,并附有一个链接,点击后可以查看更详细的视图,如下所示:
图 14—对亚马逊 Web 服务进行 WS-I 合规性测试的结果
该分析工具将 Web 服务的 WSDL 与 WS-I 基本配置文件标准进行比较,并记录任何断言违规。违规列表(如果有)会显示在用户界面中。通过点击某个断言违规,您可以高亮显示导致失败的 WSDL 文件部分。
在图 9 中,方法使用的数组类型的声明不符合标准。用户界面中的一个链接直接指向源头,即用于生成输出的 Basic Profile 1.0 测试断言。用户界面中的另一个链接指向一个完整的 WS-I 报告,可以在您的客户端 Web 浏览器中查看。
如果某些断言与模式违规相关,则可能不会高亮显示。另请注意,对于导入其他 WSDL 文档的复合 WSDL 文档,如果违规发生在嵌套文档中,断言也可能不会高亮显示。
检查漏洞
当设置为漏洞模式工作时,SOAPSonar™ 允许您将每个测试请求与一组攻击相关联。测试结束后,通过检查响应,您可以评估存在的漏洞和信息泄露情况。图 15 展示了如何将漏洞测试附加到单个请求上。
图 15—定义漏洞测试
您可以从三个不同的漏洞组中选择:SOAP、XSD 参数和 SOAP 结构攻击。
第一组向请求中插入附加元素(DTD 和处理指令),以查看 Web 服务是否能处理它们。它还可以准备带有不当 SOAP 模式、超长属性名和格式化字符串的特制请求。
第二组测试 Web 服务在向给定参数传递错误类型数据以及将参数类型更改为所有可能的 XSD 类型时的反应。
最后,第三组通过反转表示参数的元素、添加或删除参数以及使用空值和超大值来改变请求的结构。
在任何情况下,SOAPSonar™ 都会动态解析特定于 WSDL 的 XSD,并确定如何更改请求以模拟攻击。通过点击漏洞组列表右侧的图标,您可以看到 SOAPSonar™ 将要发送的真实请求及其所有变体。
图 16—攻击的所有变体
SOAPSonar™ 不仅仅是模拟攻击;它还为您提供了一项正在申请专利的自动漏洞评估技术。模拟攻击固然很好,但如果您未能正确分析响应结果怎么办?
SOAPSonar™ 附带了一套可扩展的自动漏洞发现 (AVD) 功能。AVD 功能会评估 Web 服务响应,查找漏洞标准,如信息泄露、SOAP 错误合规性和攻击易感性。
标准 AVD 库定义了许多标准,如果这些标准得到验证,则构成潜在风险。所有定义的 AVD 功能都会动态应用于每个响应以构建报告。
图 17—标准 AVD 库
让我们通过检查一个示例 AVD 功能——Stack,来更深入地了解这个特性。该功能检查 Web 服务的响应,寻找任何看起来像堆栈跟踪的东西。出现在 SOAP 响应中的堆栈跟踪表明 Web 服务中存在未处理的异常。堆栈跟踪被认为是一个安全漏洞,因为它向攻击者揭示了重要的实现属性(平台、语言),这些信息可能被用来进一步攻击 Web 服务。每个 AVD 功能都与一条诊断消息和建议的补救措施相关联。那么,AVD 功能是如何工作的呢?
任何 AVD 函数都通过对 Web 服务响应应用通用操作符来工作。这些操作符与在 QA 模式下创建成功标准时使用的操作符相同。如果一个 AVD 函数成功,相关的诊断消息、严重级别和修复建议将被传送到一个报告文档中,如下所示:
图 18—一份漏洞报告
摘要
面向服务的架构帮助公司在节省结构性成本的同时部署应用程序。同时,面向服务的应用程序通过将内部系统与业务伙伴集成,创造了新的机遇,甚至带来了新的收入。
面向服务的架构是基于服务的——无论服务的性质和实现方式如何。Web 服务只是服务的一种类型,尽管是当今最常见的类型之一。Web 服务大多通过 HTTP 协议和 80 端口实现,并通过 WSDL 文件公开其契约。
一个部署基于 Web 服务的应用程序的公司,实际上是在暴露其内部流程和系统的核心,尽管是通过一个契约化的 API。如果 Web 服务存在某些漏洞或不符合公认的标准怎么办?如果它的工作和性能未达到预期怎么办?
您需要仔细测试 Web 服务的质量保证和安全性。而且您需要在应用程序上线之前完成这项工作。并且,最好是在不触及代码库、不重新编译的情况下完成。
如果有一款具备所有这些功能的工具,那将非常棒。如果这个工具还能提供分离测试阶段的能力,从而使不同团队能够同时在 Web 服务上工作,那它就近乎完美了。SOAPSonar™ 满足所有这些要求,是企业 Web 服务漏洞、合规性、QA 和性能测试的首选解决方案。立即试用——请访问 www.crosschecknet.com。
