关键词:
区块链
以太坊
智能合约
漏洞检测
漏洞防御
漏洞修复
摘要:
以比特币为代表的区块链早期时代,区块链应用主要集中在数字货币领域。自从第一个智能合约区块链平台以太坊发布以来,由于有了图灵完备的智能合约的支持,区块链开始在各大领域广泛应用。然而,智能合约的安全问题却造成了巨额的资产损失,打击了用户对区块链的信心。以太坊作为目前流行的智能合约区块链平台之一,成为了学术界、工业界的研究热点。以太坊智能合约安全形势严峻的根源主要为以下三点:一是开发者对新型的合约编程语言及合约特性不够熟悉,导致合约频出漏洞,但现有的漏洞检测工具准确度低;二是合约运行在去中心化的区块链网络中,攻击面涉及甚广,但已有的链上攻击防御策略可扩展性差;三是合约一旦部署上链便无法修改,即使存在漏洞也难以修复,现有的合约修复策略大多面向链下合约,难以修复已部署上链的漏洞合约。为了增强以太坊智能合约的安全性,应当从合约在链下测试和链上运行全面考虑,提供合约的漏洞安全防护措施,具体来说包括以下三个方面。
针对智能合约漏洞频出且现有工具检测准确度低的问题,基于静态程序分析和模糊测试技术,提出了一种自动化的漏洞验证方案,可以有效地检测目标位置是否存在漏洞,提高合约代码安全性。为提高模糊测试输入的有效性,提取所有从函数入口到目标位置的切片,并进一步基于数据流和控制流分析提取所有切片的路径约束,进而分离出输入约束和状态约束。基于输入约束生成到达目标行的输入,基于状态约束生成能调整合约状态的交易序列,最后合成能探索目标位置的测试案例。同时基于距离的变异策略和基于目标位置特征的引导策略,以快速找到满足路径约束的输入。为了在尽量避免探索目标位置无关路径的同时,更快找到攻击交易,采用基于执行子树覆盖率的输入变异策略,优化交易生成。实验表明,该方案比三个现有合约漏洞检测工具准确率分别高41.85%、7.8%和33.29%。
针对链上合约频繁遭受攻击且现有防御方案可扩展性低的问题,基于输入过滤器,提出了一种可实时增加防御策略的漏洞类型无关的防御方案,有效拦截攻击交易,提高合约运行安全性。为了降低给矿工带来的开销,同时灵活地部署防御策略,该方案解耦合防御实现模块与部署模块。即矿工只需升级一次,将防御部署模块嵌入到以太坊虚拟机中,合约拥有者负责具体的防御实现。针对合约漏洞多样化难以实现统一防御措施的问题,该方案提出了基于输入过滤器实现多样化的防御合约。同时设计了奖惩机制,激励矿工参与到漏洞防御中。通过安全分析论述了系统的安全性。实验表明,该方案可以拦截恶意交易,同时给矿工和合约用户带来的额外开销在可接受范围内。
针对链上合约代码无法修改且现有修复方案通用性低的问题,基于合约修复模板与静态程序分析技术,提出了一种面向链上智能合约的自动化修复方案,实现漏洞修复,提高合约维护安全性。为了在去中心化环境中实现有效的漏洞修复,该方案将修复策略置于独立的补丁合约中。以以太坊智能合约三种典型的漏洞即重入、未检查的底层调用和整数漏洞为例,设计了修复合约模板,并基于程序分析和代码合成技术自动化生成漏洞合约的补丁。该方案通过在链上绑定漏洞合约和补丁合约,实现这两类合约功能的整体性,即当交易调用漏洞合约时,也会触发补丁执行,验证交易执行状态,保证合约即使存在漏洞也能安全运行,实现间接修复合约。实验表明,Aroc以93.32%的正确率修复95.95%的漏洞合约。Aroc给智能合约用户和矿工带来的额外开销在可接受的范围内。与现有的工具对比,Aroc引入较少的执行开销或者合约代码。
综上所述,围绕以太坊智能合约漏洞安全防护,基于程序分析技术及智能合约特征,分别从智能合约开发测试期间的漏洞验证,到合约上链执行后的漏洞防御、漏洞修复展开研究。尽量在链下检测出合约的所有漏洞,同时也在链上提供漏洞攻击的防御、修复措施,三种方案相辅相成,为以太坊智能合约提供多维度的安全保障。