虽然像 Copilot 这样的 AI 工具提供了高效的编码解决方案,但研究表明,AI 辅助代码中的安全漏洞正在令人担忧地增加。
译自 Don’t Trust Security in AI-Generated Code,作者 Jerome Robert。
从 20 多年的开发和网络安全经验来看,开发人员需要使用所有尖端、省时和提高生产力的工具。确保你提交高质量、功能代码是一项细致、耗时的工作,软件开发生命周期总是需要更多。
因此,如今几乎所有开发人员都使用某种形式的 AI 生成的代码——他们绝对应该这样做。AI 工具通过利用开发社区随着时间推移和全球范围内积累的知识来克服障碍,使开发人员的生活更轻松,这些障碍虽然对他们来说可能是新的和具有挑战性的,但早已得到解决。他们可以合理地相信代码可以执行他们想要实现的功能——并且可以测试以确保。
但他们可以信任代码是安全的吗?绝对不行。在花费所有时间和精力提交功能代码的同时,同样多的,如果不是更多的时间,则花在之后处理安全积压问题上。
像 Copilot 这样的 GenAI 平台从 GitHub 等网站上发布的代码中学习,并有可能在此过程中养成一些坏习惯。它搜索并返回首先真正有效的代码,但安全性是次要目标(如果有的话)。正如你将在本文后面看到的那样,这会导致潜在的重大漏洞。
最近有两项研究探讨了 AI 对代码安全性的影响。第一项是斯坦福大学的研究,“用户使用 AI 助手编写更不安全的代码吗?”;另一项是武汉大学的研究,“探索 Copilot 在 Github 中生成的代码的安全弱点”。
斯坦福大学的研究发现以下内容。
- 能够使用 AI 助手的人员编写的代码明显不如没有使用助手的人员安全。
- 能够使用 AI 助手的人员也更有可能相信他们编写的代码是安全的,这表明此类工具可能会导致用户对其代码中的安全漏洞过于自信。
- 投入更多精力为 AI 助手创建查询的人员,例如提供辅助函数或调整参数,最终更有可能提供安全的解决方案。
武汉大学的研究发现,近 30% 的 Copilot 生成的代码片段存在安全弱点。专门针对 Python,277 个代码片段中的 91 个(即 33%)存在安全弱点;在这 91 个代码片段中,存在 277 个安全弱点实例。换句话说,不安全的代码非常不安全。
在这一点上,应该不言而喻,当使用像 Copilot 这样的 GenAI 来帮助编写代码时,你永远不应该假设你得到的代码是完全安全的。你应该像对待人类编写的代码一样,用敏锐、怀疑的眼光和标准的安全协议来对待 AI 生成的代码。但是,随着潜在的易受攻击的 AI 代码进入软件开发 生命周期,传统的被动方法可能不够。
组织应该创建和维护一种将安全集成到 SDLC 的每个阶段的文化,并尽可能主动地识别漏洞。理想情况下,应该在开发人员编写代码时识别漏洞,确保他们提交高质量、安全的代码,消除安全运营团队的积压工作,并使整个生命周期更高效。在编码过程中在 IDE 中解决漏洞是左移和安全设计理念的自然终点,也是将安全集成到软件开发生命周期中最有效和最有效的方式。
无论是手动编写还是 AI 生成的代码,在编写代码时检测和修复漏洞都可以节省时间并保持专注。这也减少了同行评审中的来回沟通,使整个过程更加顺畅和高效。通过将安全更深入地嵌入到开发工作流程中,我们可以解决安全问题,而不会影响生产力。