Skip to main content

使用 GitHub Copilot 减少公司的安全债务

了解功能、赋能开发人员并衡量 Copilot 的影响。

谁可以使用此功能?

GitHub Copilot Business or GitHub Copilot Enterprise

本指南的灵感来自 GitHub 的工程系统成功 playbook (ESSP),其中推荐了推动工程系统改进的策略和指标。

如果你要启动 Copilot 的推出,我们建议定义目标、相应地规划推出,并向员工明确传达目标。 请参阅“使用 GitHub Copilot 实现公司工程目标”。

1.确定阻碍成功的因素

ESSP 建议的第一步是充分了解阻碍公司取得进步的障碍。 通过了解当前的基线、所需的未来状态以及阻碍进步的障碍,可确保更改具有针对性且有效。

当开发团队努力交付新功能并确保应用程序顺畅运行时,他们的重点往往在速度和功能上。 但是,随着时间的推移,小问题可能会累积,例如:

  • 已知但未修复的安全漏洞
  • 对存在潜在缺陷的旧软件组件的依赖
  • 发现问题后未及时解决问题

对于许多组织来说,这些未解决的安全问题和过时组件的累积会形成大量积压问题,这称为“安全债务”。****

安全债务会带来真正的风险。 它未得到解决的时间越长,规模就越大,解决的成本就越高。 巨额的安全债务会使系统容易受到攻击、导致敏感数据暴露,最终损害客户信任并影响企业盈利。

挑战在于平衡快速开发的需求与维护安全稳定的软件环境这一关键责任。

2.评估你的选项

下一步是评估并商定解决方案,以解决在第一步中确定的障碍。 在本指南中,我们将重点关注 GitHub Copilot 对已确定目标的影响。 请记住,新工具的成功推出还需要文化和流程的变更。

你将与试点小组一起试用新工具和流程,以收集反馈并衡量成功与否。 有关试用期间使用的培训资源和指标,可提前查看 3.实施变更要监视的指标部分。

注册 Copilot

Copilot 如何提供帮助

GitHub Copilot 通过将安全考量直接集成到开发生命周期中来帮助缓解安全债务。 它的功能可帮助开发人员更轻松地主动识别和解决潜在漏洞,同时确保其项目保持最新状态。

Copilot 可帮助在整个软件开发生命周期内减少安全漏洞。

在开发期间

Copilot 在代码编写时主动审查代码,利用它对常见安全漏洞和模式的理解来标记可能容易被利用的区域。 这种实时分析能够发现在标准开发或初始安全审查期间可能被遗漏的隐蔽漏洞。

确定问题时,Copilot 可以立即建议可操作的代码更改来修正漏洞,使开发人员能够在开发周期的早期解决薄弱之处,并防止安全债务累积。

持续维护

Copilot 与 GitHub 的代码扫描功能集成,确保现有代码库安全。 当代码扫描识别到潜在的安全警报时,Copilot Autofix 可以智能地分析漏洞,并提供针对性的上下文特定建议来解决该漏洞。

这些具体的修复建议简化了修正,从而减少开发人员调查漏洞和弄清解决方案所花费的时间。 因此,安全警报得以更高效地解决,且更不易积压或导致持续的安全债务。

文化考量

在推出 GitHub Copilot 的同时,还应解决任何可能阻碍目标实现的社会或文化因素。

以下示例取自 ESSP 中的“反模式”部分。

  • 团队可能会忽视或拖延处理安全债务,导致低效且易受攻击的系统持续存在。**** 这可能是由于截止期限迫使聚焦于功能,或是对安全债务的长期影响缺乏认知所致。
  • 团队可能会针对简单问题构建过于复杂的解决方案,导致代码难以维护,且使安全问题更难检测。**** 这可能是由于不必要的追求“面向未来”,或是为通过复杂性来增加价值而承受的压力所致。

3.在生产中

确定克服障碍的正确方法后,可缩放已确定的解决方案。 要成功推出新工具或新流程,请务必为推出的每个部分指定负责人、就目标进行透明沟通、提供有效的培训并衡量成果。

