本主题介绍如何使用 Parasoft SOAtest 执行渗透测试。
渗透测试对于发现应用程序中的安全漏洞而言至关重要。使用 Parasoft SOAtest,您可以利用现有的 API 功能测试场景创建安全测试,将渗透测试添加到您的自动化 CI 流程中。
SOAtest 支持可通过 HTTP 或 HTTPS 访问的 REST 与 SOAP API 的渗透测试。
进行渗透测试,首先要有包含需进行渗透测试的 API 的功能测试场景,然后需要为渗透测试配置场景。可以利用现有的功能测试场景并将其转化用于渗透测试,也可以创建仅用于渗透测试的自定义简化测试方案。
将功能测试重新用作安全测试具有以下优点:
配置渗透测试场景的一般工作流程如下:
针对测试客户端(如 SOAP 客户端、REST 客户端、EDI 客户端或消息传送客户端),将渗透测试工具添加到执行需要进行渗透测试的 API 调用的通讯报文对象输出中。
针对浏览器回放工具,将渗透测试工具添加到需要进行渗透测试的 HTTP 通讯报文或浏览器内容输出中。当该工具被链接到一个 HTTP 通讯报文输出时,该工具只攻击该通讯报文信息所描述的请求。当该工具被链接到浏览器内容时,它会攻击浏览器回放工具发出的所有请求。除非在 Parasoft> 首选项> 浏览器设置中启用,否则默认忽略二进制文件(请参阅其他首选项设置 )。
渗透测试需要已启用 API 安全测试许可证功能的用户许可证。
就其本质而言,渗透测试通过模拟恶意用户活动来发现被测应用程序(AUT)中的安全漏洞。因此,渗透测试可能会对 AUT 或运行 AUT 或 SOAtest 的系统造成以下影响:
遵循最佳实践可帮助您在执行渗透测试时减少可能导致的此类问题和其他潜在问题。 |
要运行渗透测试场景,请按照执行功能测试中的说明执行。
由于渗透测试的运行时间较长(即使针对单个 API 也是如此),因此渗透测试工具内置了超时功能,可控制工具运行多长时间后才转到下一个测试。该超时时间与运行测试的测试配置中所设定的超时时间一致。如果在当前 API 的渗透测试完成前超时,则该 API 的渗透测试将被中断并报告错误。
此外,您还可以设置全局包含项与排除项(添加为正则表达式),以控制渗透测试工具扫描的 URL。包含项在排除项之前处理。如果没有定义包含项,则在考虑排除项之前,假定所有内容都包含在测试范围内。无论渗透测试工具链接到哪个工具中,都会应用包含项和排除项。
如需更改超时和/或包含项与排除项,请前往 Parasoft > 测试配置,然后选择相应测试配置,前往执行 > 安全性。
运行渗透测试场景时,控制台视图中会显示与正在扫描的内容相关的信息。在控制台中启用高详细信息级别能够帮助您获取更多细节,例如哪些 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 扫描策略:
您可以使用位于 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 的主目录可能位于以下位置之一:
C:\Users\<username>\OWASP ZAP
~/.ZAP
~/Library/Application Support/ZAP
启动独立的 ZAP 时,存储在这些目录中的安装用户设置可能会与嵌入式 SOAtest ZAP 发生冲突。因此,您应该使用 -dir
命令行参数通过自定义 ZAP 主目录启动嵌入式 SOAtest ZAP。使用命令提示符导航到 SOAtest ZAP 安装目录,并通过自定义 ZAP 主目录启动嵌入式 SOAtest ZAP:
zap -dir C:\Users\your_name\ZAP_SOATEST
./zap.sh -dir ~/.ZAP_SOATEST
./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)
该文件夹包含以下主动策略文件:
一旦修改了这些策略中的任一策略,便会在下次调用渗透测试工具时使用。
ID | 规则 | CWE ID | OWASP | 风险 | 类型 | 配置文件 |
---|---|---|---|---|---|---|
0 | Directory Browsing | 548 | A01:2021 | 中 | 主动 | Web/REST/SOAP |
2 | Private IP Disclosure | 200 | A01:2021 | 低 | 被动 | Web/REST/SOAP |
3 | Session ID in URL Rewrite | 200 | A01:2021 | 中 | 被动 | Web/REST/SOAP |
6 | Path Traversal | 22 | A03:2021 | 高 | 主动 | Web/REST/SOAP |
7 | Remote File Inclusion | 98 | A03:2021 | 高 | 主动 | Web/REST |
41 | Source Code Disclosure - Git | 541 | A05:2021 | 高 | 主动 | Web/REST/SOAP |
42 | Source Code Disclosure - SVN | 541 | A05:2021 | 中 | 主动 | Web/REST/SOAP |
43 | Source Code Disclosure - File Inclusion | 541 | A05:2021 | 高 | 主动 | Web/REST/SOAP |
10003 | Vulnerable JS Library | 829 | A06:2021 | 中 | 被动 | Web/REST/SOAP |
10009 | In Page Banner Information Leak | 200 | A05:2021 | 低 | 被动 | Web/REST/SOAP |
10010 | Cookie No HttpOnly Flag | 1004 | A05:2021 | 低 | 被动 | Web/REST/SOAP |
10011 | Cookie Without Secure Flag | 614 | A05:2021 | 低 | 被动 | Web/REST/SOAP |
10015 | Incomplete or No Cache-control Header Set | 525 | 未指定 | 低 | 被动 | Web/REST |
10017 | Cross-Domain JavaScript Source File Inclusion | 829 | A08:2021 | 低 | 被动 | Web/REST/SOAP |
10019 | Content-Type Header Missing | 345 | A05:2021 | 信息 | 被动 | Web/REST/SOAP |
10020 | Anti-clickjacking Header | 1021 | 未指定 | 中 | 被动 | Web/REST/SOAP |
10021 | X-Content-Type-Options Header Missing | 693 | A05:2021 | 低 | 被动 | Web/REST |
10023 | Information Disclosure - Debug Error Messages | 200 | A01:2021 | 低 | 被动 | Web/REST/SOAP |
10024 | Information Disclosure - Sensitive Information in URL | 200 | A01:2021 | 信息 | 被动 | Web/REST/SOAP |
10025 | Information Disclosure - Sensitive Information in HTTP Referrer Header | 200 | A01:2021 | 信息 | 被动 | Web/REST/SOAP |
10026 | HTTP Parameter Override | 20 | A04:2021 | 中 | 被动 | Web/REST/SOAP |
10027 | Information Disclosure - Suspicious Comments | 200 | A01:2021 | 信息 | 被动 | Web/REST/SOAP |
10028 | Open Redirect | 601 | A03:2021 | 高 | 被动 | Web/REST/SOAP |
10029 | Cookie Poisoning | 20 | A03:2021 | 信息 | 被动 | Web/REST/SOAP |
10030 | User Controllable Charset | 20 | A03:2021 | 信息 | 被动 | Web/REST/SOAP |
10031 | User Controllable HTML Element Attribute (Potential XSS) | 20 | A03:2021 | 信息 | 被动 | Web/REST/SOAP |
10032 | Viewstate | 642 | 未指定 | 高、中、低、信息 | 被动 | Web/REST/SOAP |
10033 | Directory Browsing | 548 | A01:2021 | 中 | 被动 | Web/REST/SOAP |
10034 | Heartbleed OpenSSL Vulnerability (Indicative) | 119 | A09:2021 | 高 | 被动 | Web/REST/SOAP |
10035 | Strict-Transport-Security Header | 319 | A05:2021 | 低、信息 | 被动 | Web/REST/SOAP |
10036 | HTTP Server Response Header | 200 | A05:2021 | 低、信息 | 被动 | Web/REST/SOAP |
10037 | Server Leaks Information via 'X-Powered-By' HTTP Response Header Field(s) | 200 | A01:2021 | 低 | 被动 | Web/REST/SOAP |
10038 | Content Security Policy (CSP) Header Not Set | 693 | A05:2021 | 中、信息 | 被动 | Web/REST/SOAP |
10039 | X-Backend-Server Header Information Leak | 200 | A05:2021 | 低 | 被动 | Web/REST/SOAP |
10040 | Secure Pages Include Mixed Content | 311 | A05:2021 | 中、低 | 被动 | Web/REST/SOAP |
10041 | HTTP to HTTPS Insecure Transition in Form Post | 319 | A02:2021 | 中 | 被动 | Web/REST/SOAP |
10042 | HTTPS to HTTP Insecure Transition in Form Post | 319 | A02:2021 | 中 | 被动 | Web/REST/SOAP |
10043 | User Controllable JavaScript Event (XSS) | 20 | A03:2021 | 信息 | 被动 | Web/REST/SOAP |
10044 | Big Redirect Detected (Potential Sensitive Information Leak) | 201 | A04:2021 | 低 | 被动 | Web/REST/SOAP |
10045 | Source Code Disclosure - /WEB-INF folder | 541 | A05:2021 | 高 | 主动 | Web/REST/SOAP |
10047 | HTTPS Content Available via HTTP | 311 | A05:2021 | 低 | 主动 | Web/REST/SOAP |
10048 | Remote Code Execution - Shell Shock | 78 | A09:2021 | 高 | 主动 | Web/REST/SOAP |
10049 | Content Cacheability | 524 | 未指定 | 信息 | 被动 | Web/REST |
10050 | Retrieved from Cache | 未指定 | 未指定 | 信息 | 被动 | Web/REST/SOAP |
10051 | Relative Path Confusion | 20 | A05:2021 | 中 | 主动 | Web |
10052 | X-ChromeLogger-Data (XCOLD) Header Information Leak | 200 | A04:2021 | 中 | 被动 | Web/REST/SOAP |
10054 | Cookie without SameSite Attribute | 1275 | A01:2021 | 低 | 被动 | Web/REST/SOAP |
10055 | CSP | 693 | A05:2021 | 中、低、信息 | 被动 | Web/REST/SOAP |
10056 | X-Debug-Token Information Leak | 200 | A01:2021 | 低 | 被动 | Web/REST/SOAP |
10057 | Username Hash Found | 284 | A01:2021 | 信息 | 被动 | Web/REST/SOAP |
10061 | X-AspNet-Version Response Header | 933 | A05:2021 | 低 | 被动 | Web/REST/SOAP |
10062 | PII Disclosure | 359 | A04:2021 | 高 | 被动 | Web/REST/SOAP |
10063 | Permissions Policy Header Not Set | 16 | A01:2021 | 低 | 被动 | Web/REST/SOAP |
10070 | Use of SAML | 未指定 | 未指定 | 信息 | 被动 | Web/REST/SOAP |
10094 | Base64 Disclosure | 200 | A04:2021 | 高、信息 | 被动 | Web/REST/SOAP |
10095 | Backup File Disclosure | 530 | A04:2021 | 中 | 主动 | Web/REST/SOAP |
10096 | Timestamp Disclosure | 200 | A01:2021 | 信息 | 被动 | Web/REST/SOAP |
10097 | Hash Disclosure | 200 | A04:2021 | 高、低 | 被动 | Web/REST/SOAP |
10098 | Cross-Domain Misconfiguration | 264 | A01:2021 | 中 | 被动 | Web/REST/SOAP |
10099 | Source Code Disclosure | 540 | A05:2021 | 中 | 被动 | Web/REST/SOAP |
10103 | Image Location and Privacy Scanner | 200 | 未指定 | 信息 | 被动 | Web/REST/SOAP |
10105 | Weak Authentication Method | 287 | A01:2021 | 高、中 | 被动 | Web/REST/SOAP |
10106 | HTTP Only Site | 311 | A05:2021 | 中 | 主动 | Web/REST/SOAP |
10107 | Httpoxy - Proxy Header Misuse | 20 | A06:2021 | 高 | 主动 | Web/REST/SOAP |
10108 | Reverse Tabnabbing | 未指定 | A04:2021 | 中 | 被动 | Web/REST/SOAP |
10109 | Modern Web Application | 未指定 | 未指定 | 信息 | 被动 | Web/REST/SOAP |
10110 | Dangerous JS Functions | 749 | A04:2021 | 低 | 被动 | Web/REST/SOAP |
10202 | Absence of Anti-CSRF Tokens | 352 | A01:2021 | 低、信息 | 被动 | Web/REST/SOAP |
20012 | Anti-CSRF Tokens Check | 352 | A05:2021 | 高 | 主动 | Web |
20015 | Heartbleed OpenSSL Vulnerability | 119 | A06:2021 | 高 | 主动 | Web/REST/SOAP |
20016 | Cross-Domain Misconfiguration | 264 | A01:2021 | 高 | 主动 | Web/REST/SOAP |
20017 | Source Code Disclosure - CVE-2012-1823 | 20 | A06:2021 | 高 | 主动 | Web/REST/SOAP |
20018 | Remote Code Execution - CVE-2012-1823 | 20 | A06:2021 | 高 | 主动 | Web/REST/SOAP |
20019 | External Redirect | 601 | A03:2021 | 高 | 主动 | Web/REST |
30001 | Buffer Overflow | 120 | A03:2021 | 中 | 主动 | Web/REST/SOAP |
30002 | Format String Error | 134 | A03:2021 | 中 | 主动 | Web/REST/SOAP |
30003 | Integer Overflow Error | 190 | A03:2021 | 中 | 主动 | Web/REST |
40003 | CRLF Injection | 113 | A03:2021 | 中 | 主动 | Web/REST |
40008 | Parameter Tampering | 472 | A04:2021 | 中 | 主动 | Web/REST/SOAP |
40009 | Server Side Include | 97 | A03:2021 | 高 | 主动 | Web/REST |
40012 | Cross Site Scripting (Reflected) | 79 | A03:2021 | 高 | 主动 | Web/REST |
40013 | Session Fixation | 384 | A01:2021 | 高 | 主动 | Web/REST/SOAP |
40014 | Cross Site Scripting (Persistent) | 79 | A03:2021 | 高 | 主动 | Web/REST |
40015 | LDAP Injection | 90 | A03:2021 | 高 | 主动 | Web/REST/SOAP |
40016 | Cross Site Scripting (Persistent) - Prime | 79 | 未指定 | 信息 | 主动 | Web/REST |
40017 | Cross Site Scripting (Persistent) - Spider | 79 | 未指定 | 信息 | 主动 | Web/REST |
40018 | SQL Injection | 89 | A03:2021 | 高 | 主动 | Web/REST/SOAP |
40025 | Proxy Disclosure | 200 | A05:2021 | 中 | 主动 | Web/REST/SOAP |
40028 | ELMAH Information Leak | 215 | A05:2021 | 中 | 主动 | Web/REST/SOAP |
40029 | Trace.axd Information Leak | 215 | A05:2021 | 中 | 主动 | Web/REST/SOAP |
40031 | Out of Band XSS | 79 | A03:2021 | 高 | 主动 | Web/REST |
40032 | .htaccess Information Leak | 215 | A05:2021 | 中 | 主动 | Web/REST/SOAP |
40034 | .env Information Leak | 215 | A05:2021 | 中 | 主动 | Web/REST/SOAP |
40035 | Hidden File Finder | 538 | A05:2021 | 中 | 主动 | Web/REST/SOAP |
40038 | Bypassing 403 | 未指定 | A01:2021 | 中 | 主动 | Web/REST/SOAP |
40039 | Web Cache Deception | 未指定 | A05:2021 | 中 | 主动 | Web/REST/SOAP |
40040 | CORS Header | 942 | A01:2021 | 高、中、信息 | 主动 | Web/REST |
40042 | Spring Actuator Information Leak | 215 | A01:2021 | 中 | 主动 | Web/REST/SOAP |
40044 | Exponential Entity Expansion (Billion Laughs Attack) | 776 | A04:2021 | 中 | 主动 | Web/REST/SOAP |
40045 | Spring4Shell | 78 | A03:2021, A06:2021 | 高 | 主动 | Web/REST/SOAP |
90001 | Insecure JSF ViewState | 642 | A04:2021 | 中 | 被动 | Web/REST/SOAP |
90002 | Java Serialization Object | 502 | A04:2021 | 中 | 被动 | Web/REST/SOAP |
90003 | Sub Resource Integrity Attribute Missing | 345 | A05:2021 | 中 | 被动 | Web/REST/SOAP |
90004 | Insufficient Site Isolation Against Spectre Vulnerability | 693 | A04:2021 | 低 | 被动 | Web/REST/SOAP |
90011 | Charset Mismatch | 436 | 未指定 | 信息 | 被动 | Web/REST/SOAP |
90017 | XSLT Injection | 91 | A03:2021 | 中 | 主动 | Web/REST/SOAP |
90019 | Server Side Code Injection | 94 | A03:2021 | 高 | 主动 | Web/REST/SOAP |
90020 | Remote OS Command Injection | 78 | A03:2021 | 高 | 主动 | Web/REST/SOAP |
90021 | XPath Injection | 643 | A03:2021 | 高 | 主动 | Web/REST/SOAP |
90022 | Application Error Disclosure | 200 | A05:2021 | 中 | 被动 | Web/REST/SOAP |
90023 | XML External Entity Attack | 611 | A03:2021 | 高 | 主动 | Web/REST/SOAP |
90024 | Generic Padding Oracle | 209 | A02:2021 | 高 | 主动 | Web/REST/SOAP |
90025 | Expression Language Injection | 917 | A03:2021 | 高 | 主动 | Web |
90028 | Insecure HTTP Method | 200 | A05:2021 | 中 | 主动 | Web/REST/SOAP |
90030 | WSDL File Detection | 未指定 | A05:2021 | 信息 | 被动 | Web/REST/SOAP |
90033 | Loosely Scoped Cookie | 565 | A08:2021 | 信息 | 被动 | Web/REST/SOAP |
90034 | Cloud Metadata Potentially Exposed | 未指定 | A05:2021 | 高 | 主动 | Web/REST/SOAP |
90035 | Server Side Template Injection | 94 | 未指定 | 高 | 主动 | Web/REST |
90036 | Server Side Template Injection (Blind) | 74 | 未指定 | 高 | 主动 | Web/REST |
110001 | Application Error Disclosure via WebSockets | 209 | 未指定 | 中 | 被动 | Web/REST/SOAP |
110002 | Base64 Disclosure in WebSocket message | 未指定 | 未指定 | 信息 | 被动 | Web/REST/SOAP |
110003 | Information Disclosure - Debug Error Messages via WebSocket | 200 | 未指定 | 低 | 被动 | Web/REST/SOAP |
110004 | Email address found in WebSocket message | 200 | 未指定 | 信息 | 被动 | Web/REST/SOAP |
110005 | Personally Identifiable Information via WebSocket | 359 | 未指定 | 高 | 被动 | Web/REST/SOAP |
110006 | Private IP Disclosure via WebSocket | 未指定 | 未指定 | 低 | 被动 | Web/REST/SOAP |
110007 | Username Hash Found in WebSocket message | 284 | 未指定 | 信息 | 被动 | Web/REST/SOAP |
110008 | Information Disclosure - Suspicious Comments in XML via WebSocket | 200 | 未指定 | 信息 | 被动 | Web/REST/SOAP |
111001 | HTTP Verb Tampering (Parasoft proprietary rule) | 287 | A07:2021 | 中 | 主动 | Web/REST |
SOAtest 使用预先配置的内部 OWASP ZAP 实例来执行渗透测试。您还可以通过 Burp Suite Extension 使用商业工具 Burp Suite 进行渗透测试。