你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

StackHawk 技术加入指南

StackHawk 使 API 和应用程序安全测试成为软件交付的一部分。 通过 StackHawk 平台,工程团队能够在软件开发的任何阶段查找和修复应用程序 bug,并让安全团队深入了解正在开发的应用程序和 API 的安全状况。

安全测试方法

StackHawk 是在 CI/CD 中运行的新式动态应用程序安全测试 (DAST) 和 API 安全测试工具,使开发人员能够在影响生产之前快速找到并修复安全问题。

StackHawk 的新式 DAST 方法强调安全左移,改变了组织当今开发和测试应用程序的方式。 帮助安全团队左移的下一个必要步骤是了解他们拥有哪些 API、这些 API 位于何处以及属于谁。 StackHawk 将生成式 AI 技术纳入其工具,用于发现 GitHub 存储库中代码的安全问题。 它可以识别源代码中的隐藏 API,并通过自然语言响应描述相关的问题。

支持

希望优先考虑应用程序安全性的 Microsoft 客户现在可以无缝使用 StackHawk。 StackHawk 平台交织分布在 Microsoft 生态系统中,使开发人员能够探索根据需求定制的多条路径,无论是通过 GitHub Actions 还是 Azure DevOps 来协调工作流。 将 Microsoft Defender for API 映射到 GitHub 或 ADO 存储库后,开发人员可以开启 SARIF 以利用 StackHawk 的高级安全工具。

开发人员可以激活免费试用版 StackHawk 并运行 Hawkscan,还能探索根据需求定制的多条路径,无论是通过 GitHub Actions 还是 Azure DevOps 来协调工作流。

将 DevOps 环境连接到 Microsoft Defender for Cloud

此功能需要将 DevOps 环境连接到 Defender for Cloud。

请参阅如何加入 GitHub 组织

请参阅如何加入 Azure DevOps 组织

配置 StackHawk API 安全测试扫描

对于 GitHub Actions (CI/CD) 环境

注意

此工作流假定你已启用 GitHub 代码扫描。 如果已启用,请确保“upload-to-code-scanning”选项设置为“true”。 如果未启用 GitHub 代码扫描,请按照“启用 Defender for Cloud 集成而不启用 GitHub 代码扫描”中的步骤操作

  1. 若要使用 StackHawk HawkScan Action,请确保你登录到 GitHub,并具有 StackHawk 帐户

  2. 在 GitHub 中,可以将 GitHub 存储库与规定的已经就绪的 GitHub Actions 工作流流程一起使用,也可以创建新的工作流。 在 GitHub Actions 工作流中,我们会扫描 GitHub 存储库有无 API 漏洞。

    注意

    理想情况下,应选择扫描与动态 Web API 相对应的 GitHub 存储库, 可以是 REST、GraphQL 或 gRPC API。 HawkScan 更适用于可发现的 API 规范文件(如 OpenAPI 规范)以及经过身份验证的扫描。 如果你自己没有要扫描的易受攻击的 Web API,StackHawk 会以 JavaSpringVulny 为例来提供易受攻击的 API,供你创建分支和进行尝试。

  3. 在 StackHawk 中,请确保已取得 API 密钥并已创建 StackHawk 应用程序,而且 stackhawk.yml 扫描配置已签入 GitHub 存储库

  4. 转到 StackHawk HawkScan Action,查看适用于 GitHub Actions CI/CD 的 StackHawk HawkScan Action 的详细信息。 在存储库 /settings/secrets/actions 页中,将 StackHawk API 密钥分配给 HAWK_API_KEY。 然后,若要将其添加到 GitHub Actions 工作流,请向你的生成中添加以下步骤:

    # Make sure your app.host web application is started and accessible before you scan.
    #  - name: Start Web Application
    #     run: docker run --rm --detach --publish 8080:80 --name my_web_app nginx
       - name: API Scan with StackHawk
          uses: stackhawk/hawkscan-action@v2.1.3
          with:
          apiKey: ${{ secrets.HAWK_API_KEY }}
          env:
             SARIF_ARTIFACT: true
    

    这将在指向 stackhawk.yml 中所定义的 app.host 的运行器上启动 HawkScan。 请务必包括 with.env.SARIF_ARTIFACT: true,以便从扫描中获取 SARIF 输出。 HawkScan Action 有更多已记录的配置输入。 可在此处查看所用操作的示例。

  5. 也可以按照以下步骤将 stackhawk/hawkscan-action 添加到新的工作流操作中

    1. 登录 GitHub。
    2. 选择要在为其配置 GitHub 操作的 GitHub 存储库。
    3. 选择“操作”。
    4. 选择“新建工作流”。
    5. 通过在搜索框中搜索 StackHawk HawkScan 进行筛选
    6. 选择 StackHawk 工作流对应的“配置”
    7. 在编辑器中修改示例工作流。 查看 GitHub Actions 文档
    8. 选择“提交更改”。 可以直接提交到主分支,也可以创建拉取请求。 我们建议通过创建 PR 来遵循 GitHub 最佳做法,因为针对主分支打开 PR 时会启动默认工作流。
    9. 选择“操作”并验证新操作是否正在运行。
    10. 工作流完成后,选择“安全性”,然后选择“代码扫描”以查看结果
    11. 选择 StackHawk 检测到的代码扫描警报。 还可以在“代码扫描”选项卡中按工具进行筛选。按 StackHawk 筛选
  6. 你现在已经验证 StackHawk 安全扫描结果是否显示在 GitHub 代码扫描中。 接下来,请验证这些扫描结果是否会显示在 Defender for Cloud 中。 结果最多可能需要 30 分钟才会显示在 Defender for Cloud 中。

