研究发现:人工智能助手无法评估代码的语义和安全性

阅读量8455

发布时间 : 2024-02-29 10:23:18




Snyk 的安全研究人员 进行的一项研究表明,如果源项目已经存在类似问题, GitHub Copilot 自动编码工具能够生成存在漏洞的代码。发生这种情况是因为 Copilot 的算法只是分析现有的代码库,而不了解其工作原理。

在实验过程中,Snyk 团队要求 Copilot 生成 SQL 查询。助手生成的第一个查询结果是高质量且安全的,使用命名参数,这消除了使用注入的风险:

// 创建查询以将输入与描述或产品名称相匹配 var query = em.createQuery(“SELECT p FROM Product p WHERE LOWER(p.description) like OR lower(p.productName) like :input”, Product.class);

然后,研究人员在相邻的项目文件中编写了一个易受攻击的 SQL 查询,并要求神经网络再次编写代码。第二次,助手建议了增加漏洞风险的代码:

// 创建查询以将输入与描述或产品名称相匹配 String query = “从产品中选择*,其中 lower(description) like ‘%” + lowerInput + “%’ OR lower(product_name) like ‘%” + lowerInput + “%'”;

通过使用易受攻击的代码作为上下文,Copilot 不仅重现了现有问题,而且还可能使项目中的漏洞数量增加一倍。研究人员强调,如果一个项目由缺乏经验的开发人员处理,多个漏洞的风险会呈指数级增加。

Snyk 指出以下因素加剧了 GitHub Copilot 的使用:
– 过度信赖人工智能。假设人工智能生成的代码自动是安全的,依赖人工智能助手的新手可能不会意识到自己的错误。
– 缺乏检查。人工智能助手无法分析其提案的安全性,而开发人员往往会跳过这一步,从而增加了项目引入漏洞的风险。
– 使用过时的模式。GitHub Copilot 可能会建议专业社区不再认为可靠的程序,其中包含漏洞和错误。
– 忽略安全问题:Copilot 专注于代码生成而不是安全评估。开发人员可能更关心功能而不是安全,无意中忽视了漏洞。

为了解决这个问题,专家建议将人工智能代码生成与传统的安全方法(例如代码分析和开发人员培训)相结合。这将使我们能够在创新和代码可靠性之间找到平衡。


分享到:微信
+16赞
收藏
ISC6196381205
分享到:微信

发表评论

内容需知
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全客 All Rights Reserved 京ICP备08010314号-66