03.04 以太坊的智能合约和钱包连续被黑客攻击,该如何保资金安全?


智能合约本质是计算机程序,计算机程序就是代码,只要是代码就会大概率出现漏洞。


来看几个案例,4月22日美图合约漏洞导致价值归零,4月24日SMT智能合约类似的漏洞被黑客利用。这是一个很严重的问题,因为普通代码的问题,可能丢失数据、可能造成崩溃,但智能合约的漏洞被利用,造成的是最直接的经济损失。



今年年初,我们看到新加波科研工作者对以太坊上的智能合约做了细致分析,主要是对漏洞进行分析,设计了合约漏洞的形式化验证方法,设计了合约漏洞的检测工具,并在Github上开源。


按照它的分析,大致分成三类:一是贪婪型,有进无出型,相当于以太币锁定在合约上,永远无法取出;二是挥霍型,任何人都可以得到合约中的以太币;三是自杀型,任何用户都可以终止该合约。


研究人员对几万个合约进行了分析,实验结果显示69%的合约存在问题,最大99%都存在问题。就是一小段代码,框出来了,如果用安全加值就不会溢出。但是开发者没有正确采用,它用了一个简单的没有考虑它可能会有溢出的可能,带来了问题,导致后门被利用,漏洞被利用带来了很大的危害。这就是重入攻击,类似还有重放攻击、短地址攻击。


这个问题我们必须得解决,其实有这样一些可能的思路,可以将合约安全性问题得到显著改善:首先是检测,检测包括静态形式化检查和验证机制、动态分析以及模糊测试技术。还有一个思路是对整个链的设计,从新的角度考虑,功能分层,包括对操作系统分装,这两种角度可以同时发力,共同努力让代码质量有一个提升。


来具体谈谈检测技术,这个技术在智能合约里有广泛的应用前景,叫CFI,最早在CCS2005提出,并被广泛应用于安全漏洞分析理论研究之中。前面文章我们发现的一些漏洞是由于底层EVM自身执行机制的问题导致代码的非正常跳转,其实CFI可以防止这种重入的发生。CFI 核心思想是限制程序运行中的控制转移,使之始终处于原有的控制流图所限定的范围内。


最后再来看一些常见的测试,比如模糊测试,通过对目标系统提供非预期的输入,不正常的输入看输出是不是有问题,有的时候靠异常的输入来考验程序。在这种情况下,模糊测试是比较好的手段,针对智能合约可以有另外模糊系统,在另外层面完成合约执行,提高效率,分析结果看会不会发现隐藏的漏洞。



刚才讲代码层的措施,从整个链的设计角度,看是否可以对安全性有所增强。这里面主要提出了链结构分层,底层区块链就做关键数据存储和研究,其他复杂业务在链外进行操作。


从这些分层结构,我们可以得到一些启发:首先链上的合约逻辑复杂性会大大降低,链上的代码本身不会特别的复杂,代码越简单出现漏洞可能性越小,因为漏洞往往都是很复杂的流程,把复杂过程放到链下处理,关键数据存储再用链上合约,这是一个我们能想象到的,从结构的角度来解决安全性的问题。


我最近比较关注一个叫Elastos的项目,它做区块链的操作系统,我觉得这个想法对于安全性有帮助,要基于区块链,基于Elastos创造一个未来安全互联网,这是一个小梦想,当然很难,但是从架构设计上还是有一点启发,把操作系统对于应用访问做了一个分装,所有的应用不能直接访问网络资源,保证分装这一层安全性,这样应用对于网络不透明了,应用操作系统提供了访问机制,这也是一种新的思路。


分享到:


相關文章: