本主题介绍如何使用 Parasoft SOAtest 执行渗透测试。

概要

渗透测试对于发现应用程序中的安全漏洞而言至关重要。使用 Parasoft SOAtest,您可以利用现有的 API 功能测试场景创建安全测试,将渗透测试添加到您的自动化 CI 流程中。

创建渗透测试场景

SOAtest 支持可通过 HTTP 或 HTTPS 访问的 REST 与 SOAP API 的渗透测试。

进行渗透测试,首先要有包含需进行渗透测试的 API 的功能测试场景,然后需要为渗透测试配置场景。可以利用现有的功能测试场景并将其转化用于渗透测试,也可以创建仅用于渗透测试的自定义简化测试方案。

将功能测试重新用作安全测试具有以下优点:

  1. 由于功能测试已经编写完成,您可以重复使用已经完成的工作,从而节省时间和精力。
  2. 要执行某些 API,您可能需要进行一些设置,例如准备数据库或调用其他 API。而如果以有效的功能测试为基础,则无需再进行这类设置。

配置渗透测试场景的一般工作流程如下:  

  1. 确定要用于渗透测试的测试场景并将其复制。您可以正常继续执行原始的功能测试场景。
  2. 针对测试客户端(如 SOAP 客户端REST 客户端EDI 客户端消息传送客户端),将渗透测试工具添加到执行需要进行渗透测试的 API 调用的通讯报文对象输出中。

  3. 针对浏览器回放工具,将渗透测试工具添加到需要进行渗透测试的 HTTP 通讯报文或浏览器内容输出中。当该工具被链接到一个 HTTP 通讯报文输出时,该工具只攻击该通讯报文信息所描述的请求。当该工具被链接到浏览器内容时,它会攻击浏览器回放工具发出的所有请求。除非在 Parasoft> 首选项> 浏览器设置中启用,否则默认忽略二进制文件(请参阅其他首选项设置 )。

  4. 当应用程序发生更改时,只更新功能测试场景。当您准备运行相应的渗透测试场景时,重复上面的流程,从最新的一组功能测试中进行复制,然后为渗透测试配置副本。

渗透测试需要已启用 API 安全测试许可证功能的用户许可证。 

创建安全测试场景的最佳实践

渗透测试的固有风险

就其本质而言,渗透测试通过模拟恶意用户活动来发现被测应用程序(AUT)中的安全漏洞。因此,渗透测试可能会对 AUT 或运行 AUT 或 SOAtest 的系统造成以下影响:

  • AUT 可能关闭。
  • AUT 数据可能被修改或损坏。
  • 如果在运行 AUT 或 SOAtest 的计算机上安装了防病毒应用程序,它会将 SOAtest 渗透测试活动解释为可疑或恶意活动,从而生成警告或采取其他措施。

遵循最佳实践可帮助您在执行渗透测试时减少可能导致的此类问题和其他潜在问题。

  • 您应将功能测试场景与安全测试场景分开维护,并在不同的测试任务中运行。这样做的主要原因是,在现有功能测试的基础上增加渗透测试很可能会影响功能测试的稳定性。您需要选择将哪些功能测试场景用于自动安全测试,然后生成功能测试的副本,作为单独的安全测试进行维护。
  • 由于渗透测试成本较高,因此在选择测试项目时需要仔细挑选;在尽量减少测试次数的同时,最大限度扩大被覆盖的 API 的攻击面。应考虑以下几点:
    • 渗透测试工具分析请求/响应通讯报文,以了解请求中哪些参数可用于测试。您需要选择能够测试每个 API 中所有参数的功能测试,以确保 API 的每个输入都能得到分析。
    • 在每个场景中,您需要决定对哪些 API 调用进行渗透测试。同一 API 可能会在多个场景中引用,而您肯定不希望对已在其他场景中测试过的 API 重复进行渗透测试。渗透测试工具应只添加到需要进行渗透测试的 API 的相应测试中。
    • 应控制场景数量,从而确保安全测试运行的时间不会太长,能够每天至少运行一次。
  • 您的功能测试场景可能包含用于初始化或清理工作的设置或清理部分。这些部分通常不需要进行渗透测试。
  • 如果功能测试中存在任何参数化,则应将其删除。渗透测试工具不需要看到相同参数的多组数值即可知道要测试的对象,发送多组不同数值只会导致重复测试,延长测试时间。
  • 应删除已转换为渗透测试场景的任何功能测试场景中的所有断言。API 功能测试中通常存在用于验证服务响应的断言。而用于安全测试时,这些断言可能会失效,同时影响结果审查过程,因为在审查结果时,通常只关心发现的安全漏洞。
  • 一些 API 调用会向数据库添加数据。在针对此类 API 使用渗透测试工具时,渗透测试工具对 API 发起攻击的次数较多,数据库中的信息可能会因此变得臃肿。在某些情况下,这会产生意料之外的副作用,例如降低应用程序的性能,导致自动安全测试运行无法在合理的时间内完成。  如果您发现类似行为,请从自动运行中移除相应 API 的安全测试,待开发团队修复问题后再进行测试。
  • 您需要考虑是在同一测试环境下还是在不同测试环境下运行功能测试和安全测试。在功能测试和安全测试运行之间重置环境,或分别使用单独的环境,可提高测试稳定性,尽管通常情况下没有必要。您通常可以重复使用同一环境,但由于安全测试会影响功能测试环境的稳定性,因此应该先运行功能测试,最后运行安全测试。当您使用不同的环境时,您需要确保原始功能测试场景配置了变量,以便将测试指向不同环境中的不同端点。SOAtest 支持使用环境变量来实现这一目的。(请参阅在不同的环境中配置测试。)

执行渗透测试场景

要运行渗透测试场景,请按照执行功能测试中的说明执行。

  • 执行附带渗透测试工具的工具时,相应的请求和响应数据将被捕获,并被渗透测试工具用作执行渗透测试的起点。

由于渗透测试的运行时间较长(即使针对单个 API 也是如此),因此渗透测试工具内置了超时功能,可控制工具运行多长时间后才转到下一个测试。该超时时间与运行测试的测试配置中所设定的超时时间一致。如果在当前 API 的渗透测试完成前超时,则该 API 的渗透测试将被中断并报告错误。

此外,您还可以设置全局包含项与排除项(添加为正则表达式),以控制渗透测试工具扫描的 URL。包含项在排除项之前处理。如果没有定义包含项,则在考虑排除项之前,假定所有内容都包含在测试范围内。无论渗透测试工具链接到哪个工具中,都会应用包含项和排除项。

如需更改超时和/或包含项与排除项,请前往 Parasoft > 测试配置,然后选择相应测试配置,前往执行 > 安全性

 

  • 超时时间以分钟为单位。
  • 如需添加用于确定已包含或排除 URL 的正则表达式,请点击其表格旁的添加,然后输入正则表达式。
  • 如需删除先前添加的 URL 正则表达式,请选中该 URL 正则表达式并点击删除

运行渗透测试场景时,控制台视图中会显示与正在扫描的内容相关的信息。在控制台中启用高详细信息级别能够帮助您获取更多细节,例如哪些 URL 正在被扫描,哪些被跳过,从而确保包含与排除模式按预期执行。如需启用高详细信息级别,请前往 Parasoft > 首选项 > 控制台,选择

查看结果

通过用户界面运行时,错误会在质量任务视图进行报告,双击错误项或右键点击并选择查看详情,即可查看错误的详细信息和修复方法。

更为详细的结果可通过生成 HTML 版报告获取。HTML 报告将根据 CWE 或 OWASP 2021 Top 10(在 Parasoft> 首选项> 报告> API 安全性中设置;请注意,更改此设置后无需重新执行测试)、风险以及置信度来整理错误项。

更多信息,请参阅查看结果

抑制误报

渗透测试工具使用的一些规则采用启发式方法分析 AUT HTTP 响应并发出警告。因此,可能会误报一些错误。查看每个新的错误,判断它是应处理的项目还是误报(您可能需要使用警告的置信度来帮助您进行评估)。

为防止渗透测试工具在后续运行中误报,可在质量任务视图或抑制文件中抑制错误。详情请参阅抑制任务

