LLM2D
人工智能生成的代码有害:安全和高质量代码生成的路线图
Artificial-Intelligence Generated Code Considered Harmful: A Road Map for Secure and High-Quality Code Generation
作者: Chun Jie Chong (Zephyr), Zhihao (Zephyr), Yao, Iulian Neamtiu
发布日期: 10/1/2024
arXiv ID: oai:arXiv.org:2409.19182v1

摘要

使用大型语言模型(LLM)生成代码(而不是从头开始编写代码)已变得越来越流行。然而,LLM 生成的代码的安全性影响尚不清楚。我们进行了一项研究,比较了人类编写的代码与 LLM 生成的代码在各种编程任务中的安全性,包括数据结构、算法、加密例程和 LeetCode 问题。为了评估代码安全性,我们使用了单元测试、模糊测试和静态分析。对于代码质量,我们关注复杂度和大小。我们发现,LLM 可以生成无法实现所需功能的错误代码,尤其是在更复杂的任务中;此类错误可能很微妙。例如,对于加密算法 SHA1,LLM 生成了一个错误的实现,但该实现仍然可以编译。在功能正确的情况下,我们发现 LLM 生成的代码安全性较低,主要是因为缺乏防御性编程结构,这会导致许多安全问题,例如缓冲区溢出或整数溢出。模糊测试表明,LLM 生成的代码比人类编写的代码更容易出现挂起和崩溃。在质量方面,我们发现 LLM 生成的代码是精简的代码,缺乏防御性编程结构,并且通常比人类编写的代码更复杂(每行代码)。接下来,我们构建了一个反馈循环,要求 LLM 重新生成代码并消除发现的问题(例如,malloc 溢出、数组索引越界、空指针引用)。我们发现 LLM 无法始终如一地消除此类问题:虽然在某些情况下成功,但我们发现重新生成的、据说是更安全的代码包含新的问题;我们还发现,在提示后,LLM 可以在以前没有问题的文件中引入问题。