GPT之于代码分析,“掀桌”还是“救赎”?| 附Demo

admin 2023年4月17日01:55:25评论256 views字数 3879阅读12分55秒阅读模式

GPT之于代码分析,“掀桌”还是“救赎”?| 附Demo



距离ChatGPT发布已经过去4个多月,你是否已经习惯了每天起床检查一下自己的工作会不会被AI“替代”?


大家都知道我们是一家研究代码分析的创业公司,在过去的这段时间里也常常会面对这样的问题:“你看ChatGPT也能理解代码,看上去分析的还不错,你们是不是要失业了啊?”


作为一个从2018年就开始研究“AI+程序分析”的团队,本着认真负责的科研精神,今天就来论证下我们到底会不会失业。


01

TLDR

先抛结论:


从目前GPT-4的能力来看,基于LLM (Large Language Models, 大型语言模型) 的代码分析技术,无法成为替代传统程序分析技术栈的新技术路径。但是LLM所带来的全新能力,能够大幅度提升现有SAST工具的水平。


ChatGPT所带来的一系列技术变革和基础设施的进化,将会是代码分析技术迈向下一个时代的钥匙。


本文的结尾有一个Demo展示我们在做的一些尝试。


02

LLM大型语言模型的代码分析能力

现在我们已经给出了结论,下面就展开来聊一下GPT这类自回归语言大模型在代码分析这个场景下究竟具备什么样的能力,又有哪些缺陷。


对于GPT-4模型本身我们就不多介绍了,网上相关的文章非常多,有时间的可以看一下微软研究院那篇154页的论文,或者花个100多块自己去开一个plus会员亲自体验下。


此外,对于LLM在网络安全其他领域的应用,我们也没做太多实验,这里就不献丑了,有感兴趣的朋友可以私下再一起交流。


说回LLM大型语言模型在代码分析场景的应用,大家肯定都看过发布会的演示,也看到过网上很多人做的一些测试。GPT能像人一样去“阅读”代码,给出对代码上下文语法、语义的“理解”,做一些“推理判断”,然后用自然的语言把这些结论展示出来,并且能够持续的和用户进行交互。


甚至我们在测试中发现它还能识别开源代码片段的来源,具备一定的SCA能力。从这个角度上来看,GPT的确涌现了很多之前其他模型所不具备的能力,表现是很惊的。


但是在惊艳之后,我们更多的是希望从生产应用场景的角度来探寻用LLM大型语言模型进行代码分析任务可行性。大炮能打蚊子并不代表你一定要用大炮来打蚊子,更多时候你需要的只是一个20块的电蚊拍。


经过一段时间的研究和测试,我们有以下发现:

#

工程落地难度

由于大型语言模型的稀缺性,所有相关方案都无法回避落地问题。从现实商业场景来说,有很多问题需要解决,包括了代码传输时的数据安全问题、API的可连接性、面对海量代码时的经济成本、本地化的可行性等等。

#

分析复杂代码的能力

基于微软论文里给出的信息,目前的自回归模型在数学/推理任务中缺少规划能力 (planning),这使得这类模型即使面对稍微复杂一点的推理问题也很容易失败。然而推理能力是代码分析场景所必须要具备的能力,否则就难以做到精确分析。在我们的测试中,GPT-4模型能够很好的解决简单的代码分析任务,然而一旦测试用例中出现了变量、控制流相关的推理逻辑,GPT-4模型就会出现误判。对于部分场景,可以通过一系列人为的引导逐步推出正确的结论,但是从工程上来说效果仍然很差。感兴趣的同学可以用OWASP Java Benchmark来试试。

#

输入限制

目前的GPT-4模型给出了32000 tokens的输入上限。在面对真实软件项目时,这样的输入窗口太小,只能够进行代码片段的分析。即使通过embedding向量化,可用性也很有限。此外,由于输入窗口上限是由模型本身决定的,这就意味着难以通过工程的方法后期进行扩充。

#

分析效率

GPT-4是基于逐单词预测的模式来生成回答,分析时间基本是由需要输出的文本量决定。从现在的使用体验上来看,给出结果的效率太低,有几个数量级的缺口。人为缩短输出内容的长度可以做一些加速,但是又会遇到之前说的推理不完全的情况。所以直接使用LLM来做分析,效率会是一个很难逾越的瓶颈。

#

LLM大型语言模型的可预测性、可解释性、可控制性

大模型的不可控制是另一个难以解决的问题。这里说的不可控制是指在生产应用场景下,一个分析工具所必须具备的可维护能力。我们都知道GPT-4在分析代码的时候经常会出现误判,其实误判并不可怕,所有的分析工具都会有漏报误报。最关键的问题是,当出现漏报误报时,用户无法针对性的对错误的结果进行修正,错误永远会出现。即使重新训练模型,也很可能无法实现想要的修正,只能期待什么时候这个大模型再一次进化,涌现出新的能力。这就导致整个工具的使用处于一种不可控的状态。这对于追求精确、高效、规划的代码分析任务来说,是难以接受的。