在不使用 GitHub 代码扫描的情况下启用 Defender for Cloud 集成

如果没有适用于你的环境的 GitHub 代码扫描,并且希望将 StackHawk 的安全扫描结果集成到 Defender for Cloud 中,可以按照以下步骤操作。 在 StackHawk 工作流步骤中添加后,将以下步骤添加到 GitHub 工作流,以便使用 Microsoft 安全 DevOps GitHub 操作将扫描结果直接发送到 Defender for Cloud。

- name: Upload SARIF file
        uses: actions/upload-artifact@v4
        with:
          name: StackHawk_Report_${{ github.run_id }}
          path: stackhawk.sarif
          if-no-files-found: error
- name: Upload results to MSDO
        uses: microsoft/security-devops-action@v1
        id: msdo
        with:
          existingFilename: stackhawk.sarif

接下来,向工作流添加其他权限,将 id 令牌 设置为“写入”

运行工作流后,结果最多可能需要 30 分钟才会显示在 Defender for Cloud 中。

  1. 选择“建议”。
  2. 通过搜索 API 安全测试进行筛选。
  3. 选择建议“GitHub 存储库应处理 API 安全测试结果”。

“GitHub 存储库应处理 API 安全测试结果”建议的屏幕截图。

对于 Azure Pipelines 环境

  1. 若要使用 StackHawk HawkScan 扩展,请确保你登录到 Azure Pipelines (https://dev.azure.com/{yourorganization}),并具有 StackHawk 帐户

  2. 在 Azure Pipelines 中,可以将规定的管道与规定的已经就绪的 azure-pipelines.yml 流程一起使用,也可以创建新的工作流。 在 azure-pipelines.yml 工作流中,我们会扫描此 Azure DevOps 存储库有无 API 漏洞

    安装和运行 HawkScan 的任务的屏幕截图。

  3. 将 HawkScan 扩展添加到 Azure DevOps 组织后,可以使用 HawkScanInstall 任务和 RunHawkScan 任务将 HawkScan 添加到运行器中,并以单独的步骤启动 HawkScan。

    - task: HawkScanInstall@1.2.8
       inputs:
       version: "3.7.0"
       installerType: "msi"
    
    # start your web application in the background
    # - script: |
    #    curl -Ls https://GitHub.com/kaakaww/javaspringvulny/releases/download/0.2.0/java-spring-vuly-0.2.0.jar -o ./java-spring-vuly-0.2.0.jar
    #    java -jar ./java-spring-vuly-0.2.0.jar &
    
    
    - task: RunHawkScan@1.2.8
       inputs:
       configFile: "stackhawk.yml"
       version: "3.7.0"
       env:
       HAWK_API_KEY: $(HAWK_API_KEY) # use variables in the azure devops ui to configure secrets and env vars
       APP_ENV: $(imageName)
       APP_ID: $(appId)
       SARIF_ARTIFACT: true
    

    这将在指向 stackhawk.yml 中所定义的 app.host 的运行器上安装 HawkScan。 请务必在任务规范上包括 env.SARIF_ARTIFACT: true,以便从扫描中获取 SARIF 输出。 HawkScan Action 有更多已记录的配置输入。 可在此处查看所用操作的示例。

  4. 在 Azure DevOps 组织中安装 HawkScan 扩展。

    1. 访问 StackHawk 网站并注册免费试用版
    2. 对于 Windows 开发人员,请参考此用于在 Windows 上生成软件的示例应用
    3. 查看 HawkScan 和 Azure Pipelines 文档
  5. 在 Azure DevOps 项目中创建新管道或克隆 StackHawk 的示例应用。 有关创建第一个管道的教程,请参阅创建第一个管道

  6. 运行管道。

  7. 若要验证结果是否在 Azure DevOps 中正确发布,请验证 stackhawk.sarif 是否会上传到 CodeAnalysisLogs 文件夹下的生成工件中

    已上传到生成工件的 stackhawk.sarif 的屏幕截图。

  8. 现已完成加入过程。 接下来请验证 Defender for Cloud 中显示的结果。

导航到 Defender for Cloud

  1. 选择“建议”。
  2. 通过搜索 API 安全测试进行筛选。
  3. 选择“Azure DevOps 存储库应处理 API 安全测试结果”建议

“Azure DevOps 存储库应处理 API 安全测试结果”建议的屏幕截图。

常见问题解答

StackHawk 如何获得许可?

StackHawk 基于在平台上预配的代码参与者的数量获得许可。 有关自定义定价、EULA 或专用合同,请联系 marketplace-orders@stackhawk.com

Microsoft Defender for API 概述