如需抑制一个针对所有测试的主动扫描规则,请修改默认主动扫描策略。请参阅Configuring Scan Policies

配置扫描策略

SOAtest 的渗透测试使用主动和被动扫描规则进行分析。主动扫描规则会向 API 发出额外(受控的)请求,尝试发现安全漏洞。与之相比,被动扫描规则不会向应用程序发出新请求,而是通过分析相应工具捕获的请求/响应数据来发现安全漏洞。SOAtest 利用 OWASP ZAP 进行渗透测试。 

SOAtest 包含三个内建渗透测试配置文件:一个用于 REST API,一个用于 SOAP API,还有一个用于 web 资源的非 API 请求。每个配置文件由一个主动扫描策略和一组被动扫描规则组成。默认情况下,配置文件的选择根据所配置的测试是向 REST API、SOAP API 还是其他 web 资源(如 HTML)发出请求。

如果您想要使用自定义主动扫描策略,可以从 OWASP ZAP 导出扫描策略并配置 SOAtest。导出的扫描策略将配置渗透测试工具使用的主动扫描规则集。使用自定义主动扫描策略时,将根据请求是发送给 REST API 还是 SOAP API 自动使用合适的被动扫描规则集。

配置 SOAtest 使用自定义 ZAP 扫描策略:

  1. 前往 Parasoft> 测试配置,打开测试配置浏览器。
  2. 点击新建,创建一个新的测试配置,或选择一个现有测试配置。
  3. 打开该测试配置的执行> 安全性选项卡。
  4. 启用使用自定义扫描策略
  5. 点击浏览并选择您的 ZAP .policy 文件。

创建自定义主动扫描策略

您可以使用位于 SOAtest ZAP 安装目录中的 SOAtest 嵌入式 ZAP 创建或修改自定义主动扫描策略:plugins/com.parasoft.ptest.libs.web_<VERSION>\root\zap(其中 version 是 com.parasoft.ptest.libs.web 插件的实际版本。例如,10.5.2.202109012000)

如果您的计算机上安装了独立于 SOAtest 的 ZAP,那么 ZAP 的主目录可能位于以下位置之一

  • Windows:C:\Users\<username>\OWASP ZAP
  • Linux:~/.ZAP
  • Mac:~/Library/Application Support/ZAP

启动独立的 ZAP 时,存储在这些目录中的安装用户设置可能会与嵌入式 SOAtest ZAP 发生冲突。因此,您应该使用 -dir 命令行参数通过自定义 ZAP 主目录启动嵌入式 SOAtest ZAP。使用命令提示符导航到 SOAtest ZAP 安装目录并通过自定义 ZAP 主目录启动嵌入式 SOAtest ZAP:

  • Windows:zap -dir C:\Users\your_name\ZAP_SOATEST
  • Linux:./zap.sh -dir ~/.ZAP_SOATEST
  • Mac:./zap.sh -dir ~/Library/Application Support/ZAP_SOATEST

如果您的计算机上没有独立于 SOAtest 的 ZAP 安装,则可以使用 SOAtest ZAP 安装目录中的 zap.bat (Windows) 或 zap.sh (Linux, Mac) 脚本运行嵌入式 SOAtest ZAP。

当您启动嵌入式 SOAtest ZAP 时,它可能会尝试使用已被占用的代理端口。这时,ZAP 将提示您选择其他端口:

如需创建新的主动扫描策略或编辑现有策略,请从 ZAP 顶部菜单中选择分析 -> 扫描策略管理器。在扫描策略管理器对话框中选择现有策略或创建策略。在扫描策略对话框中选择需要应用到自定义策略中的主动扫描规则:

您的自定义 .policy 文件将保存在 ZAP 主目录的 policies 文件夹中。

注意

如果要添加嵌入式 SOAtest ZAP 安装中未包含的主动扫描规则,您可以将包含这些规则的 ZAP 附加组件添加到 SOAtest ZAP 安装目录的插件目录中,然后按照本节说明在自定义策略中选择相应规则。但是,如果您在 SOAtest ZAP 安装目录中添加或修改了任何 ZAP 附加组件,我们将无法保证嵌入式 SOAtest ZAP 能够正常运行,因此请谨慎操作,并在继续操作前进行必要的备份。

