我们准备好接受人工智能生成的代码了吗? Plato区块链数据智能。垂直搜索。人工智能。

我们准备好使用 AI 生成的代码了吗?

近几个月来,我们对计算机生成的面孔、猫的图片、视频、文章甚至艺术的质量感到惊叹。 人工智能 (AI) 和机器学习 (ML) 也悄然进入软件开发领域,工具包括 GitHub Copilot、Tabnine、Polycode、 和别的 合乎逻辑的下一步是将现有代码自动完成功能置于人工智能类固醇上。 然而,与猫的照片不同的是,应用程序代码的来源、质量和安全性可能会产生广泛的影响——研究表明,至少对于安全性来说,风险是真实存在的。

学术研究 已经表明 GitHub Copilot 经常生成存在安全漏洞的代码。 最近,Invicti 安全工程师 Kadir Arslan 的实践分析表明: 不安全的代码建议 对于 Copilot 来说,这仍然是规则而不是例外。 Arslan 发现,针对许多常见任务的建议仅包含绝对的基本框架,通常采用最基本且最不安全的路线,并且在不进行修改的情况下接受它们可能会导致功能正常但易受攻击的应用程序。

像 Copilot 这样的工具(按照设计)自动完成功能提高了一个档次,经过开源代码的训练,可以建议在类似上下文中可能相关的片段。 这使得建议的质量和安全性与训练集的质量和安全性紧密相关。 因此,更大的问题不是关于 Copilot 或任何其他特定工具,而是关于人工智能生成的软件代码。

可以合理地假设副驾驶只是矛尖,类似的发电机在未来几年将变得司空见惯。 这意味着我们技术行业需要开始询问这样的代码是如何生成的、如何使用的以及当出现问题时谁将承担责任。

卫星导航综合症

传统的代码自动完成功能会查找函数定义以完成函数名称并提醒您需要哪些参数,这样可以节省大量时间。 因为这些建议只是您自己查找文档的捷径,所以我们已经学会了隐含地信任 IDE 的任何建议。 一旦人工智能工具出现,它的建议就不再保证是正确的——但它们仍然让人感觉友好和值得信赖,因此更有可能被接受。

特别是对于经验不足的开发人员来说,获得免费代码块的便利性促使人们将思维方式从“这段代码是否足够接近我要编写的内容”转变为“我如何调整这段代码以使其适合我”。

GitHub 非常明确地指出,Copilot 的建议应始终经过仔细分析、审查和测试,但人性决定,即使是低于标准的代码偶尔也会投入生产。 这有点像开车时更多地关注 GPS 而不是道路。

供应链安全问题

Log4j 安全危机 使软件供应链安全,特别是开源安全成为人们关注的焦点,最近的 白宫备忘录 关于安全软件开发和新的 关于提高开源安全性的法案。 通过这些和其他举措,应用程序中的任何开源代码可能很快就需要写入软件物料清单 (SBOM),这只有在您有意包含特定依赖项时才可能实现。 软件组合分析 (SCA) 工具还依赖于这些知识来检测和标记过时或易受攻击的开源组件。

但是,如果您的应用程序包含最终源自开源训练集的人工智能生成的代码,该怎么办? 从理论上讲,即使一项实质性建议与现有代码相同并按原样接受,您也可以在您的软件中拥有开源代码,但在 SBOM 中则不然。 这可能会导致合规性问题,更不用说如果代码被证明不安全并导致违规,则可能承担责任 - 而且 SCA 不会帮助您,因为它只能找到易受攻击的依赖项,而不能找到您自己代码中的漏洞。

许可和归属陷阱

继续这个思路,要使用开源代码,您需要遵守其许可条款。 根据特定的开源许可证,您至少需要提供归属或有时将您自己的代码作为开源发布。 有些许可证完全禁止商业用途。 无论何种许可证,您都需要知道代码来自何处以及如何获得许可。

同样,如果您的应用程序中人工智能生成的代码恰好与现有开源代码相同怎么办? 如果您进行审核,是否会发现您使用的代码没有所需的属性? 或者您可能需要开源一些商业代码以保持合规性? 也许对于当前的工具来说,这还不是一个现实的风险,但这些是我们今天而不是十年后都应该问的问题。 (需要明确的是,GitHub Copilot 确实有一个可选的过滤器来阻止与现有代码匹配的建议,以最大限度地降低供应链风险。)

更深层次的安全影响

回到安全性,AI/ML 模型的好坏取决于其训练集。 我们过去已经看到过 - 例如,在以下情况 人脸识别算法显示种族偏见 因为他们接受训练的数据。 因此,如果我们的研究表明代码生成器经常在不考虑安全性的情况下生成建议,我们可以推断这就是它的学习集(即公开可用的代码)的样子。 如果不安全的人工智能生成的代码随后反馈到该代码库中怎么办? 这些建议能够安全吗?

安全问题还不止于此。 如果基于人工智能的代码生成器变得流行并开始在新代码中占据有意义的比例,那么很可能有人会尝试攻击它们。 通过毒害人工智能的学习集来欺骗人工智能图像识别已经成为可能。 恶意行为者迟早会尝试将独特的易受攻击的代码放入公共存储库中,希望它能出现在建议中并最终出现在生产应用程序中,从而使其容易受到攻击。

那么单一栽培呢? 如果多个应用程序最终使用相同的高度易受攻击的建议,无论其来源如何,我们都可能会关注漏洞流行病,甚至可能是人工智能特定的漏洞。

密切关注人工智能

其中一些场景在今天看来可能有些牵强,但它们都是我们科技行业需要讨论的事情。 同样,GitHub Copilot 之所以成为人们关注的焦点,只是因为它目前处于领先地位,并且 GitHub 对 AI 生成建议的警告提供了明确的警告。 就像手机上的自动完成功能或卫星导航中的路线建议一样,它们只是让我们的生活更轻松的提示,是否接受它们取决于我们。

基于人工智能的代码生成器具有指数级提高开发效率的潜力,因此很可能成为软件世界的永久组成部分。 不过,就应用程序安全性而言,这是潜在易受攻击的代码的另一个来源,需要通过严格的安全测试才能投入生产。 我们正在寻找一种全新的方法,将漏洞(以及可能未经检查的依赖项)直接放入您的第一方代码中,因此在经过测试之前将人工智能增强的代码库视为不可信是有意义的——这意味着与您一样频繁地测试所有内容能。

即使像 Copilot 这样相对透明的机器学习解决方案也已经引发了一些法律和道德问题,更不用说安全问题了。 但想象一下,有一天,某种新工具开始生成完美运行的代码并通过安全测试,除了一个微小的细节:没有人知道它是如何工作的。 这时候就该恐慌了。

时间戳记:

更多来自 暗读