SolSaviour: A Defending Framework for Deployed Defective Smart Contracts
本文是一篇TEE与区块链结合的工作,由PolyU的Bin Xiao老师团队发表于ACSAC 21‘,第一作者为Zecheng Li。
Background
这里作者把智能合约的生存周期分为四个阶段:
CREATION 合约代码写作,编译并通过一个交易发布在网络上。
FREEZE 合约被提交到网络上,所有功能可以通过网络的RPC被访问到。
EXECUTION 执行阶段,此时网络上的所有miner都会维护合约的字节码和状态,任何对合约的修改都要通过相应的交易执行。
FINALIZATION 交易被网络承认,新状态已经写入。
Design
整体视图:
分为两部分,voteDestruct和TEE cluster。
•voteDestruct是合约代码的一部分,可以保证在销毁合约时的投票行为,当合约遇到风险时,可以通过投票来将整个合约析构。•TEE集群提供了三种功能:资产看护,合约重部署和状态迁移。
工作流程:
1.所有用户一起启动部署流程,然后把启用了voteDestruct的合约发送到TEE集群上。2.TEE集群生成合约的创建交易,并把它发送到链上执行。3.当遇到合约bug时,合约的持有者可以启动TEE集群来将合约状态转变为LOCKED,直到整个vote阶段结束;或者向TEE上传一个修补过的合约。4.TEE集群将合约置为LOCKED。5.合约的持有者可以投票来决定是否析构它。6.TEE集群启动析构流程,执行selfdestruct指令,将所有的ether都转移到TEE集群当中。7.TEE集群收到资产。8.简单的方法是直接将资产分配给他们的持有者;或者重新部署一个在3.修补过的合约。9.TEE会将内部状态重新部署给新合约。
EXPERIMENT
在实验中,作者使用了Solidity和Intel SGX来实现这个原型系统,代码量约2000行,TEE集群共设计了四个节点。
整个实验分为两部分:有效性和性能。
Data
为了精准地测出有效性和性能表现,作者选取了经历过真实攻击的合约,并爬取了这些合约的交易历史。
具体收集的合约如下:
实验中准备了对应的 “含有voteDestrut机制的合约” 和已经修补过的合约。voteDestruct机制是直接在源代码层面加入的;因为各个合约使用的编译器版本不同,各个合约加入的机制代码也稍有差异。
Effectiveness
对有效性的测试分为:定性和定量。
定性测试:SolSaviour是否能从收集的缺陷合约中全量退出资产,并将相应资产退还给持有者,且重新部署一个修复的合约。
定量测试:对比原始合约和SolSaviour保护的合约,对比他们在遇到攻击时的损失。
具体结果如下:
Performance
性能角度主要测试:合约大小的变化、gas消耗、TEE overhead。
原文始发于微信公众号(COMPASS Lab):【论文分享】SolSaviour: A Defending Framework for Smart Contracts