为 GitHub 和 Azure DevOps 配置 GitHub Advanced Security
GitHub Advanced Security 是 GitHub 提供的一套安全特性和功能,可帮助组织识别和缓解安全漏洞、保护其代码并保护其软件供应链。 它由以下关键组件组成:
- 代码扫描使用 CodeQL 或第三方工具提供的静态分析技术自动扫描存储库中的代码是否存在安全漏洞和编码错误。 它可以识别潜在的安全漏洞,包括与过时的依赖项和弱密码相关的漏洞。
- 机密扫描检测并帮助修正机密的存在状态,例如存储库和提交中的 API 令牌和加密密钥。 它自动扫描存储库的内容并根据其发现结果生成警报。
- 依赖项评审根据从包清单和其他配置文件中检索到的直接依赖项和传递依赖项,帮助识别和管理软件项目中的依赖项。 它们允许在合并拉取请求之前评估依赖项更改的整体影响,包括任何有漏洞版本的详细信息。
- 自定义自动会审规则可帮助你大规模管理 Dependabot 警报。 通过自定义自动会审规则,可以控制哪些警报可忽略,以及哪些警报需要应用安全更新。
- 安全建议提供有关在开源依赖项中发现的漏洞的特选安全建议和警报。
GitHub Advanced Security 原生与 GitHub 和 Azure DevOps 集成。
GitHub
GitHub 根据 Advanced Security 许可在专用存储库中提供其 Advanced Security 功能。 为组织购买 GitHub Advanced Security 许可后,可以在组织或存储库级别启用和禁用这些功能。 这些功能也会在 GitHub.com 上的公共存储库中永久启用,无需满足任何许可先决条件,仅当更改项目可见性时才能禁用。
若要为组织配置 GitHub Advanced Security,请在 GitHub.com 的右上角选择你的个人资料图标,然后选择你的组织。 接下来,选择“设置”,然后在侧边栏的“安全性”部分选择“代码安全性和分析”。 随后会显示允许启用或禁用组织中存储库的所有安全和分析功能的页面。
配置更改的影响取决于组织中存储库的可见性:
- 专用漏洞报告 - 仅限公共存储库。
- 依赖项关系图 - 仅适用于专用存储库,因为公共存储库始终启用该功能。
- Dependabot 警报 - 所有存储库。
- Dependabot 安全更新 - 所有存储库。
- GitHub Advanced Security - 仅适用于专用存储库,因为 GitHub Advanced Security 和相关功能始终对公共存储库启用。
- 机密扫描 - 启用了 GitHub Advanced Security 的公共和专用存储库。 此选项控制是否启用针对用户的机密扫描警报。
- 代码扫描 - 启用了 GitHub Advanced Security 的公共和专用存储库。
你还可以管理各个专用存储库的安全和分析功能。 为此,请从 GitHub.com 导航到存储库的主页,然后选择“设置”。 在边栏的“安全性”部分,选择“代码安全和分析”。 在“代码安全和分析”窗格中,禁用或启用各项功能。 如果你的企业尚未购买所需的许可证,则会禁用 GitHub Advanced Security 的控制。
请注意,如果禁用 GitHub Advanced Security,则会实际禁用依赖项评审、针对用户的机密扫描警报和代码扫描。 因此,任何包含代码扫描的工作流都将失败。
启用后,安全功能将直接集成到 GitHub 平台中,并直接在 GitHub 界面内提供持续的安全监视和警报。 存储库管理员和开发人员可以访问安全见解、建议和可行步骤,以解决已识别的安全漏洞并强化其软件项目的整体安全状况。 此外,组织可以自定义安全策略、配置自动化工作流,并将 GitHub Advanced Security 与其他安全工具和服务集成,以满足其特定的安全要求与合规性需求。
Azure DevOps
适用于 Azure DevOps 的 GitHub Advanced Security 以 Azure Repos 为目标,包括:
- 机密扫描推送保护检查代码推送是否包含公开机密的提交。
- 机密扫描存储库扫描搜索存储库中公开的机密。
- 依赖项扫描识别开源依赖项中的直接漏洞和传递漏洞。
- 代码扫描使用 CodeQL 静态分析来识别代码级应用程序漏洞,例如 SQL 注入和身份验证绕过。
可以在组织、项目或存储库级别启用 Advanced Security。 这会自动启用机密扫描推送保护和存储库扫描。 实际上,当机密扫描在后台运行时,会自动阻止任何将来包含机密的推送。
依赖项扫描是一种基于管道的扫描工具。 结果按存储库聚合。 建议将依赖项扫描任务添加到想要扫描的所有管道。 为了获得最准确的扫描结果,请确保按照生成想要扫描的代码的管道生成步骤添加依赖项扫描任务。 可以将 Advanced Security 依赖项扫描任务 (AdvancedSecurity-Dependency-Scanning@1) 直接添加到 YAML 管道文件中,或从任务助手中选择它。
代码扫描也是一种基于管道的扫描工具,其中结果按存储库聚合。 这往往是一个耗时的生成任务,因此请考虑将代码扫描任务添加到主生产管道的单独克隆管道中,或创建新的管道。 在管道中,按以下顺序添加任务:
- Advanced Security 初始化 CodeQL (AdvancedSecurity-Codeql-Init@1)
- 你的自定义生成步骤
- Advanced Security 执行 CodeQL 分析 (AdvancedSecurity-Codeql-Analyze@1)
此外,还需要使用 Advanced Security 初始化 CodeQL 任务来包含要分析的语言的逗号分隔列表。 支持的语言包括 csharp、cpp、go、java、JavaScript、python、ruby 和 swift。