集成非Microsoft扫描工具

GitHub Azure DevOps 的高级安全性使用静态分析结果交换格式 (SARIF) 文件中的信息在存储库中创建代码扫描警报。 SARIF 文件属性用于填充警报信息,例如警报标题、位置和说明文本。

可以使用多个静态分析安全测试工具(包括 CodeQL)来生成 SARIF 文件。 结果必须使用 SARIF 版本 2.1.0。 有关 SARIF 的详细信息,请参阅 SARIF 教程

先决条件

类别 要求
权限 - 若要查看存储库的所有警报的摘要:存储库的 参与者 权限。
- 若要消除高级安全性中的警报: 项目管理员 权限。
- 若要管理高级安全性中的权限:需要成为 项目集合管理员 组的成员,或者将 高级安全性:管理设置 权限设置为 允许

有关高级安全权限的详细信息,请参阅 “管理高级安全”权限

使用 Azure Pipelines 上传代码扫描分析

若要使用 Azure Pipelines 将非Microsoft SARIF 文件上传到存储库,管道需要使用 AdvancedSecurity-Publish 任务,该任务是与 GitHub Advanced Security for Azure DevOps 捆绑的任务的一部分。 要使用的主要输入参数包括:

  • SarifsInputDirectory:配置要上传的 SARIF 文件的目录。 预期的目录路径是绝对路径。
  • Category:(可选)为 SARIF 文件中的结果分配类别。 通过此参数,可以通过多种方式分析同一提交,并使用 GitHub 中的代码扫描视图查看结果。 例如,您可以使用多个工具进行分析,在单存储库中,您可以根据已更改文件的子集分析存储库的不同片段。

以下代码演示了一个与 Microsoft Defender for Cloud 团队所拥有的 Microsoft Security DevOps 任务 的集成示例。

trigger:
- main

pool:
  vmImage: ubuntu-latest

steps:
- task: MicrosoftSecurityDevOps@1
  inputs:
    command: 'run'
    categories: 'IaC'
- task: AdvancedSecurity-Publish@1
  inputs:
    SarifsInputDirectory: '$(Build.ArtifactStagingDirectory)/.gdn/'

结果指纹生成

如果 SARIF 文件不包含 partialFingerprints,则 AdvancedSecurity-Publish 任务会为你计算 partialFingerprints 字段,并尝试阻止重复的警报。 仅当存储库包含 SARIF 文件和静态分析中使用的源代码时,才能创建 partialFingerprints 高级安全性。 有关防止重复警报的详细信息,请参阅 提供数据来跟踪跨运行的代码扫描警报。

验证工具结果

可以检查 SARIF 属性是否具有支持上传的大小,以及该文件是否与代码扫描兼容。 此外,每个 SARIF 文件中存在的数据对象存在特定限制:

SARIF 数据 限度 注意
每个文件的运行次数 20
每次运行的结果 5,000 高级安全性将检查安全字段在结果中是否为非空,然后排序以选取前 5,000 个结果。 否则,在结果到达时选择 5,000 个结果。
每次运行的规则数 没有 未来的单次运行限制为 25,000 条规则。
每次运行的工具扩展数 没有 每次运行的工具扩展将来的限制为 100 个。
每个结果的位置数 没有 高级安全将选取前100个结果。 警报接口将仅显示每个结果的第一个位置。
每个规则的标记数 没有 高级安全系统将选取前 10 个。
警报限制 没有  

有关排查 SARIF 文件问题的详细信息,请参阅 验证 SARIF 文件。 若要验证 SARIF 文件是否符合高级安全的要求,请参阅 SARIF 验证程序 并选择 Azure DevOps ingestion rules