System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 基于快照和LLM的智能合约漏洞模糊测试方法技术_技高网

基于快照和LLM的智能合约漏洞模糊测试方法技术

技术编号:41199784 阅读:5 留言:0更新日期:2024-05-07 22:26
本发明专利技术属于软件测试领域,具体涉及智能合约漏洞检测问题,提供了基于快照和LLM的智能合约漏洞模糊测试方法。本方法首先将插桩后的字节码文件部署到本地区块链节点,并初始化状态交易对语料库和婴态语料库。在模糊测试探索阶段,从状态交易对语料库中选取状态交易对进行变异和执行,同时监测路径点覆盖率变化,将能够提高覆盖率的状态交易对放入状态交易对语料库中,动态监测EVM的加载和存储指令来更新婴态语料库,当覆盖率停滞时,激活LLM模块以生成额外的交易序列,最后,测试循环使用更新后的语料库继续执行,直至达到预定的测试时间。本发明专利技术提供了一种指令覆盖率高且开销小的智能合约漏洞模糊测试方法。

【技术实现步骤摘要】

本专利技术属于软件测试,具体涉及到智能合约漏洞检测问题,提供了基于快照和llm的智能合约漏洞模糊测试方法。


技术介绍

1、智能合约是存储在区块链上的自执行合同,目前在金融服务、物联网、众筹管理和供应链中具有广泛的应用价值。但是由于智能合约一旦部署即不可更改,任何存在的漏洞都可能导致重大的财产损失。其次,智能合约通常处理有价值的数字资产,例如加密货币或数字代币,这些有价值的资产更容易吸引黑客的恶意攻击。2016年,一个充当投资者导向的风险投资项目the dao遭受重入漏洞攻击,造成约7000万美元的损失,最终导致以太坊硬分叉。2022年,uvtoken项目因弱访问控制漏洞导致150万美元的损失。据报道,在2011年到2023年约有167亿美元的加密货币因遭受各种漏洞攻击导致被盗,因智能合约漏洞导致的安全事件层出不穷,不仅造成了严重的经济损失,同时也破坏了人们对区块链和智能合约的信任基础。因此深入研究智能合约漏洞检测尤为重要。

2、模糊测试作为一种流行软件测试技术,其利用随机引擎生成大量非预期输入数据,根据测试反馈不断调整测试用例,探索尽可能多的状态空间以检测潜在安全漏洞。然而,智能合约很多漏洞需要达到特定状态才能够触发,现有工具在重新执行交易序列以到达给定状态时会产生很高的开销。对于探索具有更深状态的程序即需要通过多个交易序列来构建时,重新执行成本会线性增长。最后,由于模糊测试用例生成的随机性,如果变异策略无法突破合约浅层的复杂逻辑,那么将大大降低测试用例的覆盖率从而导致漏报。

3、大语言模型(large language model,llm)是指在大规模文本数据上训练的神经网络语言模型,其模型参数可达数千亿甚至更多。因其在文本生成和推理等任务中的惊人表现引起学术界和工业界的广泛关注。llm凭借其强大的语义理解能力,在智能合约漏洞检测任务上拥有较高的查全率,但是其精度比较低,此外对于不同类型的漏洞检测性能也存在差异,比如gpt-4在检测未经检查返回值漏洞方面表现良好,但是在识别短地址攻击漏洞方面表现欠佳。并且llm的设计和训练方法会导致输出的不确定性。


技术实现思路

1、本专利技术解决的问题:克服现有智能合约漏洞模糊测试技术无法快速到达特定状态以及漏报率高的问题,使用快照保存智能合约中有趣的中间状态,同时在给定状态下覆盖率停滞时调用大语言模型llm生成额外的交易序列,提高了智能合约漏洞的检测效率。

2、以太坊虚拟机(ethereum virtual machine,evm)可以被视为一个函数evm:(s×t)→s,其中s表示状态,t表示交易,每次交易的执行evm将状态s和交易t映射到新的状态s中。在对以太坊智能合约进行模糊测试时,会首先搭建一个本地区块链测试网络,并在此网络上部署待测试的合约。本专利技术是基于快照和llm的智能合约漏洞模糊测试方法,具体包括以下步骤:

3、步骤a:智能合约编译部署与模糊测试环境初始化;

4、步骤b:模糊测试探索;

5、步骤c:llm模块激活与额外交易序列生成;

6、步骤d:模糊测试终止。

7、作为优选,所述方法步骤a中,智能合约编译部署与模糊测试环境初始化具体步骤如下:

8、步骤a1:收集待检测的智能合约源代码,使用solidity编译器solc编译智能合约源代码,生成应用程序二进制接口文件和以太坊虚拟机字节码文件,根据应用程序二进制接口文件随机生成初始交易序列;

9、步骤a2:对被测智能合约字节码文件进行插桩并部署到本地区块链节点;

10、步骤a3:初始化状态交易对语料库,存储测试过程中发现的有趣状态和交易对;

