Parity多重签名钱包被盗事件之技术分析

区块链资讯 发布在 区块链 9 5114

事件回顾:

Parity Multisig电子钱包版本1.5+的漏洞被发现,使得攻击者从三个高安全的多重签名合约中窃取到超过15万ETH(约3000万美元)。

原始报告: https://blog.parity.io/security-alert-high-2/

Snip20170720_72

 

如果您使用受影响的Parity钱包合约,请确保将所有资金立即移动到不同的钱包。

 

黑客资金账户:

https://etherscan.io/address/0xb3764761e297d6f121e79c32a65829cd1ddb4d32#internaltx

Snip20170720_73

 

可以看到,一共盗取了153,037 个ETH,受到影响的合约代码均为Parity的创始人Gavin Wood写的Multi-Sig库代码:

Snip20170720_74

 

源码地址位于:

https://github.com/paritytech/parity/blob/4d08e7b0aec46443bf26547b17d10cb302672835/js/src/contracts/snippets/enhanced-wallet.sol

 

攻击过程技术分析还原:

 

第一步:成为合约的owner

 

Snip20170720_75

 

通过往这个合约地址转账一个value = 0 ,msg.data.length > 0 的交易, 执行到_walletLibrary.delegatecall的分支,该函数能无条件的调用合约内的任何一个函数,黑客调用了一个叫做 initWallet的函数:

Snip20170720_76

 

这个函数再次调用initMultiowned函数:

Snip20170720_77

 

不幸的是,initWallet没有检查以防止攻击者在合同初始化后调用到initMultiowned, 这个函数使得这个合约的所有者被改为攻击者,相当于从unix中获得了root权限。

Snip20170720_78

 

注意上图中的传入的攻击者地址: 0xb3764761e297d6f121e79c32a65829cd1ddb4d32,以及initWallet的合约ABI: 0xe46dcfeb,(注ABI计算方法:https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI)

 

第二步: 转账, 剩下的事情就很清晰了,通过调用execute函数转账到黑客的地址:

Snip20170720_79

 

第一个参数: address to= 0xb3764761e297d6f121e79c32a65829cd1ddb4d32, 转账额度116779808c03e4140000是为以Wei为单位的的eth,即 82189000000000000000000,可以通过如下的代码获得具体数值。

Snip20170720_80

 

解决方案:

通过上面的分析可以看到,核心问题在于越权的函数调用, 合约接口必须精心设计和明确定义访问权限,或者更进一步说,合约的设计必须符合某种成熟的模式,或者标准,合约代码部署前最好交由专业的机构进行评审。否则,一个不起眼的代码就会让你丢掉所有的钱。

发文时比特币价格 ¥16094
作者:傅理
原文载于:GoToken观察
版权声明: by nc" sa 作者保留权利。文章为作者独立观点,不代表巴比特立场。

评论:9

您需要登录后才可以回复 登录|注册
    Author Image
    taifei 120 天前

    总感觉是监守自盗!!!代码团队是不是出了问题???

    +1
    +1
    我要点评
    Author Image
    reswz 125 天前

    智能合约的执行在一个隔离系统里完成,能够进入隔离系统的木马,说明智能合约开发者的系统防护措施太弱了…

    +1
    +1
    我要点评
    Author Image
    yun_27897 125 天前

    上次的parity客户端分叉,到现在的钱包漏洞,不会是BTC派Gavin Wood来祸害ETH的吧???

    +1
    +1
    我要点评
    xiaoluoli
    xiaoluoli 125 天前

    晟杰资本:不会那么容易垮掉,有投资价值

    +1
    +1
    我要点评
    Author Image
    yueedeade 125 天前

    始终不明白一个问题,以太坊这么差为什么这些技术粉还如此迷恋它?虚拟币之所以被称之为“币”首先得保证“币”的功能,而这些功能莱特币等一代币即可实现,完全不需要在区块链上搞什么智能合约等二代甚至三代币,这样做也会造成钱包文件膨胀很快,要下载很长时间,钱包的应用操作也极其复杂,根本不利于未来流通使用。你见过莱特币被盗吗?没有吧,莱特币除非你把钱包文件和密码全泄露出去才可能丢币,而以太坊你自己没有任何错误黑客就能屡屡能攻破其代码,就凭它频频出事这一点上你们觉得作为一个未来可支付的货币能胜任吗?连最基本的安全都无法保证还奢谈什么高大尚的智能合约,反正坚决不买以太坊,总有一天技术粉会为其幼稚行为买单的。

    +1
    +1
    我要点评
    瑞波荡漾
    瑞波荡漾 125 天前

    以太坊Parity钱包被盗事件之技术分析 http://t.cn/RKuqXKG

    +1
    +1
    我要点评
    Author Image
    蓝玉 125 天前

    为啥我感觉这个漏洞挺弱智。。。。= = |

    +1
    +1
    我要点评
    xiaoluoli
    xiaoluoli 125 天前

    『Parity多重签名钱包被盗事件之技术分析_巴比特_服务于区块链创新者』http://t.cn/RKuqXKG ​

    +1
    +1
    我要点评
    巴比特资讯
    巴比特资讯 125 天前

    【Parity多重签名钱包被盗事件之技术分析】Parity Multisig电子钱包版本1.5+的漏洞被发现,使得攻击者从三个高安全的多重签名合约中窃取到超过15万ETH。可以看到,黑客一共盗取了153,037 个ETH,受到影响的合约代码均为Parity的创始人Gavin Wood写的Multi-Sig库代码:http://t.cn/RKuqXKG ​

    +1
    +1
    我要点评