脚本 zap-api-scan.py 包含在Weekly和 Live ZAP Docker 镜像中,它也将包含在下一个 稳定镜像中。
要使用 API 扫描脚本,您只需使用以下命令:
docker pull owasp/zap2docker-weekly
docker run -t owasp/zap2docker-weekly zap-api-scan.py -t \
https://www.example.com/openapi.json -f openapi
默认情况下,脚本:
如果没有报告任何问题,那么这并不意味着您的 API 是安全的。 如果您的 API 特别重要或敏感,那么在扫描之后进行手动渗透测试是明智的。您还应该测试使用 API 的应用程序,因为通过 API 返回的数据如果不能适当地转义最初通过用户输入的数据,仍然可以用来攻击应用程序。
该脚本有许多命令行选项,可以根据您的要求对其进行调整:
Usage: zap-api-scan.py -t <target> -f <format> [options]
-t target target API definition, OpenAPI or SOAP, local file or URL, e.g. https://www.example.com/openapi.json
-f format either openapi or soap
Options:
-c config_file config file to use to INFO, IGNORE or FAIL warnings
-u config_url URL of config file to use to INFO, IGNORE or FAIL warnings
-g gen_file generate default config file(all rules set to WARN)
-r report_html file to write the full ZAP HTML report
-w report_md file to write the full ZAP Wiki(Markdown) report
-x report_xml file to write the full ZAP XML report
-a include the alpha passive scan rules as well
-d show debug messages
-P specify listen port
-D delay in seconds to wait for passive scanning
-i default rules not in the config file to INFO
-l level minimum level to show: PASS, IGNORE, INFO, WARN or FAIL, use with -s to hide example URLs
-n context_file context file which will be loaded prior to scanning the target
-p progress_file progress file which specifies issues that are being addressed
-s short output format - don't show PASSes or example URLs
-z zap_options ZAP command line options e.g. -z "-config aaa=bbb -config ccc=ddd"
默认情况下,该脚本将使用针对 API 调整的扫描策略。 这将禁用专注于客户端(例如浏览器)问题的规则,例如用于检测跨站脚本的规则,并且还添加了 2 个作为脚本实现的附加规则:
您可以使用配置文件更改运行哪些规则以及如何报告故障。这允许您调整扫描脚本以满足您对每个 API 的要求。 要生成配置文件,请使用“-g”选项。这将创建一个文件,其中包含所有可用的主动和被动扫描规则。有关详细信息,请参阅配置文件。您可以使用文本编辑器编辑此文件。 更改被动规则只会影响报告失败的方式,但将主动规则更改为 IGNORE 会阻止规则运行。这是为了减少整体扫描时间 - 被动规则非常快,而主动规则可能需要大量时间。
ZAP 将在导入 API 时使用一组默认值。在某些情况下,这些值对于特定应用程序来说不是合适的值,因此不会对代码进行足够的练习。例如,用户名“test”可能不会导致创建新用户,因为它不是有效的电子邮件地址。 对于使用 OpenAPI/Swagger 定义的 API,您可以通过 ZAP 命令行选项指定希望 ZAP 使用的值。 例如选项:
-config formhandler.fields.field\\(0\\).fieldId=username \
-config formhandler.fields.field\\(0\\).value=test@example.com \
-config formhandler.fields.field\\(0\\).enabled=true \
-config formhandler.fields.field\\(1\\).fieldId=phone \
-config formhandler.fields.field\\(1\\).value=012345678 \
-config formhandler.fields.field\\(1\\).enabled=true
将为命名字段提供以下值:
username
-> test@example.com
phone
->012345678
还计划支持为使用 SOAP 定义的 API 指定值 - 如果您需要,请与 ZAP 开发团队联系,我们将尽最大努力优先考虑。
请注意,由于这些是 ZAP 命令行选项,您需要使用 -z 脚本选项将它们指定给脚本。 如果您需要指定很多选项,那么您可以将它们全部放在一个属性文件中,例如称为 options.prop 然后您可以使用如下命令运行 API 扫描:
docker run -v $(pwd):/zap/wrk/:rw -t owasp/zap2docker-weekly zap-api-scan.py \
-t https://www.example.com/openapi.json -f openapi \
-z "-configfile /zap/wrk/options.prop"
这"-v $(pwd):/zap/wrk/:rw"
是一个 Docker 选项,它将当前工作目录映射到 Docker 实例中名为 /zap/wrk 的文件夹。
您的某些 API 可能会使用身份验证机制进行保护。 对于使用标头值的机制,我们建议您使用任何适当的方式为您的应用程序获取合适的令牌,然后通过另一组命令行选项告诉 ZAP 使用它们。 例如选项:
-config replacer.full_list\\(0\\).description=auth1 \
-config replacer.full_list\\(0\\).enabled=true \
-config replacer.full_list\\(0\\).matchtype=REQ_HEADER \
-config replacer.full_list\\(0\\).matchstr=Authorization \
-config replacer.full_list\\(0\\).regex=false \
-config replacer.full_list\\(0\\).replacement=123456789 \
-config replacer.full_list\\(1\\).description=auth2 \
-config replacer.full_list\\(1\\).enabled=true \
-config replacer.full_list\\(1\\).matchtype=REQ_HEADER \
-config replacer.full_list\\(1\\).matchstr=AnotherHeader \
-config replacer.full_list\\(1\\).regex=false \
-config replacer.full_list\\(1\\).replacement=abcdefghi
将导致以下标头添加到 ZAP 发出的每个请求中:
Authorization: 123456789
AnotherHeader: abcdefghi
您可以使用递增索引指定任意数量的标头。
此功能由 ZAP 默认包含的Replacer插件提供。它非常强大,可以做的不仅仅是注入新的标头值,因此如果您需要以其他方式操作 ZAP 发出的请求,那么这对您来说可能是一个非常好的选择。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。