《GPTScan: Detecting Logic Vulnerabilities in Smart Contracts by Combining GPT with Program Analysis》
原文链接:IEEE Xplore Full-Text PDF:
验证数据集:https://sites.google.com/view/gptscan
这篇论文我看的比较粗略,其方向主要是利用LLM以及静态技术对智能合约的漏洞检测。本文提出了一种方法GPTScan,同时依靠静态确认使得GPTScan减少三分之二的误报。
方法的流程如下图:
具体流程细节不再赘述,其最后主要利用五个问题解答进行评估:
RQ1:在分析非易受攻击的顶级合约数据集时,GPTScan的假阳性率是多少?
在分析Top200等非易受攻击的顶级合约时,GPTScan的误报率较低,为4.39%。
它在分析DeffHacks时也表现出了类似的性能,精度为90.91%。这些结果表明,GPTScan
RQ2:GPTScan在分析具有逻辑漏洞的真实世界数据集方面有多准确,与现有工具相比有多有效?
GPTScan在检测Web3Bugs和DeffHacks数据集中的地面真实逻辑漏洞方面显示出了其有效性,Web3Bug的召回率为83.33%,F1得分为67.8%,DeffHack的召回率和F1得分为71.43%,优于现有的静态和基于GPT的工具。
RQ3:GPTScan的静态配置在提高GPTScan准确性方面有多有效?
静态确认有效地排除了Web3Bugs数据集中65.84%的假阳性病例,而对假阴性病例的影响很小。
RQ4:GPTScan的运行性能和财务成本是多少?
GPTScan快速且经济高效,在测试数据集中扫描每千行Solidity代码平均只需14.39秒和0.01美元。Web3Bugs和DeffHacks的相对较高的成本和较慢的速度可归因于存在更复杂的功能,这些功能无法通过静态抖动和场景匹配来消除。
RQ5:GPTS能否发现之前被人类审计员遗漏的新漏洞?
GPTScan识别出Code4rena审计报告中未出现的9个新漏洞。这突显了GPTScan作为人类审计员的有益补充的价值。
对本文工作做一个总结:本文提出了GPTScan,这是第一个将GPT与静态分析相结合的智能合约逻辑漏洞检测工具。
GPTS可以利用GPT根据代码级场景和属性匹配候选易受攻击的函数,并进一步指示GPT智能识别关键变量和语句,然后通过静态配置进行验证。我们对三个不同的数据集进行了评估,这些数据集包含约400个合约项目和3K Solidity漏洞,结果表明,GPTScan对代币合约的精度很高(超过90%),对大型项目的精度可接受(57.14%),对检测地面真值逻辑漏洞的召回率超过70%。
GPTScan快速、经济高效,能够发现人类审计员遗漏的新漏洞。在未来的工作中,我们将扩展GPTScan对更多逻辑漏洞类型的支持。
同时,在本文中为了规避LLM的不稳定输出问题,采用了相同问题模拟回答五次,提供最频繁出现的答案以确保更大的一致性。
另外,对于GPT生成的答案,如果提供了函数上下文中不存在的变量或语句,或者生成描述与所提问题无关,那么GPTScan将终止判断过程,并且认为该漏洞不存在。