晴天财经阁8星评价
2020-05-08 14:52:40
智能合约本质是计算机程序,计算机程序就是代码,只要是代码就会大概率出现漏洞。
来看几个案例,4月22日美图合约漏洞导致价值归零,4月24日SMT智能合约类似的漏洞被黑客利用。这是一个很严重的问题,因为普通代码的问题,可能丢失数据、可能造成崩溃,但智能合约的漏洞被利用,造成的是最直接的经济损失。
今年年初,我们看到新加波科研工作者对以太坊上的智能合约做了细致分析,主要是对漏洞进行分析,设计了合约漏洞的形式化验证方法,设计了合约漏洞的检测工具,并在Github上开源。
按照它的分析,大致分成三类:一是贪婪型,有进无出型,相当于以太币锁定在合约上,永远无法取出;二是挥霍型,任何人都可以得到合约中的以太币;三是自杀型,任何用户都可以终止该合约。
研究人员对几万个合约进行了分析,实验结果显示69%的合约存在问题,最大99%都存在问题。就是一小段代码,框出来了,如果用安全加值就不会溢出。但是开发者没有正确采用,它用了一个简单的没有考虑它可能会有溢出的可能,带来了问题,导致后门被利用,漏洞被利用带来了很大的危害。这就是重入攻击,类似还有重放攻击、短地址攻击。
这个问题我们必须得解决,其实有这样一些可能的思路,可以将合约安全性问题得到显著改善:首先是检测,检测包括静态形式化检查和验证机制、动态分析以及模糊测试技术。还有一个思路是对整个链的设计,从新的角度考虑,功能分层,包括对操作系统分装,这两种角度可以同时发力,共同努力让代码质量有一个提升。
来具体谈谈检测技术,这个技术在智能合约里有广泛的应用前景,叫CFI,最早在CCS2005提出,并被广泛应用于安全漏洞分析理论研究之中。前面文章我们发现的一些漏洞是由于底层EVM自身执行机制的问题导致代码的非正常跳转,其实CFI可以防止这种重入的发生。CFI 核心思想是限制程序运行中的控制转移,使之始终处于原有的控制流图所限定的范围内。
最后再来看一些常见的测试,比如模糊测试,通过对目标系统提供非预期的输入,不正常的输入看输出是不是有问题,有的时候靠异常的输入来考验程序。在这种情况下,模糊测试是比较好的手段,针对智能合约可以有另外模糊系统,在另外层面完成合约执行,提高效率,分析结果看会不会发现隐藏的漏洞。
刚才讲代码层的措施,从整个链的设计角度,看是否可以对安全性有所增强。这里面主要提出了链结构分层,底层区块链就做关键数据存储和研究,其他复杂业务在链外进行操作。
从这些分层结构,我们可以得到一些启发:首先链上的合约逻辑复杂性会大大降低,链上的代码本身不会特别的复杂,代码越简单出现漏洞可能性越小,因为漏洞往往都是很复杂的流程,把复杂过程放到链下处理,关键数据存储再用链上合约,这是一个我们能想象到的,从结构的角度来解决安全性的问题。
我最近比较关注一个叫Elastos的项目,它做区块链的操作系统,我觉得这个想法对于安全性有帮助,要基于区块链,基于Elastos创造一个未来安全互联网,这是一个小梦想,当然很难,但是从架构设计上还是有一点启发,把操作系统对于应用访问做了一个分装,所有的应用不能直接访问网络资源,保证分装这一层安全性,这样应用对于网络不透明了,应用操作系统提供了访问机制,这也是一种新的思路。
可待成追忆10星评价
2020-05-08 14:58:03
以太坊智能合约的漏洞真是多的不要不要的了。三天内连续被黑客攻击,蔡文胜的BEC中招,物联网概念的SMT今晨也中招。
就连以太坊钱包Myetherwallet也被黑了,截止发稿为止,黑客总共盗窃了550个eth。不禁要问,还有更安全的区块链技术吗?如何做好安全防范措施?让我们拭目以待!
4月25日早间,火币Pro公告,SMT项目方反馈今日凌晨发现其交易存在异常问题。受此影响,火币Pro现决定暂停所有币种的充提币业务。
目前所有基于ERC20的币种仍然恢复充提业务,可见这次智能合约的漏洞影响多严重,直接打垮了所有基于ERC20的币种。而同样深到SMT影响的还有另外一个交易所OKEX。
虽然交易所可以采取“交易回滚”的方式处理异常交易,但是如果钱包里的币被到了,那就怎么也追不回来了。
譬如昨晚,就有黑客攻击了以太坊钱包Myetherwallet
虽然收到了不安全的提示,但他仍然尝试继续登陆。
尽管我身体的每个细胞都告诉我不要尝试登录,但我还是强行登录了。在我强行登陆后,出现约10秒钟的倒计时,然后我钱包中的ETH就被发送到另一个钱包中!
等到从Etherscan上看到交易已经完成,这时他才意识自己可能是被骗了。在该用户发帖时,总计约 524ETH 收已经被转入到两个黑客地址中。
地址如下:
0x1d50588C0aa11959A5c28831ce3DC5F1D3120d29
0xf203a3B241deCAFD4BdEBBb557070db337d0Ad27
不久以太坊钱包Myetherwallet通过官推发布一篇推文,确认Myetherwallet服务器遭到DNS劫持攻击:
这波针对以太坊钱包Myetherwallet的是DNS攻击,总共持续约4小时。如果这4小时中,登录过以太坊钱包Myetherwallet的用户私钥都可能被偷。
所以温馨提醒各位手里有着很多姨太或者持有建立在以太坊智能合约上币种的朋友,赶紧登陆自己的账户,检查下资金。
那么,为何以太坊的智能合约等会有这么多漏洞,而比特币到目前为止还没有类似的?这主要是以太坊和比特币的技术生态不同大有关系。
由于以太坊支撑矿池、钱包、web3、 Smart Contract、Dapp,为了全部生态的便利,增加了认证和鉴权环节,所有基于以太坊的项目可以间接挪用智能合约。而比特币的生态包含矿池、钱包、Lightning Network,有认证环节,所以在这方面是绝对平安。
但还得提醒一句,比特币一样存在着延展性攻击,双花等可以被利用的BUG。所以,还有更安全的区块链技术吗?我们一起拭目以待。
那么,针对以太坊频频暴露的安全漏洞,有什么好的防范措施呢?
给文末给各位提供一下六大安全建议:
1. 变动默许的 RPC API 端口,设置办法如:–rpcport 8377 或 –wsport 8378
2. 变动 RPC API 监听地点为内网,设置办法如:–rpcaddr 192.168.0.100 或 –wsaddr 192.168.0.100
3. 设置 iptables 限定对 RPC API 端口的拜访,举例:只许可 192.168.0.101 拜访 8545 端口:
iptables -A INPUT -s 192.168.0.101 -p TCP –dport 8545 -j ACCEPT
iptables -A INPUT -p TCP –dport 8545 -j DROP
4. 账户信息(keystore)不要存放在节点上
5. 任何转账均用 web3 的 sendTransaction 和 sendRawTransaction 发送私钥署名过的 transaction
6. 私钥物理断绝(如冷钱包、手工誊写)或许高强度加密存储并保证密钥的平安