宇宙的尽头是考公,那么GPT的极限在哪里?今天要带大家去阅读的论文Exploring the Limits of ChatGPT in Software Security Applications就探索了ChatGPT在软件安全上的应用的能力边界:
OpenAI也许应该考虑邀请学术社区加入他们的董事会,因为研究人员已经为ChatGPT做了太多的测试,在今天的这篇论文中,研究人员简直是把ChatGPT当成了生产队的驴来使唤,把软件安全的方方面面(如下图)都交给它去做。虽然从直觉上就能够估计到ChatGPT不可能这么万能,但是到底它的能力边界值如何,不测不知道,赶紧来看论文的测试结果。
先来看一个实例:
在这个例子中,左边的代码(Prompt给出的)里面包含了一个没有严格检查文件路径的安全问题:攻击者可能通过在输入中注入“…/…/”这样的小伎俩来诱骗程序去访问当前目录更上层(甚至直达根目录)的文件。GPT-3.5和GPT-4都报告了安全问题,而且GPT-4还对这个问题进行了一些深入的解释(如上图最右所示)。但是要注意,这种“发现漏洞”的能力很可能是个陷阱,到底ChatGPT是神医还是江湖郎中,还需要更多更严格的测试。所以,最重要的一点在于,到底要用什么测试用例来给ChatGPT进行考试。
作者首先从漏洞检测(vulnerability detection)、漏洞修复(vulnerability repair)、bug修正(bug fixing)和代码打补丁(patching)四个方面进行测试。我们一个一个来看:
Vulnerability Detection
在这部分测试中,作者用了两个数据集进行测试,第一个数据集是由所谓的“合成代码”(synthetic code)组成的一些sample,和CWE Top 10类型相关;第二个数据集则是从CVE数据库中选择的34个真实漏洞。两个数据集包含了9种不同的编程语言代码。
下面两个表格是论文的太长不看版本——结论是ChatGPT在简单的合成代码上的漏洞检测能力远远好过在真实代码上的检测。这个跟我们高中的时候的读书经历差不多(没参加过高考就保送的读者滚),老师经常会批评某些同学背答案不懂变通,知识点还是原来那个,题型复杂一点就解不出来了。
这里面还给GPT-4打了一下广告:在漏洞检测方面的准确率明显好过GPT-3.5(看起来如果你背更多的答案也是有用的)。而且作者分析表明,GPT-3.5在这个测试中遇到的主要问题是对于数值操作的忽视,而GPT-4就好很多,下面这个例子中(注意到论文中作者在描述Figure 3这部分的时候完全写错了,不知道为啥),GPT-3.5就看不懂那个宏定义,也不知道这个代码有问题。
Vulnerability Repair
和漏洞检测差不多,在漏洞修复测试中,作者也设置了两组数据集——合成代码组和真实代码组。合成代码组里面包含了154组测试用例,覆盖了MITRE “2021 CWE Top 25”列表里面的18种CWE,而真实代码组则是用OpenSSL从2019年以来所有发现的CVE作为待修复代码测试用例。
从Table 3中可以看到,针对合成代码组,不管是GPT-3.5还是GPT-4表现都还不错,不过这个表格又有一个问题:这里面显示GPT-3.5和GPT-4都没法处理CWE-200的情况,然后马上快进到Figure 6,这里又显示GPT-4能够进行修复,不知道该听谁的好?
GPT-3.5和GPT-4在针对真实代码漏洞修复的表现上半斤八两(见下表),都只能对12个CVE中的3个进行修复(而且还不是相同的3个),而且都是简单的空指针解引用类型的CVE。不过在这里,论文的文字再一次诡异地显示出了和表格的不一致性(这个风格也是有点像ChatGPT?)——“ChatGPT repairs 3 and 4 out of 12 cases with GPT-3.5 or GPT-4 respectively” ???
Bug Fixing
Bug修正和漏洞修复的区别主要在于前者是有一些test case来参考辅助的(只要能过了test case就算修正了bug)。在这项测试中,作者利用了QuixBugs
(来自SPLASH Companion 2017中的论文QuixBugs: a multi-lingual program repair benchmark set based on the quixey challenge)中40/40组buggy的Python/Java代码进行测试,结果是GPT-3.5修正了24/40个Python bug,14/40个Java bug;GPT-4修正了33/40个Python bug,34/40个Java bug,又是GPT-4大获全胜的一天!
不过,在修代码的时候,GPT有时会变得难以捉摸,例如下面的例子中,不管是GPT-3.5还是GPT-4竟然在修复的时候去把原始代码改得有点面目全非了,这个大概是训练数据的问题?
Patching
作者参考了2020年USENIX Securit论文Automatic hot patch generation for android kernels来对ChatGPT的代码打补丁能力进行测试,这部分测试似乎有点不太有说服力——尽管ChatGPT确实表现了很强的patching能力,但是作者只是在这里展示了两个patching的例子,也没有说明除了这两个例子之外,有没有用到其他的一些测试用例(以及成功率如何?)
除了上面的典型的软件安全代码分析任务,作者还要求ChatGPT去做更难的任务,包括问题溯源分析(root cause analysis)、反编译、代码瘦身(debloating)以及符号执行和模糊测试。这越到后面就越有一点科幻色彩了,要是ChatGPT这些都能做了,还要我们干嘛?所以今天的阅读推荐不妨留点悬念,如果你想知道ChatGPT到底在这些测试中表现如何,请直接去看论文,然后评估一下你自己是否需要去加入考公的大军。
论文:https://arxiv.org/abs/2312.05275
原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 阅读推荐 2024-01-10 (软件安全测试)ChatGPT到底行不行
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论