上面我们提到的这些问题,有些可以通过工程实践来缓解,有些可能只有等GPT-5、GPT-6出现才知道能不能解决。至少从GPT-4的表现和相关的文献材料来看,我们觉得利用LLM大型语言模型来进行代码分析任务,不是一个更优的选择。


03

拥抱LLM

上面说了这么多,结果好像又是只能吃瓜了。


我们搞程序分析的是不是就没法赶上这次“工业革命”浪潮了呢?答案当然是否定的。咱们需要换一个角度来看待LLM,不要把它当成现有技术的替代,而是作为现有技术的补充,那么你会发现颠覆行业的机会可能就在眼前。


如果你是从事程序分析研究或是使用过相关产品的人,一定会知道从诞生那天就困扰着SAST的两个难题:分析精度和使用门槛


看过我们之前程序分析科普文章的小伙伴应该记得,由于计算理论的限制,我们在静态分析的场景下无法做到对程序运行状态的完全还原,也就导致了静态分析技术总是存在着漏报和误报。误报意味着额外的工作量,这也是很多开发人员不愿意使用这类工具的主要原因。研究人员经过了数十年的努力,一直在努力提升程序分析技术的精确度,但是时至今日,仍然有非常多的技术难点。随着软件研发的规模化和复杂化,这些问题变得愈发难以解决,比如数据断流、函数摘要、复杂控制流的约束求解、跨模块/应用分析等等。


现在GPT-4的出现,为这些快要走入死胡同的难题带来了一线曙光。


我们团队从2018年就开始探索AI技术和程序分析技术融合可能性,2019年我们在RAID发表了名为NLP-EYE: Detecting Memory Corruptions via Semantic-Aware Memory Operation Function Identification 的论文,探讨了NLP技术如何能够帮助我们识别更多的危险函数。2022年我们在S&P发表了名为Goshawk: Hunting Memory Corruptions via Structure-Aware and Object-Centric Memory Operation Synopsis 的论文,通过引入更成熟的AI技术,在Linux内核、OpenSSL等多个开源项目中发现了上百个内存破坏型BUG。


我们坚信AI技术是引领程序分析技术走入下一个时代的钥匙。如今ChatGPT的发布让行业焕发了新生,涌现了一大批优秀的开源项目、工具链、模型、基础设施,我们比以往任何一个时候都更有机会去解决这些问题。


除了分析精度,使用门槛过高也是阻碍代码分析工具普及的一大原因。由于分析能力的不足,过去的分析工具提供了复杂的配置接口来帮助提升特定场景下的使用效果,使用起来非常复杂。对于分析结果的解读,同样也有很高的技术门槛,往往是做开发的不懂安全,搞安全的不懂代码,能真正形成闭环让工具辅助开发提升效率的用户很少。而这些涉及到人机交互、答疑解释的场景正是LLM最为擅长的。


LLM大型语言模型所展示的想象空间是巨大的,同时又处在高速的进化中。


与其担心哪一天被替代,不如尽早拥抱新时代。


文章的最后附上一个Demo,展示了我们在Corax中通过引入GPT-3.5的能力来改善修复建议的可阅读性,降低用户的使用门槛与成本。


更多的LLM加持能力,将在之后的Corax新版中推出。


END



题图由Midjourney生成
prompt: Matrix raining code, cute robot, --ar 16:9 

了解更多

Corax是由蜚语安全自主研发的代码安全分析平台 ,不同于传统基于模式匹配的静态代码分析产品,Corax通过引入符号执行、函数摘要、污点分析、路径可达性分析、数据流分析、NLP、LLM等前沿的程序分析和人工智能技术增强了自身在处理程序语义信息上的能力,Corax对于代码的建模与分析更加精准高效。能够准确快速的帮助企业解决代码质量与代码安全问题。


Corax采用了模块化的设计理念,更加贴合云原生场景下的现代研发体系,能够方便的嵌入研发流水线的各个环节。通过在研发流程中引入Corax的分析能力,企业能够获得代码安全、代码质量、代码可视化、代码防护等多个方面的研发效能提升。

蜚语安全是一家专注于提供软件供应链安全创新解决方案的网络安全企业,成立于2019年。蜚语安全孵化自上海交通大学计算机系,创始团队由4名博士组成,拥有十数年的前沿安全研究和一线安全业务经验。蜚语安全扎根左移安全开发赛道,深耕企业安全服务市场,以自动化程序分析技术为核 心,致力于探索软件供应链安全的新场景和新边界。蜚语安全现已完成多轮融资,服务于众多世界500强、高科技与互联网公司。得益于客户与资本市场的信任,蜚语安全正处在快速增长之中。


关于 安全村


安全村始终致力于为安全人服务,通过博客、文集、专刊、沙龙等形态,交流最新的技术和资讯,增强互动与合作,与行业人员共同建设协同生态。

投稿邮箱:info@sec-un.org


原文始发于微信公众号(SecUN安全村):GPT之于代码分析,“掀桌”还是“救赎”?| 附Demo

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年4月17日01:55:25
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   GPT之于代码分析,“掀桌”还是“救赎”?| 附Demohttps://cn-sec.com/archives/1665841.html

发表评论

匿名网友 填写信息