1、第3卷第2期2 0 2 4年3月信 息 对 抗 技 术I n f o r m a t i o n C o u n t e r m e a s u r e T e c h n o l o g yV o l.3 N o.2M a r.2 0 2 4引用格式:耿辰,常舒予,黄海平.零样本场景下基于提示工程的智能合约漏洞检测研究J.信息对抗技术,2 0 2 4,3(2):7 0-8 1.G E N G C h e n,C HAN G S h u y u,HUAN G H a i p i n g.P r o m p t e n g i n e e r i n g f o r s m a r t c o
2、n t r a c t v u l n e r a b i l i t y d e t e c t i o n i n z e r o-s h o t s c e n a r i o sJ.I n f o r-m a t i o n C o u n t e r m e a s u r e T e c h n o l o g y,2 0 2 4,3(2):7 0-8 1.(i n C h i n e s e)零样本场景下基于提示工程的智能合约漏洞检测研究耿 辰1,常舒予1,黄海平1,2*(1.南京邮电大学计算机学院,江苏南京 2 1 0 0 2 3;2.江苏省无线传感网高技术研究重点实验室,江苏
3、南京 2 1 0 0 2 3)摘 要 智能合约是区块链技术的重要组成部分,但由于编程人员的开发和代码审查经验不足,智能合约漏洞引发的安全问题日益增多。现有的形式化验证和符号执行检测方法误报率和漏报率较高,基于深度学习的方法尽管提高了检测效果,但仍存在解释性较差和依赖大量标注数据的问题。为解决这些局限性,提出一种在零样本场景下基于提示工程的智能合约漏洞检测方法P r o m p t-e n h a n c e d C h a t G P T。该方法以使用标准提示文本的C h a t G P T为研究对象,通过将传统的漏洞检测任务转化为文本问答任务,利用模型的推理能力进行检测。智能合约源码经过预处
4、理去除冗余信息,并设计包含“任务描述”“漏洞描述”“检测步骤”“推理过程”和“答案格式”的提示文本模板,P r o m p t-e n h a n c e d C h a t G P T可以生成漏洞检测结果和可解释的分析过程。在公开的数据集上进行一系列对比实验和分析后,结果表明所提方法能够提升零样本场景下智能合约漏洞检测性能,揭示了大语言模型在相关领域的潜在能力。关键词 智能合约;大语言模型;提示工程;漏洞检测中图分类号 T P 3 1 1 文章编号 2 0 9 7-1 6 3 X(2 0 2 4)0 2-0 0 7 0-1 2文献标志码 A D O I 1 0.1 2 3 9 9/j.i s
5、 s n.2 0 9 7-1 6 3 x.2 0 2 4.0 2.0 0 7P r o mpt e ngi n e e r i ng f o r s m a r t c o n t r a c t v u l n e r a b i l i ty d e t e c t i o n i n z e r o-s h o t s c e n a r i o sG E N G C h e n1,CHAN G S h u y u1,HUAN G H a i p i n g1,2*(1.S c h o o l o f C o m p u t e r S c i e n c e,N a n j i n g
6、 U n i v e r s i t y o f P o s t s a n d T e l e c o mm u n i c a t i o n s,N a n j i n g 2 1 0 0 2 3,C h i n a;2.J i a n g s u H i g h T e c h n o l o g y R e s e a r c h K e y L a b o r a t o r y f o r W i r e l e s s S e n s o r N e t w o r k s,N a n j i n g U n i v e r s i t y o f P o s t s a n
7、d T e l e c o mm u n i c a t i o n s,N a n j i n g 2 1 0 0 2 3,C h i n a)A b s t r a c t D u e t o i n s u f f i c i e n t d e v e l o p m e n t a n d c o d e r e v i e w e x p e r i e n c e o f p r o g r a mm e r s,s m a r t c o n t r a c t s,w h i c h a r e e s s e n t i a l c o m p o n e n t s o
8、f b l o c k c h a i n t e c h n o l o g y,a r e f a c i n g a g r o w i n g n u m b e r o f s e c u r i t y i s s u e s.E x i s t i n g f o r m a l v e r i f i c a t i o n a n d s y m b o l i c e x e c u t i o n m e t h o d s h a v e h i g h f a l s e p o s i t i v e a n d f a l s e n e g a t i v e
9、r a t e s.A l t h o u g h d e e p l e a r n i n g-b a s e d m e t h o d s h a v e i m-p r o v e d d e t e c t i o n p e r f o r m a n c e,t h e y s t i l l f a c e c h a l l e n g e s i n i n t e r p r e t a b i l i t y a n d r e l i a n c e o n e x-t e n s i v e l a b e l e d d a t a.T o a d d r e
10、s s t h e s e l i m i t a t i o n s,t h i s p a p e r p r o p o s e d a s m a r t c o n t r a c t v u l-n e r a b i l i t y d e t e c t i o n a p p r o a c h b a s e d o n p r o m p t e n g i n e e r i n g i n a z e r o-s h o t s c e n a r i o c a l l e d P r o m p t-e n h a n c e d C h a t G P T.T
11、a k i n g C h a t G P T u s i n g s t a n d a r d p r o m p t a s t h e r e s e a r c h s u b j e c t,t h i s a p p r o a c h r e f r a m e d t h e t r a d i t i o n a l c l a s s i f i c a t i o n t a s k a s a t e x t-b a s e d q u e s t i o n-a n s w e r i n g 收稿日期:2 0 2 3-1 0-1 1 修回日期:2 0 2 3-1
12、1-1 7通信作者:黄海平,E-m a i l:h h p n j u p t.e d u.c n基金项目:国家自然科学基金资助项目(6 2 0 7 2 2 5 2)第2期耿 辰,等:零样本场景下基于提示工程的智能合约漏洞检测研究 t a s k,l e v e r a g i n g t h e m o d e ls r e a s o n i n g c a p a b i l i t i e s.A f t e r p r e p r o c e s s i n g t o r e m o v e r e d u n d a n t i n f o r m a t i o n f r o
13、 m t h e s m a r t c o n t r a c t s o u r c e c o d e a n d d e s i g n i n g s p e c i f i c p r o m p t t e x t t e m p l a t e s w h i c h i n c l u d e s“t a s k d e s c r i p t i o n”“v u l n e r a b i l i t y d e s c r i p t i o n”“d e t e c t i o n s t e p s”“r e a s o n i n g p r o c e s s”
14、a n d“a n s w e r f o r m a t”,P r o m p t-e n h a n c e d C h a t G P T c a n p r o d u c e v u l n e r a b i l i t y d e t e c-t i o n r e s u l t s a l o n g w i t h i n t e r p r e t a b l e a n a l y s i s.A f t e r a s e r i e s o f c o m p a r a t i v e e x p e r i m e n t s a n d a n a l y s
15、 i s o n p u b l i c d a t a s e t s,t h e r e s u l t s i n d i c a t e t h a t t h e p r o p o s e d a p p r o a c h e n h a n c e s v u l n e r a-b i l i t y d e t e c t i o n p e r f o r m a n c e i n z e r o-s h o t s c e n a r i o s,h i g h l i g h t i n g t h e p o t e n t i a l o f l a r g e
16、 l a n-g u a g e m o d e l s i n r e l a t e d d o m a i n s.K e y w o r d s s m a r t c o n t r a c t s;l a r g e l a n g u a g e m o d e l;p r o m p t e n g i n e e r i n g;v u l n e r a b i l i t y d e t e c t i o n0 引言智能合约是基于以太坊(E t h e r e u m)1平台,以代码形式编写的可执行程序。截至目前,以太坊已经部署超过千万个智能合约,应用领域包括钱包2、众
17、筹3、供应链4和跨行业金融5等。智能合约的源代码与其他编程语言类似6,会因程序员缺乏开发经验、项目代码审查不严格等原因存在着不容忽视的漏洞风险7。近年来,由智能合约漏洞所引发的安全事件不胜枚举8-9,造成了巨大的经济损失,因此在合约部署之前检测其潜在漏洞显得尤为迫切。研究者们近年来采取的漏洞检测方法可大致分为形式化验证法、符号执行法和深度学习法3类。文献1 0 提出了一种形式化的验证框架,通过将以太坊平台上的智能合约源码以及字节码转化为函数编程语言的形式,来分析及验证智能合约的安全性。文献1 1 也采用类似的方法,基于智能合约字节码栈的可执行形式规范,提供用于程序分析和验证的工具。但是,由于形
18、式化验证手段依赖于严谨的数学推导与验证,无法执行动态分析,并且缺少对合约中可执行路径的检测与判断,从而导致较高的误报率和漏报率。文献1 2提出了漏洞静态检测工具O y e n t e,基于智能合约控制流程图,利用符号执行的方法检测智能合约漏洞,模拟并遍历合约的不同执行路径。文献1 3 提出了另一种漏洞静态检测工具M y t h r i l,运用概念分析、污点分析和控制流验证的方法,检测以太坊智能合约中常见的漏洞类型。符号执行法虽然有效地改善了检测效果,但也显著提高了漏洞分析过程中的计算开销。为了解决上述方法的不足,研究者尝试构建带有标注的智能合约漏洞数据集,并采用深度学习方法进行检测。文献1
19、4 提出了一种基于深度学习的智能合约漏洞检测模型,在智能合约操作码层面展开分析,利用长短期记忆网络构建以太坊操作码序列模型,能够精准实施漏洞检测。文献1 5 基于3 0多万个智能合约函数开展实验,提出了一种自动化和可扩展的深度学习框架,将图神经网络特征与传统的安全专家模式相结合,在函数层面实现了较好的漏洞检测效果。然而,由于深度学习中神经网络的“黑箱性”1 6,这些方法的检测结果往往可解释性较差,并且深度学习模型依赖于大量的标注数据,对于训练数据集有着较高要求。随着人工智能技术的进一步发展,研究者们利用大量语料库训练出参数量极高的大语言模型1 7,如C h a t G P T1 8、L L a
20、 MA1 9等。此类语言模型蕴含海量的知识,可以以问答的形式处理各种自然语言处理任务,而无须针对特定任务提供大量数据2 0。文献2 1 表明,即使没有预先针对特定任务进行训练,在输入与任务相关的提示文本语句后,大语言模型仍然能够利用模型的预训练知识推理并解决问题。为了解决现有方法存在的一系列问题,本文将传统的分类任务转化为文本问答任务,提出一种基于提示工程的智能合约漏洞检测方法P r o m p t-e n h a n c e d C h a t G P T。提示工程(p r o m p t e n g i n e e r i n g)是一种技术策略,旨在通过设计和优化输入大语言模型的提示文本
21、,引导模型生成更准确、更符合预期的结果。该方法以使用标准提示文本的C h a t G P T为研究对象,探索零样本场景下利用大语言模型检测智能合约漏洞的可能性。主要贡献如下:首先,为了避免源码样本过长,本文采用预处理操作去除源码样本中的冗余信息;其次,针对不同的智能合约漏洞类型,分析漏洞的触发原理并设计提示文本模板,包括“任务描述”“漏洞描述”“检测步骤”“推17 信 息 对 抗 技 术2 0 2 4年理过程”和“答案格式”;最后,将该提示文本模板输入大语言模型生成漏洞检测结果并提供合理的分析。与传统检测工具相比,本文所提方法不仅能够在零样本场景下提升漏洞检测性能,而且还能激发大语言模型的推理
22、潜能,生成具有可解释性的检测结果。1 方案设计P r o m p t-e n h a n c e d C h a t G P T的检测流程包含数据预处理、提示文本设计和生成漏洞检测结果3个部分。数据预处理旨在去除源码样本中的注释、版本号以及相关链接等文本。提示文本基于任务目的、智能合约漏洞原理和人工检测流程等方面进行设计,分别对应提示文本模板中的“任务描述”“漏洞描述”“检测步骤”“推理过程”和“答案格式”。P r o m p t-e n h a n c e d C h a t G P T将按照提示文本对智能合约源码开展漏洞检测,最终依照提示文本中的“答案格式”给出最终的检测结果。首先,从以太
23、坊平台获取未经处理的智能合约源码,经数据预处理后输入大语言模型。接着,按照智能合约漏洞类型、人工检测步骤和增强可解释性的 要 求 设 计 提 示 文 本,输 入 大 语 言 模 型。最终,大语言模型根据预处理后的智能合约源码以及提示文本输出漏洞检测报告,根据答案格式提取漏洞检测标签。总体的方法框架如图1所示。图1 基于提示工程的智能合约漏洞检测方法框架图F i g.1 O v e r v i e w o f s m a r t c o n t r a c t v u l n e r a b i l i t y d e t e c t i o n m e t h o d b a s e d o
24、n p r o m p t e n g i n e e r i n g1.1 问题定义本文重点关注智能合约中常见的4种漏洞类型:时间戳依赖漏洞tT P(t i m e s t a m p d e p e n d e n c y,T P)、委托调用漏洞dD D(d a n g e r o u s d e l e g a t e c a l l,D D)、重入漏洞rR E(r e e n t r a n c y,R E)和整数溢出漏洞iI O(i n t e g e r o v e r f l o w,I O)。对 于 漏 洞vitT P,dD D,rR E,iI O,每份完整的智能合约源码文件C
25、包含多个合约函数c1,c2,cn;其中,n为合约函数的个数。每个合约函数cj1jn 拥有标签yj=0,1 ,其中,yj=1表示cj存在漏洞vi。零样本场景下的智能合约漏洞检测为:已知待检测源码C,在未知任何标签数据的前提下检测每个合约函数cj是否存在漏洞vi。为了使用大语言模型进行智能合约漏洞检测,本文首先引入基于标准提示文本模板的检测方法,对于待检测源码C、标准提示文本模板P和概率模型PLM,大语言模型根 据 公 式 生 成 回答A:p(A|P,C)=|A|i=1PLM(ai|P,C,ai)(1)式中,ai表示第i个词元(大语言模型中表示文字的最小单位),A表示最终回答的长度,ai表示第i个
26、词元之前的所有文本。P=T,F 由“任务描述”T和“答案格式”F 2个部分组成。为了进一步提高模型的逻辑推理能力,本文对标准提示文本模板进行设计,使大语言模型更清晰地理解智能合约漏洞检测任务,生成更可靠的结果。1.2 数据预处理待检测的智能合约源码中存在一些冗余语句,如函数功能描述、参数定义、版本号、相关链27第2期耿 辰,等:零样本场景下基于提示工程的智能合约漏洞检测研究 接以及与核心功能无关的注释等。这些元素虽然在合约的开发和维护过程中具有一定的价值,但在进行代码分析和漏洞检测时,此类语句的存在可能干扰模型理解智能合约的执行逻辑,同时作为文本输入时存在超出大语言模型输入上限的可能性,因此需
27、要对原始的智能合约源码样本进行预处理操作,去除以下元素:1)注释文本。注释文本是源码中常见的冗余元素之一,尽管注释文本提供对代码的解释和说明,但它们并不实际参与代码的运行过程,这些注释通常包括函数功能描述和参数定义。2)版本号和相关链接。版本号和相关链接同样属于与代码核心功能无关的注释语句,它们用于标识智能合约编译器的版本以及提供参考文档的链接,这些信息同样可以被去除。通过对源码进行语法分析和正则匹配,能够准确地定位、提取并删除这些冗余语句,得到待检测源码C。C中保留智能合约源码中的核心语义,包括函数定义、变量声明以及关键的流程控制语句,有助于模型理解代码功能并生成更准确的漏洞检测结果。图23
28、为数据预处理前后的智能合约源码示例图。图2 数据预处理前的智能合约源码示例F i g.2 E x a m p l e o f s m a r t c o n t r a c t s o u r c e c o d e b e f o r e d a t a p r e p r o c e s s i n g图3 数据预处理后的智能合约源码示例F i g.3 E x a m p l e o f s m a r t c o n t r a c t s o u r c e c o d e a f t e r d a t a p r e p r o c e s s i n g1.3 智能合约漏洞描述为
29、了让大语言模型从文本角度理解待检测漏洞的类型,本文从源码角度分析4种漏洞的触发原理并将抽象的漏洞形式转化为具象的漏洞描述添加至提示文本模板中。4种漏洞在代码上的表现形式及典型示例如下:1)时间戳依赖漏洞。在智能合约中,当函数将区块时间戳作为执行关键操作(例如转账)的决策条件时,可能存在时间戳依赖漏洞。在图4所示的智能合约示例中,用户调用第1 0行的g e t S e c r e t N u m b e r函 数 以 获 取 一 个“秘 密 数字”。然而,攻击者可以在首次访问合约之前等待至少1 m i n的时间,接着再进行首次访问。通过此种 方 法,攻 击 者 可 绕 过 第1 2行 的 条 件
30、 语句,即与时间戳相关的变量限制,从而立即获取“秘密数字”。图4 时间戳依赖漏洞示例F i g.4 E x a m p l e o f t i m e s t a m p d e p e n d e n c y v u l n e r a b i l i t y2)委托调用漏洞。委托调用是智能合约中的一种机制,允许调用者在当前合约中执行被调用合约的代码。然而,如果攻击者修改委托调用函数的参数,可能存在操控合约并执行任意代码的风险。在图5所示的智能合约示例中,第8行的e x e c u t e D e l e g a t e C a l l函数允许调用者执行委托调用,并将指定的数据传递给第9行的
31、信任合约t r u s t e d C o n t r a c t。委托调用是通过第1 1行的d e l-e g a t e c a l l函数来实现的,这意味着被调用合约的代码会在当前合约中执行。然而,攻击者可以构建一个包含特殊逻辑或恶意操作的合约,接着将该恶意合约的地址设置为t r u s t e d C o n t r a c t,并调用e x e c u t e D e l e g a t e C a l l函数以触发委托调用,从而执行恶意代码。3)重 入 漏 洞。当 用 户 在 智 能 合 约 中 使 用c a l l.v a l u e指令进行资金转移时,可能会引发潜在37 信 息
32、 对 抗 技 术2 0 2 4年的重入漏洞,从而导致安全风险。重入漏洞使攻击者有可能在单次函数调用期间多次进入合约,从而导致非法资金转移或其他不当行为。在图6所示的代码示例中,攻击者首先部署B a n k合约,接着调用B a n k合约中第4行的d e p o s i t函数进行存款操作。接下来,攻击者调用A t t a c k合约中第1 6行的w i t h d r a w函数,该函数会调用B a n k合约中第1 1行的m s g.s e n d e r.c a l l函数,从而尝试调用A t t a c k合约中的收款函数。若调用失败,则会转而尝试调用A t t a c k合约中第8行的
33、f a l l b a c k函数。在本例中,A t t a c k合约中不存在 收 款 函数,因此攻击者利用A t t a c k合约中第8行的恶意f a l l b a c k函数不断提取资金,直至将用户的余额全部转移,从而造成财产损失。图5 委托调用漏洞示例F i g.5 E x a m p l e o f d a n g e r o u s d e l e g a t e c a l l v u l n e r a b i l i t y图6 重入漏洞示例F i g.6 E x a m p l e o f r e e n t r a n c y v u l n e r a b i l
34、i t y4)整数溢出漏洞。当智能合约中的算术操作尝试生成超出整数数据类型范围的数值时,可能会引发整数溢出漏洞。图7为整数溢出漏洞的示例,在该示例中,第2行将m a x V a l u e初始化为最大的u i n t 2 5 6数据类型值。攻击者可以通过调用第4行的a d d函数,提供1个较大的自定义值,m a x V a l u e在第5行加上该值时,会导致整数溢出的情况,从而引发整数溢出漏洞。图7 整数溢出漏洞示例F i g.7 E x a m p l e o f i n t e g e r o v e r f l o w v u l n e r a b i l i t y根据每种智能合约
35、漏洞的触发原理,构建提示文本中相关漏洞的文字描述,每种漏洞类型的具体描述见表1所列。表1 智能合约漏洞描述T a b.1 T h e d e s c r i p t i o n o f s m a r t c o n t r a c t v u l n e r a b i l i t y 漏洞名称漏洞描述时间戳依赖漏洞当一个函数将区块时间戳作为条件来执行关键操作(如转账以太币)时,就会存在时间戳依赖漏洞委托调用漏洞委托调用能够调用合约库,它赋予调用者在当前环境中执行被调用合约代码的能力。如果攻击者操纵委托调用合约的参数,便可能控制相关合约并执行恶意代码,引发委托调用漏洞重入漏洞当用户在智能合约
36、内部调用c a l l.v a l u e指令转移资金时,可能存在重入漏洞。攻击者可以重复调用c a l l.v a l u e指令,完成多次资金转移操作整数溢出漏洞当用户尝试创建一个超出整数类型范围的数值时,可能会存在整数溢出漏洞。例如,如果一个数字以2 5 6位无符号数的形式存储在u i n t 2 5 6类型中,它的范围是022 5 6-1。当尝试创建一个不在该范围内的值时,便会引发整数溢出漏洞1.4 检测步骤本文仿照人工检测智能合约时的思考过程,47第2期耿 辰,等:零样本场景下基于提示工程的智能合约漏洞检测研究 在提示文本模板中加入“检测步骤”,引导大语言模型逐步分析漏洞,并生成可靠
37、的推理过程。以1.3节中时间戳依赖漏洞的分析过程为例,人工检测者首先对代码进行整体分析,了解源码中包含的合约名称及其功能。接着,根据待检测漏洞的类型,定位源码中可能存在漏洞的语句。由于本示例关注时间戳依赖漏洞,因此检测者需要重点关注与b l o c k.t i m e s t a m p变量相关的代码语句。如图4所示,在第1 1行,b l o c k.t i m e s t a m p被赋值给c u r r e n t T i m e s t a m p,同时第1 2行的条件语句中包含c u r r e n t T i m e s t a m p。由于该判断语句直接影响合约函数的返回结果,因此
38、可得出该份智能合约源码存在时间戳依赖漏洞的结论。最后,检测者应提供存在漏洞的具体函数名称,即T i m e s t a m p D e p e n d e n c y。按照 上 述 人 工 检 测流程,大语言模型可以在进行漏洞检测时,首先运用其智能合约领域的知识库全面检查代码,接着根据待检测的漏洞类型定位可能存在风险的代码语句,最后按照指定的答案格式呈现检测结果。此外,文献2 0 提出一种利用模型预训练知识的方法,通过在提示文本中添加一个简单的提示语句“L e t s t h i n k s t e p b y s t e p.”,即可成功生成一条推理逻辑链。该方法揭示了大语言模型在零样本推理
39、学习方面的潜力,无须大量的训练数据,即可在处理任务时给出准确的结果,并且能够呈现推理分析的过程,提高结果的可解释性。因此,为了进一步加强大语言模型分析智能合约时的逻辑推理能力,本文在检测步骤的描述文本中加入语句“P l e a s e t h i n k s t e p b y s t e p a n d g i v e y o u r a n s w e r b a s e d o n y o u r r e a s o n i n g p r o c e s s.”(请逐步思考并给出推理过程)。该策略会促使模型生成响应文本时更倾向于一步步给出推理过程,分析待检测源码中的逻辑结构、合约函数和
40、各数据结构之间的调用关系,从而提高模型检测结果的可解释性,降低漏判或误判的风险。1.5 提示文本设计基于以上分析,本文提出的方法在传统提示文本的基础上增加了“漏洞描述”D、“检测步骤”S和“推理过程”R,在零样本场景下引导大语言模型准确地理解任务和检测过程,生成高质量且可靠的检测结果,式(1)中的P修改为:P=T,D,S,R,F (2)最终完整的提示文本模板如图8所示。首先,给出“任 务 描 述”,找 出 所 有 可 能 导 致 漏 洞vi的合约函数;随后,给出待检测漏洞vi的漏洞描述文本D,引导大语言模型根据漏洞描述文本进行 检 测;接 着,按 照 人 工 检 测 流 程 给 出S,并在 其
41、 中 加 入 推 理 分 析 的 指 令 文 本R;最后,大语言模型将根据上述提示文本内容和待检测的智能合约源码C,按照指定的格式F给出检测结果。图8 提示文本模板F i g.8 T e m p l a t e o f p r o m p t t e x t2 实验与分析2.1 数据集本文 采 用 以 太 坊 验 证 数 据 集2 2和S m a r t-B u g s-c u r a t e d2 3数据集开展后续实验,2种数据集均通过爬取部署在以太坊平台上的真实智能合约得到,具有较高的真实性和代表性。其中,S m a r t B u g s-c u r a t e d数据集包含一系列存在漏
42、洞且易受攻击的智能合约,该份数据集专门用于评估检测方法在面对真实漏洞时的表现情况。本文重点关注数据集中4种常见的智能合约漏洞类型,即时间戳依赖漏洞、委托调用漏洞、重入漏洞和整数溢出漏洞。以太坊验证数据集中智能合约源码文件由多个合约样本组成,2种数据集的统计信息见表2所列,其中“/”左侧为以太坊验证数据集的信息,右侧为S m a r t B u g s-c u r a t e d数据集的信息。57 信 息 对 抗 技 术2 0 2 4年表2 数据集各项统计信息T a b.2 V a r i o u s s t a t i s t i c a l i n f o r m a t i o n o f
43、 t h e d a t a s e t时间戳依赖漏洞委托调用漏洞重入漏洞整数溢出漏洞智能合约源码数3 1 5/5 9 7/5 21 2 1 9/3 15 9 1/1 5合约样本数2 2 8 3/53 9 4/5 23 9 9 0/3 11 4 1 1/1 5漏洞合约样本数3 1 5/57 5/5 21 0 4/3 14 2/1 5无漏洞合约样本数1 9 6 8/03 1 9/0 3 8 8 6/0 1 3 6 9/0 2.2 实验环境实验使用O p e n A I公司所提供的C h a t G P T A P I2 4实现漏洞检测功能,具体参数设置见表3所列。其 中,“m o d e l”表
44、 示 模 型 的 具 体 版 本,“t e m p e r a t u r e”表示控制回答文本随机性的随机因子,将其设置为0时能够显著降低模型生成结果的随 机 性,确 保 实 验 的 可 复 现 性;“m a x_t o-k e n s”限制了模型生成文本的最大长度,以确保模型输出的文本长度在合理范围内。表3 C h a t G P T A P I参数设置T a b.3 P a r a m e t e r s e t t i n g s o f C h a t G P T A P IC h a t G P T A P I参数名称C h a t G P T A P I参数值m o d e lg
45、 p t-3.5-t u r b o-0 6 1 3t e m p e r a t u r e0m a x_t o k e n s1 0 2 42.3 评价指标为了评估所提出方法的有效性,使用准确率(a c c u r a c y,A c c)、精确率(p r e c i s i o n,P r e)、召回率(r e c a l l,R e)和F 1分数(F 1-s c o r e,F 1)作为评价指标。准确率是最常见的性能指标之一,表示正确预测的样本数与总样本数之比。精确率是指模型预测为有漏洞的样本中实际有漏洞的比例,反应模型漏洞检测的误报情况。召回率是指实际有漏洞的样本中被正确预测为有漏洞
46、的比例。F 1分数则是精确率和召回率的调和平均,一般F 1分数越高,模型的总体性能就越好。实验重点关注以下3个问题:1)基于提示工程的智能合约漏洞检测方法的性能表现如何?(R Q 1)2)提示文本模板的优化是否有效?(R Q 2)3)P r o m p t-e n h a n c e d C h a t G P T生成的推理过程是否合理?(R Q 3)2.4 指标分析本文对比4种著名的 开 源 静 态 分 析 工 具,O y e n t e1 2、M y t h r i l1 3、O s i r i s2 5和S e c u r i f y2 6,表4列出了这些工具可以检测的漏洞类型以及其他相
47、关信息。表4 开源静态分析工具信息T a b.4 I n f o r m a t i o n o f o p e n s o u r c e s t a t i c a n a l y s i s t o o l s名称可检测漏洞种类T PD DR EI OO y e n t eM y t h r i lO s i r i sS e c u r i f y将 所 提 出 的 检 测 方 法P r o m p t-e n h a n c e d C h a t G P T与使用标准提示文本的C h a t G P T以及上述检 测 工 具 在 以 太 坊 验 证 数 据 集 和S m a r t
48、-B u g s-c u r a t e d数据集上进行综合比较后,最终的实验结果分别见表5和表6所列,其中,n/a表示该方法无法检测此种类型的漏洞。对于以太坊验证数据集,P r o m p t-e n h a n c e d C h a t G P T在T P、D D和I O上均取得了最高的准确率,同时在R E上取得了9 0%的准确率,并且在4种类型的漏洞检测任务上均取得了最高的F 1值。对于S m a r t-B u g s-c u r a t e d数 据 集,P r o m p t-e n h a n c e d C h a t G P T在所有指标上均取得了最好的检测效果。这表明P
49、r o m p t-e n h a n c e d C h a t G P T在漏洞检测的准确率方面表现优异,并且该方法的总体性能高于使用标准提示文本的C h a t G P T以及其他检测工具,证明本文所提方法在识别智能合约漏洞方面具有巨大潜力,充分验证了R Q 1。67第2期耿 辰,等:零样本场景下基于提示工程的智能合约漏洞检测研究 表5 P r o m p t-e n h a n c e d C h a t G P T的检测结果(以太坊验证数据集)T a b.5 T h e d e t e c t i o n r e s u l t o f P r o m p t-e n h a n c
50、 e d C h a t G P T(E t h e r e u m v e r i f i c a t i o n d a t a s e t)M e t h o d s T P D D R E I O A c cP r eR eF 1A c cP r eR eF 1A c cP r eR eF 1A c cP r eR eF 1O y e n t e0.8 7 0.6 7 0.0 4 0.0 7n/an/an/an/a0.9 5 0.0 8 0.0 6 0.0 7 0.7 5 0.0 2 0.8 9 0.0 5M y t h r i ln/an/an/an/a0.7 1 0.5 0 0.1
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100