chatgpt-生成代码安全性

背景

最近曝光率超高的Large Language Model (LLM)——chatGPT在许多NLP任务中取得惊人的成绩,与人的互动中表现出的各方面的知识量更是让人叹为观止,比如医疗报告、代码生成等,也得到了安全界的广泛关注。

从安全角度出发,我们更关心LLM们会不会产生正确但是有漏洞的结果。比如它的代码生成能力就受到了质疑,前几天在arxiv上的的《How Secure is Code Generated by ChatGPT?》就chatGPT生成安全代码的能力展开研究

文章介绍

文章本身比较简单,因为ChatGPT本身不开源,整个工作流程那是相当的简单。。如下图:

image-20230427153553595

我们只能从prompt下手,那么问题就集中在:

  1. 如何选择合适的代码片段让chatGPT去生成新的
  2. 如何评估生成结果是否有漏洞

对于问题1,作者手工构建了21个不同编程语言的程序,并说这些程序会触发不同的Bug,本来感觉这里的描述太过人工化了,但看到后面发现这21个程序其实对应21个CWE(common weakness enumeration),那就还好

image-20230427154026895

作者的prompt是这么提的:

  1. 模仿新手程序员,要求chatGPT生成代码
  2. 针对出现的bug问chatgpt为什么会出现这样的行为
  3. 直接询问该生成代码是否安全

最终作者发现,有相当多的CWE情景下的代码会在chatgpt生成的情况下存在漏洞,而就安全性提问方面,chatgpt的表现也让人不是很满意,有些存在问题的代码,除非你明确提问这份代码可能存在特定类型的漏洞(例如存在反序列化漏洞 deserialization DoS and deserialization attack),ChatGPT才会“正确”回答(这里的回答正确也许也是刚好答案撞上了问题?)

对比

之前读过一篇关于copilot(github发布的代码辅助生成工具,基于gpt3开发的)生成代码安全性的文章,《Asleep at the Keyboard? Assessing the Security of GitHub Copilot’s Code Contributions》,那篇文章在copilot出来后不久就发了,很幸运的蹭上热点发在USENIX 22上,实际上思路和这篇文章差不多,都是在几十个CWE情境下进行代码生成与评估。当然,那篇文章好在:

  1. 系统化了CWE情境(来自 MITRE 的“前 25 名”常见弱点枚举 (CWE) 列表)
  2. 半自动化的漏洞发现工具(CodeQL 或者人工check)
  3. 最终评估了1600+个程序

这篇文章从细节上还是差了些。

思考

这是一篇超前的文章

研究AI生成代码安全性的文章已经到两位数的规模了,因为之前一直在关注,所以chatgpt出来后就知道,一定会有《How Secure is Code Generated by ChatGPT?》的文章出现。然而我的困惑是,copilot这样的“专业”模型安全性可以用CWE这样的情景来描述,而chatGPT这种致力于“聊天”的工具,真的适合用代码安全性审查么?毕竟它本身的代码生成能力都有待考量。

如果看过OpenAI自己挂在arxiv上的《Training language models to follow instructions with human feedback》就会知道,他们在fine-tune的时候更多考虑的是模型的输出是否符合人类预言标准,并没有专门在代码上做考虑(也许私下做了没放出来?也有可能)

image-20230427160950220

而在我自己使用chatGPT过程中也发现,在生成代码的时候某些代码就是错的,跑都跑不起来,更不用说是否有漏洞了。但是又听说GPT-4的代码生成能力有了长足的进步(chatGPT是所谓的“gpt 3.5”),所以感觉可以考虑用GPT-4的API做一遍这篇文章的工作。

参考

[1] Khoury R, Avila A R, Brunelle J, et al. How Secure is Code Generated by ChatGPT?[J]. arXiv preprint arXiv:2304.09655, 2023.

[2] Pearce H, Ahmad B, Tan B, et al. Asleep at the keyboard? assessing the security of github copilot’s code contributions[C]//2022 IEEE Symposium on Security and Privacy (SP). IEEE, 2022: 754-768.

[3] Ouyang L, Wu J, Jiang X, et al. Training language models to follow instructions with human feedback[J]. Advances in Neural Information Processing Systems, 2022, 35: 27730-27744.