关键路径预搜索的符号执行智能合约漏洞检测.pdf
《关键路径预搜索的符号执行智能合约漏洞检测.pdf》由会员分享,可在线阅读,更多相关《关键路径预搜索的符号执行智能合约漏洞检测.pdf(11页珍藏版)》请在咨信网上搜索。
1、DOI:10.3969/297.2024.02.016Mar.2024Electronics and Information EngineeringJOURNALOF APPLIEDSCIENCES2024年3 月Vol.42No.2第42 卷第2 期应用科报学学关键路径预搜索的符号执行智能合约漏洞检测王泽旭包1,2,3,文斌1,31.海南师范大学数据科学与智慧教育教育部重点实验室,海南海口57 11582.中山大学软件工程学院,广东珠海519 0 8 23.海南师范大学信息科学技术学院,海南海口57 1158摘要:针对传统符号执行在不必要、不相关的路径上消耗大量时间与资源,效率低等问题,提出
2、了利用静态检测预扫描智能合约关键路径优化符号执行验证,避免非必要路径搜索增加的资源消耗,实现基于关键路径预搜索的符号执行。该方法与现有主流检测工具进行对比实验,结果显示:Gas耗尽拒绝服务漏洞覆盖率达9 8%,检测准确度为8 4.3%,远高于均值37.2%;对存储覆盖漏洞合约的全覆盖,检测准确率为8 6.1%,验证了该方法的高效性与稳定性。关键词:智能合约;漏洞检测;符号执行;关键路径预搜索;区块链安全中图分类号:P751.1文章编号:0 2 55-8 2 9 7(2 0 2 4)0 2-0 36 4-11Smart Contract Vulnerability Detection of Sy
3、mbolExecution with Critical Path Pre-searchingWANG Zexul,2,3,WEN Bin1,31.Key Laboratory of Data Science and Smart Education,Ministry of Education,Hainan Normal University,Haikou 571158,Hainan,China2.School of Software Engineering,Sun Yat-sen University,Zhuhai 519082,Guangdong,China3.School of Inform
4、ation Science and Technology,Hainan Normal University,Haikou571158,Hainan,ChinaAbstract:This paper proposes a pre-searching paths for symbolic execution method toguide the critical path symbol execution of scanning smart contract vulnerabilities throughstatic detection.This approach aims to avoid un
5、necessary resource consumption of pathsearch,thereby achieving accurate and fast smart contract vulnerability detection.Thismethod is compared with existing mainstream detection tools.The results show that theGas exhaustion denial of service vulnerability coverage reaches 98%,with a detection ac-cur
6、acy of 84.3%,which is far higher than the average value of 37.2%.Furthermore,the fullcoverage of storage coverage vulnerability contracts is realized with a detection accuracyof 86.1%,which validates the efficiency and stability of this method.收稿日期:2 0 2 2-0 8-14基金项目:国家自然科学基金(No.62362029);海南省自然科学基金(
7、No.623RC485)资助通信作者:文斌,教授,研究方向为区块链生态安全、数据安全。E-mail:b i n w e n h a i n n u.e d u.c n365第2 期王泽旭,等:关键路径预搜索的符号执行合约漏洞检测Keywords:smart contract,vulnerability detection,symbol execution,pre-search of criti-cal path,blockchain security智能合约的安全是影响区块链系统可靠性的重要因素 1,随着Defi、元宇宙等去中心化应用的普及,保证负责数字资产及权益分配的智能合约公平性至关重要
8、2-3 。智能合约的主要功能为在分布式运行环境中,实现公平、可靠的数字计算,完成链上状态的更新,它是整个分布式应用(decentralizedapplication,D A p p)的逻辑处理模块。由于区块链上数据具有公开透明等特点 4-5 ,DApp的数据处理逻辑完全暴露在区块链上,黑客利用合约漏洞盗取数字资产的攻击事件层出不穷,这严重影响软件的公平性。智能合约的代码安全漏洞检测是DApp开发中非常重要且不可或缺的环节 6 。目前对于智能合约的安全开发主要包含两部分重要工作:一是使用标准的智能合约代码库,例如OpenZepplin等;二是进行专业的安全漏洞的扫描。智能合约代码库由专业安全人员
9、审计,可以在很大程度上避免攻击,但代码库的漏洞一旦被攻击,所带来的损失是不可计算的 7 。同时,使用代码库的合约也限制了智能合约的扩展和DApp应用功能的丰富性。因此,现存大部分DApp合约代码在合约代码库的基础上完善产品的功能设计,潜在增加了漏洞风险。另外,因受智能合约语言特性及专业安全审计要求高等因素影响,人工智能合约安全审计的费用较高。智能合约安全漏洞自动化检测的需求日益突出与迫切,是产业界和学术界一个重要的研究方向。Oyente8是最先使用符号执行进行漏洞检测的工具,由4个基本组件组成,包括CFG生成器、搜索器、核心分析和验证器模块。CFG生成器对智能合约进行初步分析,并建立了控制流程
10、图。搜索器通过对每个基本块执行信息搜索,收集相关信息并用Z3求解器计算节点条件跳转,确定要分析的分支。核心分析利用搜索器收集的信息识别漏洞类型。最后,验证器会对核心分析模块的分析结果进行验证,消除假阳性的分析结果。总的来说,Oyente作为智能的漏洞检测工具,用字节码作为输入,动态探索程序控制流程图,并结合路径约束、变量等信息,来检测智能合约的漏洞。文献 9 提出了一种基于符号执行的新方法GasChecker来检测智能合约字节码中Gas效率低的编程模式,并将其定制为MapReduce编程模型来并行化,实现大量低Gas效率代码检测工作,提出了一种基于符号执行的智能合约字节码检测方法。通过将符号执
11、行整合为MapReduce编程来并行化,并提出了一种新的基于反馈的负载平衡策略,以有效利用云资源。大量实验表明GasChecker具有良好的扩展性。实证研究表明,许多实时智能合约都包含各种低效代码。通过人工检验的方式,验证了在检测出的低效率代码中,误报只有2.5%,可靠性较强。现有检测方法存在的问题主要有:1)资源消耗过大智能合约的逻辑设计越来越复杂,代码行数增多,这导致符号执行检测工具面临资源过度消耗和路径爆炸等问题。2)创新性不足现有技术大多由传统软件漏洞检测领域的思想借鉴而来,缺乏针对性和创新性的智能合约安全漏洞检测工具,检测效果较差。3)单一技术能力不足智能合约是较新的语言,相关技术尚
12、未成熟,产业闭环尚未建立,因此需要攻克众多技术难题,多技术融合的检测仍然需要很多工作。针对上述问题,本文提出一种针对区块链智能合约安全漏洞检测的符号执行改进方法,基于关键路径预搜索的符号执行(pre-searchingpaths for symbolic execution,PSSE),用静态检测对智能合约进行预搜索,确定出与检测漏洞相关的关键路径集合,在此基础上结合符第42 卷366应报学学科用号执行完成关键路径是否存在漏洞的验证工作。相比传统单一的符号执行方法,该方法可实现资源合理、有效的利用,具有良好的检测效果。1预搜索符号执行1.1符号执行符号执行是一种符号值代替程序的输入变量,用路径
13、约束表示路径的方法 12-15 。若某一路径的路径约束有解,则确认该路径可抵达,验证漏洞是否存在。传统符号执行分为静态与动态符号执行,静态符号执行对程序的分支树进行分析,动态符号执行则是动态的执行搜索执行树的状态,两者主要的区别在于是否实际运行程序。检测策略源代码代码解析辅助分析符号执行输出结果代码建模约束求解漏洞分析过程图1符号执行检测漏洞流程Figure 1 Symbol execution vulnerability detection process结合源代码进行程序代码建模,生成具有不同程序特征的中间表示语言,如CFG、C G、ICFG等,这些中间语言的分支结构代表不同的执行路径。在
14、此基础上,结合漏洞的检测策略实现动态符号执行,利用约束求解器求解路经约束的输入值,直到整个程序被遍历完成,获得整个执行树状态,完成漏洞检测的工作。1.2基于关键路径预搜索的符号执行本节主要借助混合符号执行 16 ,提出了PSSE,指导符号执行流程,避免不必要的无效路径搜索,提高检测效率、实现性能优化。PSSE将漏洞检测工作分为两个阶段:阶段I为关键路径搜索阶段;阶段II为验证阶段。阶段I关键路径搜索阶段主要采用静态检测的思想,在不运行程序的前提下,实现智能合约源代码的漏洞预扫描,减少时间消耗。如图2 中的阶段I部分所示,利用词法分析、语法分析、中间代码生成等结合区块链、智能合约等属性信息实现精
15、确建模,生成中间语言SlithIR。在中间语言分析的基础上,恢复出一些高级的智能合约语义,如是否包含循环、循环内是否存在全局变量的读写等。结合智能合约漏洞的特点,编写漏洞的搜索策略。将漏洞检测工作分配为不同的任务Task,实现可以漏洞的初步扫描。最终,将漏洞类型、位置等信息整合生成符号执行的指导信息Result_A。阶段II结合指导信息进行测试,利用符号执行技术完成漏洞模式的匹配与检测。将阶段I产生的指导信息Result_A进行解析,生成相对应漏洞函数的调用信息传递给符号执行引擎。如图2 中的阶段II部分所示,符号执行会对漏洞函数的执行路径进行遍历并搜集路径约束,通过约束求解器寻找满足约束条件
16、的输入值。若能在规定时间内找到输入值,则认定在满足特定属性约束条件下该漏洞路径可达,即漏洞存在,否则不存在。367第2 期王泽旭,关键路径预搜索合约漏洞检测CFG和CG变量写入和授权ContradTestIFunction/Statevariableswilten1Conditions onmsg sender1fooIlestmeTask_1工CFG和CG编译器指导信息电智能合约复杂语义合约存储状态是否继承漏洞1 function_1Task_2权限界定漏洞2-function_2漏洞n-function_n智能合约源码ASTSSA生成Result_A信息数据依赖关系数据依赖关系数据依赖关系
17、Task_nFunctionfoo(uint256)FuncionTestfooluint256)执行策略搜素Variable/DependenciesIRSV_1(uint256)=*(ly_17)Expresson.2.vVIMExpression.Z=x计算关键路泾航入值IRS.ITestzTMP_2(DOO)=Z.1=X_1CONDITION TMP_2Funclion testme(utnt256,uint256)Expression:xy+10IRS.IVariable|DependenciesTMP_3(uint256)=y_1+10TMP_4(bOOD=X.1STMP_3CON
18、DITIONTMP_4Expressiontrevertoo验证漏洞是否存在TestzIRS符号执行TMP_5(None)=SOUDITY_CALLrevertOO阶段I:搜索关键路径阶段I:验证阶段返回结果图2 PSSE漏洞检测流程Figure 2 PSSE vulnerability detection process2漏洞原理分析2.1Gas耗尽拒绝服务Gas耗尽拒绝服务的主要原因是当某个函数在实现对动态数组的遍历时,每一次循环都包含对全局状态变量更改等高消耗Gas操作,那么就存在攻击者恶意增加动态数组长度的情况,使得该函数所需的Gas超过区块的最大Gas消耗值,导致该函数无法被打包写入
19、区块,出现拒绝服务的现象。在图3 所示的NavieBank合约中,applyInterest()是一个public类型的函数,主要用来更新用户的利息,会对accounts|数组进行遍历,在遍历中计算用户本息和并更新用户余额。整个函数调用所需Gas的费用是不固定的,随着accountsll数组长度的增大而增加。当攻击者通过恶意攻击制造大量假用户,使得accountsl1数组长度过大,当银行合约在调用1pragmasolidity04.21;2contractNavieBankl3structAccountf4addressaddr:5uintbalance:)6Accountaccounts;7
20、function applylnteresto public return(uint)8for(uinti=j=0.4.0;2contractU_storaget3uintpublicluckNum=52;structGuessf45address player;6uint num;)8Guessll publicguessHistory;9function guess(uint _num)public payablef10Guess newGuess;11newGuess.player=msg.sender;luckNum:52078.7507612newGuess.num=_num;13g
21、uessHistory.push(newGuess);14ifLnum=luckNum)(15msg.sender.transfer(msg.value*2);1617图4覆盖sloto位置上的值Figure 4 Override value at slotO position369第2 期王泽旭,关键路径预搜合约漏洞检测看到当玩家调用guess(52)函数参与游戏时,luckNum的值已经被覆盖为5 2 0 7 8.7 5 0 7 6,用户无法正常获得奖金。2.4存储覆盖漏洞检测方法在阶段I,使用静态检测方法进行分析时,主要借助Sliher的中间语言SlithIR进行。通过对智能合约中的St
22、orage类型变量进行判断,确认是否存在Storage的变量在声明时没有被初始化,若存在则将该Storage变量和漏洞所在的函数信息整合为Result_A作为输出。在阶段I,进行符号执行时,将Result_A的信息进行解析为可疑函数的调用序列,借助符号分析引擎实现对漏洞所在路径的探索。因为阶段I已将可疑漏洞的函数名称等信息进行整合,在本阶段只需完成白盒测试工作,若在某个函数调用前后sloto位置上的值产生了改变,则认定漏洞存在并将最终结果输出。3实验与评估3.1实验数据对于Gas耗尽拒绝服务该类漏洞的数据集,主要从开源数据集中获取,共计10 0 0 份智能合约,平均每个函数有3.5 个循环结构
23、,如图5 和6 所示。存储覆盖漏洞的数据集主要由3 万份链上智能合约源码整理而来(使用静态检测工具初步扫描,结合自动化脚本批量获取疑似存储覆盖漏洞合约),在此基础上通过人工标注的方式获取7 9 份存在存储覆盖漏洞的合约。6000康上号40002000060040060合约数量20020400合约中循环数量图5 循环结构、行数及合约数量分布情况Figure 5 Distribution of circulating structure700600500400300200100日:日011工工13579111315 1719212325合约中循环结构数目图6 循环结构分布密度Figure 6 Di
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关键 路径 搜索 符号 执行 智能 合约 漏洞 检测
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【自信****多点】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【自信****多点】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。