本文围绕以太坊智能合约安全漏洞检测,回顾了区块链技术的发展历程以及智能合约的起源,介绍了智能合约的特点、应用场景和重大安全事件,总结了目前智能合约安全漏洞检测的三类主要方法:静态分析、动态分析和混合分析方法。
智能合约是运行在区块链系统上的计算机程序,其起源与区块链技术的发展紧密相关。2008年,比特币的问世标志着区块链技术的首次应用。作为一种去中心化的点对点电子现金系统,比特币的核心功能在于通过去中心化的账本记录交易,并利用内嵌的非图灵完备脚本对交易进行基本控制。2014年,随着以太坊的推出,区块链技术进入了新的发展阶段,其关键创新在于在比特币脚本的启发下,引入了图灵完备的智能合约。智能合约的出现,标志着区块链从一个单纯的去中心化账本,演变为支持复杂应用的平台。以太坊是支持智能合约的代表性平台。该平台通过以太坊虚拟机(EVM)执行存储在区块链上的程序,并进行数据的读取和写入,从而实现了图灵完备的计算能力。这不仅拓展了区块链的功能范畴,使其超越了简单的转账处理,还赋予了区块链自动执行合约条款、管理数字资产等复杂操作的能力。智能合约的引入,大大扩展了区块链技术的应用场景,推动了其在更广泛领域的应用与发展。与传统程序不同,智能合约具有其独特性。在语言特性方面,以Solidity为例,首先,智能合约引入了address数据类型和payable等关键字,实现了直接在语言层面支持账户定位和支付功能。其次,由于智能合约运行在去中心化的网络上,并依托区块链进行数据存储,编写合约时需要特别注意函数的调用方式,并明确变量的存储位置,以确保合约的正确性和安全性。最后,智能合约具备独特的异常处理机制,一旦发生异常,所有操作都会被回滚,确保合约执行的原子性,避免数据不一致的中间状态。在区块链特性方面,首先,智能合约依托于区块链的去中心化架构,消除了对第三方的依赖,使交易和协议的执行更加透明和可信。其次,区块链的不可篡改性确保了智能合约一旦部署,合约内容便无法轻易更改。此外,区块链的自动执行特性意味着一旦触发,智能合约代码将自动执行预设操作,确保合约严格按照预定规则执行。最后,区块链的透明性和可追溯性使得智能合约的代码和执行结果对所有参与者公开可见,进一步增强了合约执行的透明度,并确保所有交易记录都可以被追溯。
智能合约凭借其去中心化、不可篡改、透明性和可追溯性等特点,在金融、供应链管理、数字身份等领域展现出广泛的应用潜力,具体应用包括基于以太坊的加密货币、域名注册系统、博彩系统、去中心化游戏以及供应链管理系统等。截至2024年2月,Dune Analytics分析平台的数据显示,以太坊链上智能合约的数量已突破5000万。不同应用的智能合约所持有的虚拟货币价值已经超过3000亿美元。
这些携带大量资产的智能合约吸引了大量黑客的关注,导致了一系列的智能合约重大安全事件。2016年6月,攻击者利用DAO合约的重入漏洞,盗取了360万个以太币,约合6000万美元。随后在2017年7月,Parity MultiSig钱包合约中的委托调用漏洞导致超过2.8亿美元的以太币被意外冻结。2018年4月,美链BEC合约中的整数溢出漏洞更是导致超过9亿美元的资产瞬间消失。智能合约中的安全事件并非偶然发生。根据慢雾科技2023年的数据统计,当年7月,Conic Finance的ETH全域池遭遇了一系列小规模黑客攻击,造成约320万美元的损失;紧接着在8月,DeFi项目Earning.Farm遭遇了重入攻击,导致了286个以太币被盗,相当于53万美元的损失。频繁发生的智能合约安全事件及其带来的巨大经济损失,严重威胁了区块链生态系统的稳定性。由于智能合约具有自动执行和不可篡改的特性,一旦部署便不可修改。因此,在将智能合约部署到区块链上之前,检测潜在的漏洞至关重要。智能合约的安全性是区块链中的关键问题之一。国内外许多研究团队已对智能合约的安全性进行了深入探讨和分析。如图1所示,当前智能合约漏洞检测的研究主要集中在3个方向:静态分析、动态分析和混合分析。其中静态分析技术主要包括符号执行、形式化验证、中间表示以及深度学习。动态分析技术侧重于模糊测试和动态污点分析。混合分析技术结合了静态分析与动态分析的优势,例如符号执行与模糊测试的结合以及混合执行等方法。静态分析是在不运行程序的情况下,通过检查源代码、字节码或二进制代码来发现潜在错误或漏洞的方法。智能合约漏洞检测的静态分析技术主要包括符号执行、形式化验证、中间表示以及深度学习。符号执行是将程序变量符号化,并系统地探索所有可能执行路径来分析软件的方法。Oyente是早期使用符号执行技术并基于控制流程图进行智能合约漏洞检测的工具。Oyente以智能合约字节码和以太坊全局状态为输入,解释以太坊虚拟机指令集,并使用以太坊全局状态对变量初始化,从而实现精确的漏洞分析。
形式化验证是把程序中概念、判断、推理转化成形式化模型,以消除程序中的歧义和非通用性特征,然后使用严谨的逻辑和数学证明验证程序功能正确性和安全性的方法。F*是一种形式化验证语言,用于对以太坊虚拟机的语义进行形式化描述,确保智能合约执行过程中语义的一致性。这种形式化描述可以帮助以太坊虚拟机字节码静态分析技术的开发,并为这些技术的健全性提供理论支持。
中间表示是将智能合约的源代码或字节码转化为更适合分析的抽象形式,然后对这种中间形式进行分析以发现合约中安全问题的方法。SmartCheck是最早使用中间表示进行智能合约静态分析的工具。它通过一种用于语言识别的开源语法分析器(ANTLR)和自定义的Solidity语法生成XML解析树作为中间形式,然后在这种中间形式上使用XPath查询来检测智能合约漏洞。
深度学习是将智能合约转化为模型可处理的输入形式,再利用卷积神经网络(CNN)、递归神经网络(RNN)、图神经网络(GNN)等模型来训练和识别潜在漏洞的方法。ReChecker是首个基于深度学习的智能合约重入漏洞检测方法。它将智能合约的源代码转化为合约块的形式,以捕获合约中的基本语义信息和控制流依赖。ReChecker利用双向长短期记忆网络(BLSTM)和注意力机制(Attention)实现了对以太坊智能合约重入漏洞的自动化检测。动态分析是在程序运行时监视其行为,以发现潜在错误或漏洞的方法。在智能合约漏洞检测中,动态分析技术主要包括模糊测试和动态污点分析。模糊测试是动态分析技术的研究热点。它通过生成测试用例并输入到目标程序中,探索其代码空间,同时监控运行过程中的异常结果,以发现智能合约中的潜在漏洞。模糊测试的主要优势在于能够在真实场景中运行智能合约,并实时检测异常情况。因此,模糊测试的误报率通常较低,使其在漏洞检测中具有良好的可靠性和实用性。ContractFuzzer是首个将模糊测试应用于智能合约漏洞检测的框架,主要包括两个部分:离线以太坊虚拟机插桩工具和在线模糊测试工具。离线以太坊虚拟机插桩工具负责对以太坊虚拟机进行插桩,使在线模糊测试工具能够监测智能合约的执行,从而提取用于漏洞分析的信息。在在线模糊测试的过程中,ContractFuzzer首先分析智能合约的ABI接口和字节码,生成符合ABI规范的有效模糊测试输入以及超出有效边界的变异输入。接着,ContractFuzzer开始模糊测试,将生成的输入传入到随机调用的ABI接口中。最后,通过分析模糊测试过程中生成的执行日志来检测漏洞。动态污点分析在程序运行时进行,通过标记和跟踪输入数据在程序中的传播路径来检测潜在漏洞。污点分析常被用来检测数据泄露和内存损坏攻击。Sereum是首个将污点分析运用于智能合约执行平台的工具,利用污点分析来监控从存储变量到控制流决策的数据流动。其主要思路是引入两个新组件以扩展以太坊虚拟机:污点引擎和攻击检测器。污点引擎执行动态污点跟踪;动态污点跟踪将标签分配给预定义的源数据,然后观察这些标记数据如何影响程序执行。攻击检测器利用污点引擎来监控程序的执行状态,并识别出可能正在发生的重入。混合分析近年来成为智能合约漏洞检测的热点技术,它结合了动态分析和静态分析的优点,从而有效提升漏洞检测的准确率。混合分析技术主要包括动态分析与静态分析的结合(例如符号执行与模糊测试的结合),以及混合执行(如动态符号执行)。符号执行工具由于过度近似可能产生误报,而传统的模糊测试工具通常擅长发现浅层漏洞,对执行路径深处的漏洞则不够敏感,导致代码覆盖率低且漏报较多。为了解决这些问题,ConFuzzius将符号执行与模糊测试结合,成为首个应用于智能合约的混合模糊测试工具。ConFuzzius通过进化模糊测试来处理智能合约的浅层部分,并利用约束求解生成满足复杂条件的输入,从而突破进化模糊测试在探索深层漏洞时的限制。此外,ConFuzzius还运用动态数据依赖分析,高效生成更可能暴露漏洞的交易序列。
动态符号执行旨在最大化代码覆盖率,它在实际执行代码过程中利用约束求解系统地探索程序的状态空间。该过程首先用符号变量代替程序中的实际输入,然后在程序执行过程中记录这些符号变量的变化及其对程序状态的影响。通过分析这些符号变量的约束条件,可以探索不同的执行路径,从而发现潜在的错误或漏洞。Manticore是一个支持二进制文件和智能合约的动态符号执行框架,它的仿真环境能够处理任意数量的交互合约,不仅能跟踪单个合约的状态,还能处理多个交互合约的交易,从而全面探索程序的状态空间。
智能合约是运行于区块链上的自动执行程序。随着区块链技术的快速发展,智能合约的应用越来越广泛,其携带的数字资产已经超过3000亿美元。这一巨大的经济价值引起了黑客的觊觎,他们妄图攻击智能合约,以非法获取经济利益。而智能合约的漏洞提供了黑客窃取数字资产的途径,导致安全事件频发,经济损失严重。近年来,国内外许多研究团队已对Solidity智能合约的安全性进行了深入探讨和分析,主要研究集中于三个方向:静态分析、动态分析以及混合分析。这些研究对于维护智能合约的安全以及区块链生态系统的稳定性具有重要意义。
致谢:感谢国家自然科学基金项目“面向区块链智能合约漏洞自动检测与修复的符号逻辑建模与推理”(项目编号:61972360)的支持。
本文刊登于IEEE Spectrum中文版《科技纵览》2024年8月刊。何 龙:研究生。
赵相福(通讯作者):博士,教授,烟台大学计算机与控制工程学院区块链安全与智能检测实验室。IEEE Spectrum
《科技纵览》
官方微信公众平台
>>>本文为原创,转载请回复。<<<