安全采用AI代码辅助的5个技巧

2024-06-17 10:03


在过去的数年中,生成式人工智能技术引发了广泛的关注和热潮,尤其是在软件开发领域。众多开发人员纷纷转向利用AI工具,如GitHub Copilot、Amazon CodeWhisperer和OpenAI的ChatGPT等,来辅助他们的编码工作。事实上,GitHub的数据显示,高达92%的开发人员都在使用AI编码工具。


然而,众多企业也意识到,在软件开发中运用人工智能时,必须保持高度的审慎。


生成式人工智能仍然存在着不准确和产生幻觉的风险,这可能会使组织面临新的安全威胁,如数据中毒和注入攻击等。


因此,在享受AI带来的便利和效率提升的同时,我们也需要警惕其潜在的风险和挑战。


在运用AI时,关键不在于完全摒弃或让团队无限制地使用它,而应是在确保安全的前提下,战略性地思考和设计合理的护栏,以充分利用AI生成的代码。


我们将介绍在整个软件开发生命周期中安全使用AI代码助手的五个技巧,包括:


1) 始终有人参与监管。

2) 使用独立的、公正的安全工具从IDE中扫描AI代码。

3) 验证第三方代码。

4) 跨团队和项目自动化测试

5) 保护您的知识产权。


01

始终有人参与监管

生成式AI本质上是一个初级开发人员,可以访问来自互联网的数百万个代码示例。尽管它们工作得很快,但AI编码助手并非万无一失,因为它们从好的和坏的代码中提取作为训练数据。因此,在采用生成式AI代码工具时,在重要环节包含足够的人工检查以及人工介入非常重要,团队可以通过以下做法保障监管:


执行与AI之前相同的代码安全测试,例如使用静态应用程序安全测试 (SAST) 验证、测试和修复 IDE 中的漏洞;

定期开展有关人工智能生成代码的好处和风险的培训;

制定政策和程序,对AI生成的代码进行定期审查。


02

使用独立的、公正的安全工具

从IDE扫描AI代码

在对您的AI代码进行安全测试时,最佳实践是使用一个与最初生成大量代码不同的工具。


一个独立的安全工具能够确保公正性。此外,不同的工具专注于不同的领域,一个旨在创建功能代码的AI工具无法全面了您的安全态势,也不具备理解复杂安全微妙之处的功能。


在选择这个独立的、公正的工具来保护您的AI生成的代码时,有两个主要标准需要考虑:


1) 整个应用程序的完整上下文视图,而不仅仅是单个AI生成的代码片段的不完整视图。这样,它就可以提供修复建议,而不会破坏应用的其余部分。

2) IDE中的扫描功能可将安全性尽可能向左移动。这样,开发人员可以在编写AI生成和手动编写的代码后立即修复漏洞。


03

验证第三方代码

开源代码占平均应用程序的70%至90%。开发人员不仅经常利用这些第三方资源,AI编写的代码也利用了第三方依赖项。


尽管开源代码是开发人员快速构建应用程序的好方法,但其质量和安全级别可能会有所不同。AI推荐的开源库也可能带来风险,因为AI通常不了解最新的安全情报,可能会推荐过时或已知存在漏洞的第三方资源。


软件成分分析(SCA)有助于组织发现并修复这些第三方资源中的漏洞。它可以通过识别易受攻击的开源软件包,报告这些漏洞并建议补救措施来扫描人类或AI选择的依赖项。当使用AI编码助手时,团队必须使用高质量的SCA工具来测试和验证AI推荐的开源库。


04

跨团队和项目自动化测试

当您的团队探索如何为人工和AI编写的代码应用最佳安全实践时,请识别并把握自动化的机会。AI编码助手极大地加速了开发周期,若安全测试未能同步实现自动化,将无法跟上这一飞速发展的步伐。


成功的自动化策略核心在于将安全测试无缝融入开发团队既有的工作流程中,比如CI/CD管道,以确保质量与速度并驾齐驱。


05

保护您的知识产权

团队应当审慎考虑提供给AI编码助手的代码提示,并确立一套机制来避免员工在提示中无意中泄露敏感数据。由于人工智能工具常将用户的提示作为训练数据,您所编写的任何内容都可能被其获取。


鉴于这一现实情况,我们务必确保不将敏感或专有的代码输入到AI工具中,以保障信息安全。以下是提示AI工具时谨慎行事的几种方法:


记录详细的AI使用策略,并就这些准则对团队进行培训,包括不遵守这些准则的潜在后果;

假设您输入到LLM中的任何数据都将用于其训练;

仅输入可以保障AI工具能完成其工作所需的最少信息;

请考虑使用输入和输出检查来清理来自用户的输入和AI工具的输出。


参考链接:

https://snyk.io/blog/5-tips-adopting-ai-code-assistance/