前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 ZAP 扫描 API

使用 ZAP 扫描 API

原创
作者头像
Khan安全团队
发布2022-01-14 09:47:15
1.9K0
发布2022-01-14 09:47:15
举报
文章被收录于专栏:Khan安全团队

脚本 zap-api-scan.py 包含在Weekly和 Live ZAP Docker 镜像中,它也将包含在下一个 稳定镜像中。

要使用 API 扫描脚本,您只需使用以下命令:

代码语言:javascript
复制
docker pull owasp/zap2docker-weekly  
docker run -t owasp/zap2docker-weekly zap-api-scan.py -t \  
    https://www.example.com/openapi.json -f openapi  

默认情况下,脚本:

  1. 导入提供的 API 定义
  2. 使用针对 API 调整的自定义扫描配置文件主动扫描 API
  3. 向命令行报告发现的任何问题

如果没有报告任何问题,那么这并不意味着您的 API 是安全的。 如果您的 API 特别重要或敏感,那么在扫描之后进行手动渗透测试是明智的。您还应该测试使用 API 的应用程序,因为通过 API 返回的数据如果不能适当地转义最初通过用户输入的数据,仍然可以用来攻击应用程序。

命令行选项

该脚本有许多命令行选项,可以根据您的要求对其进行调整:

代码语言:javascript
复制
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 个作为脚本实现的附加规则:

  • Alert_on_HTTP_Response_Code_Errors.js
  • Alert_on_Unexpected_Content_Types.js

您可以使用配置文件更改运行哪些规则以及如何报告故障。这允许您调整扫描脚本以满足您对每个 API 的要求。 要生成配置文件,请使用“-g”选项。这将创建一个文件,其中包含所有可用的主动和被动扫描规则。有关详细信息,请参阅配置文件。您可以使用文本编辑器编辑此文件。 更改被动规则只会影响报告失败的方式,但将主动规则更改为 IGNORE 会阻止规则运行。这是为了减少整体扫描时间 - 被动规则非常快,而主动规则可能需要大量时间。

指定值

ZAP 将在导入 API 时使用一组默认值。在某些情况下,这些值对于特定应用程序来说不是合适的值,因此不会对代码进行足够的练习。例如,用户名“test”可能不会导致创建新用户,因为它不是有效的电子邮件地址。 对于使用 OpenAPI/Swagger 定义的 API,您可以通过 ZAP 命令行选项指定希望 ZAP 使用的值。 例如选项:

代码语言:javascript
复制
  -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 扫描:

代码语言:javascript
复制
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 使用它们。 例如选项:

代码语言:javascript
复制
  -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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 命令行选项
  • 扫描规则
  • 指定值
  • 验证
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档