11、步骤a4:初始化婴态语料库,存储执行后可能包含未知行为的新状态;

12、步骤a5:加载大语言模型llm,在覆盖率停滞时生成新的交易序列;

13、步骤a6:初始化覆盖率停滞计数器并设置最大停滞长度初始值。

14、作为优选,所述方法步骤b中,模糊测试探索具体步骤如下:

15、步骤b1:从状态交易对语料库中选择一个状态交易对(s,t),其中s表示状态,t表示交易序列;

16、步骤b2:使用比较路标动态监测evm比较指令并计算操作数之间的差异,来衡量当前执行路径与特定目标状态之间的接近程度,如果当前执行路径更接近目标状态,则为婴态语料库中的相关状态增加投票数,然后对状态交易对进行变异,如果变异状态s,使用概率抽样算法从婴态语料库中选择一个较高投票数的状态s_mut,如果变异交易t,则通过结构性变异操作生成变异体t_mut;

17、步骤b3:在evm上执行变异后的状态交易对(s_mut,t_mut),产生新的状态s',监测变异后的状态交易对(s_mut,t_mut)是否增加了路径点覆盖率,如果增加了路径点覆盖率将变异后的状态交易对(s_mut,t_mut)添加到状态交易对语料库中,如果本次执行没有增加路径点覆盖率,则将覆盖率停滞计数器加一;

18、步骤b4:使用数据流路标动态监测evm的加载和存储指令,如果某个内存位置发生过加载指令并且存储指令向该内存位置写入了新的抽象值,该内存位置标识为有趣,如果执行完变异后的状态交易对(s_mut,t_mut)产生的新状态s'包括了对这类有趣内存位置的独特写入操作,则状态s'标识为有趣,将s'添加到婴态语料库中;

19、步骤b5:当婴态语料库的大小达到阈值时,执行剪枝操作,移除最不有趣但被探索次数最多的状态。

20、作为优选,所述方法步骤c中,llm模块激活与额外交易序列生成具体步骤如下:

21、步骤c1:当覆盖率停滞计数器超过最大停滞长度时,llm模块读取当前状态和状态交易对语料库的信息;

22、步骤c2:llm模块识别当前状态覆盖率低的函数,生成提示信息并查询大语言模型,解析模型输出为交易序列;

23、步骤c3:如果llm模块生成的交易序列能够提高覆盖率,则将其添加到状态和交易对语料库中,并重置覆盖率停滞计数器,如果llm生成的交易序列未能提高覆盖率,使用退避策略,增加最大停滞长度。

24、作为优选,所述方法步骤d中,模糊测试终止具体为模糊测试循环将使用更新后的状态交易对语料库和婴态语料库回到步骤b进行变异和执行,直至达到设定的检测时间。

25、有益效果:

26、目前,现有的智能合约模糊测试方法存在测试效率低与指令覆盖率低的问题,其主要原因是智能合约很多漏洞需要达到特定状态才能够触发,现有工具在重新执行交易以到达给定状态时会产生很高的开销。其次由于模糊测试用例生成的随机性,如果变异策略无法突破合约浅层的复杂逻辑,将导致大量漏报。为此本专利技术提供了基于快照和llm的智能合约漏洞模糊测试方法,通过使用快照存储中间状态来减少重新执行交易序列的开销,设计了数据流路标和比较路标机制用于有效存储和选择有趣状态,同时使用llm生成在模糊测试覆本文档来自技高网...

【技术保护点】

1.基于快照和LLM的智能合约漏洞模糊测试方法,其特征包括以下步骤:

2.根据权利要求1所述的基于快照和LLM的智能合约漏洞模糊测试方法,其特征在于,所述方法步骤A中,智能合约编译部署与模糊测试环境初始化具体步骤如下:

3.根据权利要求1所述的基于快照和LLM的智能合约漏洞模糊测试方法,其特征在于,所述方法步骤B中,模糊测试探索具体步骤如下:

4.根据权利要求1所述的基于快照和LLM的智能合约漏洞模糊测试方法,其特征在于,所述方法步骤C中,LLM模块激活与额外交易序列生成具体步骤如下:

5.根据权利要求1所述的基于快照和LLM的智能合约漏洞模糊测试方法,其特征在于,所述方法步骤D中,模糊测试终止具体为模糊测试循环将使用更新后的状态交易对语料库和婴态语料库回到步骤B进行变异和执行,直至达到设定的检测时间。

【技术特征摘要】

1.基于快照和llm的智能合约漏洞模糊测试方法,其特征包括以下步骤:

2.根据权利要求1所述的基于快照和llm的智能合约漏洞模糊测试方法,其特征在于,所述方法步骤a中,智能合约编译部署与模糊测试环境初始化具体步骤如下:

3.根据权利要求1所述的基于快照和llm的智能合约漏洞模糊测试方法,其特征在于,所述方法步骤b中,模糊测试探索具体步骤如下:

【专利技术属性】
技术研发人员:孙家泽刘文杰王小银张恒山
申请(专利权)人:西安邮电大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1