本部分为开发人员提供了示例场景、最佳做法和资源。 我们建议使用本部分来规划沟通和培训课程,以帮助员工以符合目标的方式使用 Copilot。****

分析代码是否存在安全漏洞

根据代码库的大小,由于上下文限制,Copilot 可能无法在开发人员编写代码时分析整个项目。 不过,开发人员可要求 Copilot 分析特定文件是否采用了不安全的代码实践。

  1. 在 Visual Studio Code 中打开文件进行分析。

  2. 在 Copilot 对话助手 中,询问:Analyze this code for potential security vulnerabilities and suggest fixes

    还可以使用 #file 聊天变量专门在提示中包含文件的内容,或者使用提示文件和自定义说明来指导 Copilot 的响应。

  3. Copilot 对话助手 将分析代码、识别安全漏洞,并推荐相应的修补程序。

  4. 查看建议的更改,并根据需要应用这些更改。

其他提示示例包括:

  • Are there any security vulnerabilities in my code? If so, can you explain them and suggest fixes?
  • Does this code follow secure code best practices? If not, what specific improvements can I make?
  • What are the potential security risks in this code if it were deployed to production? How can I mitigate them?

使用 Copilot Autofix 处理 code scanning 警报

Copilot Autofix 是 GitHub Code Security 的组件,可针对 code scanning 警报推荐潜在的修补程序。 Copilot Autofix 可用于公共存储库和具有 GitHub Code Security 许可证的存储库。

有人在存储库上运行代码扫描时,潜在问题会作为 code scanning 警报在存储库中引发。 开发人员可按照以下流程解决警报:

  1. 在 GitHub 上打开警报。
  2. 单击“Generate fix”,如果 Copilot 可解决警报,会显示该按钮。****
  3. Copilot Autofix 将为此警报生成潜在修补程序,在警报本身显示代码更改。 然后,它提供将此代码更改提交到新分支或现有分支的选项。
  4. 此时,可以测试代码,然后打开拉取请求,将更改移动到主分支。
  5. 将更改移动到主分支,并且 code scanning 验证警报已修复后,警报将自动关闭。

适用于开发人员的最佳做法

开发人员应该:****

  • 定期使用 Copilot 对话助手 分析代码片段是否存在漏洞:养成在提交更改前主动检查代码是否存在安全问题的习惯。
  • 利用 Copilot Autofix 处理 code scanning 警报:出现警报时,第一步是使用 Copilot Autofix 来快速解决这些警报。
  • 向 Copilot 对话助手 提供清晰具体的提示:请求的细节越多,Copilot 越能更好地分析代码并推荐相关修补程序。 例如,在提示中包含编程语言和关注的特定方面。
  • 将 Copilot 与现有安全工具结合使用:将 Copilot 用作安全分析的补充手段,而不是替代专用的安全扫描程序和实践。

开发人员不得:****

  • 自动接受 Copilot 的安全建议:始终审查和测试 Copilot 建议的代码更改,确保这些更改适当且有效。
  • 仅依赖 Copilot 进行全面的安全审核:Copilot 是一款有用的工具,但它不应取代彻底的安全审查和渗透测试。
  • 忽略 code scanning 警报:立即解决所有警报(即使它们看似微小),防止安全债务累积。
  • 将 Copilot 作为逃避学习安全编码实践的借口:持续向自己和团队解决安全最佳做法。
  • 假设 Copilot 将捕获每个漏洞:安全是一个持续的过程,始终需要保持警惕。
  • 使用 Copilot 绕过安全策略:遵守组织的安全协议,并使用 Copilot 作为增强它们的工具,而非规避协议的工具。

面向开发人员的资源

要监视的指标

若要评估新工具的试用情况,并确保全面推出后提供一致的改进,应监视结果并在需要时进行调整。 一般来说,建议考虑质量、速度和开发人员满意度这三大关键领域,并评估这些领域如何协同作用,共同推动业务成果的实现。****

下面是为评估 Copilot 对该特定目标的影响而建议查看的一些指标。

  • 安全债务比率:在安全概览中查看警报数量是否随时间减少。
  • 修正安全问题的时间:在安全概览中查看修正安全问题的时间是否随时间而缩短。

请参阅“评估代码安全风险”。