检查/修改默认主动扫描策略

您可以检查和/或修改 SOAtest 默认使用的主动扫描策略。这些策略位于以下 SOAtest 安装文件夹中:plugins\com.parasoft.ptest.libs.web_version\root\zap\policies (where version is the actual version of the com.parasoft.ptest.libs.web plugin, for example, 10.5.2.202109012000)

该文件夹包含以下主动策略文件:

  • Parasoft SOAP.policy – 用于请求 SOAP API。主要包括 SOAP 客户端的附加渗透测试工具,但也可能包括请求 SOAP API 的其他工具。
  • Parasoft REST.policy – 用于请求 EST API。主要包括 EST 客户端的附加渗透测试工具,但也可能包括请求 REST API 其他工具,包括其他客户端工具和浏览器回放工具。
  • Parasoft Web.policy – 用于请求非 API web 资源。仅用于非 API 请求浏览器回放工具的附加渗透测试工具。

一旦修改了这些策略中的任一策略,便会在下次调用渗透测试工具时使用。

支持的渗透测试规则

ID规则CWE IDOWASP风险类型配置文件
0Directory Browsing 548A01:2021主动Web/REST/SOAP
2Private IP Disclosure 200A01:2021被动Web/REST/SOAP
3Session ID in URL Rewrite 200A01:2021被动Web/REST/SOAP
6Path Traversal 22A03:2021主动Web/REST/SOAP
7Remote File Inclusion 98A03:2021主动Web/REST
41Source Code Disclosure - Git 541A05:2021主动Web/REST/SOAP
42Source Code Disclosure - SVN 541A05:2021主动Web/REST/SOAP
43Source Code Disclosure - File Inclusion 541A05:2021主动Web/REST/SOAP
10003Vulnerable JS Library 829A06:2021被动Web/REST/SOAP
10009In Page Banner Information Leak 200A05:2021被动Web/REST/SOAP
10010Cookie No HttpOnly Flag 1004A05:2021被动Web/REST/SOAP
10011Cookie Without Secure Flag 614A05:2021被动Web/REST/SOAP
10015Incomplete or No Cache-control Header Set 525未指定被动Web/REST
10017Cross-Domain JavaScript Source File Inclusion 829A08:2021被动Web/REST/SOAP
10019Content-Type Header Missing 345A05:2021信息被动Web/REST/SOAP
10020Anti-clickjacking Header 1021未指定被动Web/REST/SOAP
10021X-Content-Type-Options Header Missing 693A05:2021被动Web/REST
10023Information Disclosure - Debug Error Messages 200A01:2021被动Web/REST/SOAP
10024Information Disclosure - Sensitive Information in URL 200A01:2021信息被动Web/REST/SOAP
10025Information Disclosure - Sensitive Information in HTTP Referrer Header 200A01:2021信息被动Web/REST/SOAP
10026HTTP Parameter Override 20A04:2021被动Web/REST/SOAP
10027Information Disclosure - Suspicious Comments 200A01:2021信息被动Web/REST/SOAP
10028Open Redirect 601A03:2021被动Web/REST/SOAP
10029Cookie Poisoning 20A03:2021信息被动Web/REST/SOAP
10030User Controllable Charset 20A03:2021信息被动Web/REST/SOAP
10031User Controllable HTML Element Attribute (Potential XSS) 20A03:2021信息被动Web/REST/SOAP
10032Viewstate 642未指定高、中、低、信息被动Web/REST/SOAP
10033Directory Browsing 548A01:2021被动Web/REST/SOAP
10034Heartbleed OpenSSL Vulnerability (Indicative) 119A09:2021被动Web/REST/SOAP
10035Strict-Transport-Security Header 319A05:2021低、信息被动Web/REST/SOAP
10036HTTP Server Response Header 200A05:2021低、信息被动Web/REST/SOAP
10037Server Leaks Information via 'X-Powered-By' HTTP Response Header Field(s) 200A01:2021被动Web/REST/SOAP
10038Content Security Policy (CSP) Header Not Set 693A05:2021中、信息被动Web/REST/SOAP
10039X-Backend-Server Header Information Leak 200A05:2021被动Web/REST/SOAP
10040Secure Pages Include Mixed Content 311A05:2021中、低被动Web/REST/SOAP
10041HTTP to HTTPS Insecure Transition in Form Post 319A02:2021被动Web/REST/SOAP
10042HTTPS to HTTP Insecure Transition in Form Post 319A02:2021被动Web/REST/SOAP
10043User Controllable JavaScript Event (XSS) 20A03:2021信息被动Web/REST/SOAP
10044Big Redirect Detected (Potential Sensitive Information Leak) 201A04:2021被动Web/REST/SOAP
10045Source Code Disclosure - /WEB-INF folder 541A05:2021主动Web/REST/SOAP
10047HTTPS Content Available via HTTP 311A05:2021主动Web/REST/SOAP
10048Remote Code Execution - Shell Shock 78A09:2021主动Web/REST/SOAP
10049Content Cacheability 524未指定信息被动Web/REST
10050Retrieved from Cache 未指定未指定信息被动Web/REST/SOAP
10051Relative Path Confusion20A05:2021主动Web
10052X-ChromeLogger-Data (XCOLD) Header Information Leak 200A04:2021被动Web/REST/SOAP
10054Cookie without SameSite Attribute 1275A01:2021被动Web/REST/SOAP
10055CSP 693A05:2021中、低、信息被动Web/REST/SOAP
10056X-Debug-Token Information Leak 200A01:2021被动Web/REST/SOAP
10057Username Hash Found 284A01:2021信息被动Web/REST/SOAP
10061X-AspNet-Version Response Header 933A05:2021被动Web/REST/SOAP
10062PII Disclosure 359A04:2021被动Web/REST/SOAP
10063Permissions Policy Header Not Set 16A01:2021被动Web/REST/SOAP
10070Use of SAML 未指定未指定信息被动Web/REST/SOAP
10094Base64 Disclosure 200A04:2021高、信息被动Web/REST/SOAP
10095Backup File Disclosure 530A04:2021主动Web/REST/SOAP
10096Timestamp Disclosure 200A01:2021信息被动Web/REST/SOAP
10097Hash Disclosure 200A04:2021高、低被动Web/REST/SOAP
10098Cross-Domain Misconfiguration 264A01:2021被动Web/REST/SOAP
10099Source Code Disclosure 540A05:2021被动Web/REST/SOAP
10103Image Location and Privacy Scanner 200未指定信息被动Web/REST/SOAP
10105Weak Authentication Method 287A01:2021高、中被动Web/REST/SOAP
10106HTTP Only Site 311A05:2021主动Web/REST/SOAP
10107Httpoxy - Proxy Header Misuse 20A06:2021主动Web/REST/SOAP
10108Reverse Tabnabbing 未指定A04:2021被动Web/REST/SOAP
10109Modern Web Application 未指定未指定信息被动Web/REST/SOAP
10110Dangerous JS Functions 749A04:2021被动Web/REST/SOAP
10202Absence of Anti-CSRF Tokens 352A01:2021低、信息被动Web/REST/SOAP
20012Anti-CSRF Tokens Check352A05:2021主动Web
20015Heartbleed OpenSSL Vulnerability 119A06:2021主动Web/REST/SOAP
20016Cross-Domain Misconfiguration 264A01:2021主动Web/REST/SOAP
20017Source Code Disclosure - CVE-2012-1823 20A06:2021主动Web/REST/SOAP
20018Remote Code Execution - CVE-2012-1823 20A06:2021主动Web/REST/SOAP
20019External Redirect 601A03:2021主动Web/REST
30001Buffer Overflow 120A03:2021主动Web/REST/SOAP
30002Format String Error 134A03:2021主动Web/REST/SOAP
30003Integer Overflow Error 190A03:2021主动Web/REST
40003CRLF Injection 113A03:2021主动Web/REST
40008Parameter Tampering 472A04:2021主动Web/REST/SOAP
40009Server Side Include 97A03:2021主动Web/REST
40012Cross Site Scripting (Reflected) 79A03:2021主动Web/REST
40013Session Fixation 384A01:2021主动Web/REST/SOAP
40014Cross Site Scripting (Persistent) 79A03:2021主动Web/REST
40015LDAP Injection 90A03:2021主动Web/REST/SOAP
40016Cross Site Scripting (Persistent) - Prime 79未指定信息主动Web/REST
40017Cross Site Scripting (Persistent) - Spider 79未指定信息主动Web/REST
40018SQL Injection 89A03:2021主动Web/REST/SOAP
40025Proxy Disclosure 200A05:2021主动Web/REST/SOAP
40028ELMAH Information Leak 215A05:2021主动Web/REST/SOAP
40029Trace.axd Information Leak 215A05:2021主动Web/REST/SOAP
40031Out of Band XSS79A03:2021主动Web/REST
40032.htaccess Information Leak 215A05:2021主动Web/REST/SOAP
40034.env Information Leak 215A05:2021主动Web/REST/SOAP
40035Hidden File Finder 538A05:2021主动Web/REST/SOAP
40038Bypassing 403 未指定A01:2021主动Web/REST/SOAP
40039Web Cache Deception 未指定A05:2021主动Web/REST/SOAP
40040CORS Header 942A01:2021高、中、信息主动Web/REST
40042Spring Actuator Information Leak215A01:2021主动Web/REST/SOAP
40044Exponential Entity Expansion (Billion Laughs Attack)776A04:2021主动Web/REST/SOAP
40045Spring4Shell78A03:2021, A06:2021主动Web/REST/SOAP
90001Insecure JSF ViewState 642A04:2021被动Web/REST/SOAP
90002Java Serialization Object 502A04:2021被动Web/REST/SOAP
90003Sub Resource Integrity Attribute Missing 345A05:2021被动Web/REST/SOAP
90004Insufficient Site Isolation Against Spectre Vulnerability 693A04:2021被动Web/REST/SOAP
90011Charset Mismatch 436未指定信息被动Web/REST/SOAP
90017XSLT Injection 91A03:2021主动Web/REST/SOAP
90019Server Side Code Injection 94A03:2021主动Web/REST/SOAP
90020Remote OS Command Injection 78A03:2021主动Web/REST/SOAP
90021XPath Injection 643A03:2021主动Web/REST/SOAP
90022Application Error Disclosure 200A05:2021被动Web/REST/SOAP
90023XML External Entity Attack 611A03:2021主动Web/REST/SOAP
90024Generic Padding Oracle 209A02:2021主动Web/REST/SOAP
90025Expression Language Injection917A03:2021主动Web
90028Insecure HTTP Method 200A05:2021主动Web/REST/SOAP
90030WSDL File Detection 未指定A05:2021信息被动Web/REST/SOAP
90033Loosely Scoped Cookie 565A08:2021信息被动Web/REST/SOAP
90034Cloud Metadata Potentially Exposed 未指定A05:2021主动Web/REST/SOAP
90035Server Side Template Injection94未指定主动Web/REST
90036Server Side Template Injection (Blind)74未指定主动Web/REST
110001Application Error Disclosure via WebSockets 209未指定被动Web/REST/SOAP
110002Base64 Disclosure in WebSocket message 未指定未指定信息被动Web/REST/SOAP
110003Information Disclosure - Debug Error Messages via WebSocket 200未指定被动Web/REST/SOAP
110004Email address found in WebSocket message 200未指定信息被动Web/REST/SOAP
110005Personally Identifiable Information via WebSocket 359未指定被动Web/REST/SOAP
110006Private IP Disclosure via WebSocket 未指定未指定被动Web/REST/SOAP
110007Username Hash Found in WebSocket message 284未指定信息被动Web/REST/SOAP
110008Information Disclosure - Suspicious Comments in XML via WebSocket 200未指定信息被动Web/REST/SOAP
111001HTTP Verb Tampering (Parasoft proprietary rule)287A07:2021主动Web/REST

与 Burp Suite 集成

SOAtest 使用预先配置的内部 OWASP ZAP 实例来执行渗透测试。您还可以通过 Burp Suite Extension 使用商业工具 Burp Suite 进行渗透测试。



  • No labels