巴比特
服务于区块链创新者
事件回顾:
Parity Multisig电子钱包版本1.5+的漏洞被发现,使得攻击者从三个高安全的多重签名合约中窃取到超过15万ETH(约3000万美元)。
原始报告: https://blog.parity.io/security-alert-high-2/
如果您使用受影响的Parity钱包合约,请确保将所有资金立即移动到不同的钱包。
黑客资金账户:
https://etherscan.io/address/0xb3764761e297d6f121e79c32a65829cd1ddb4d32#internaltx
可以看到,一共盗取了153,037 个ETH,受到影响的合约代码均为Parity的创始人Gavin Wood写的Multi-Sig库代码:
源码地址位于:
https://github.com/paritytech/parity/blob/4d08e7b0aec46443bf26547b17d10cb302672835/js/src/contracts/snippets/enhanced-wallet.sol
攻击过程技术分析还原:
第一步:成为合约的owner
通过往这个合约地址转账一个value = 0 ,msg.data.length > 0 的交易, 执行到_walletLibrary.delegatecall的分支,该函数能无条件的调用合约内的任何一个函数,黑客调用了一个叫做 initWallet的函数:
这个函数再次调用initMultiowned函数:
不幸的是,initWallet没有检查以防止攻击者在合同初始化后调用到initMultiowned, 这个函数使得这个合约的所有者被改为攻击者,相当于从unix中获得了root权限。
注意上图中的传入的攻击者地址: 0xb3764761e297d6f121e79c32a65829cd1ddb4d32,以及initWallet的合约ABI: 0xe46dcfeb,(注ABI计算方法:https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI)
第二步: 转账, 剩下的事情就很清晰了,通过调用execute函数转账到黑客的地址:
第一个参数: address to= 0xb3764761e297d6f121e79c32a65829cd1ddb4d32, 转账额度116779808c03e4140000是为以Wei为单位的的eth,即 82189000000000000000000,可以通过如下的代码获得具体数值。
解决方案:
通过上面的分析可以看到,核心问题在于越权的函数调用, 合约接口必须精心设计和明确定义访问权限,或者更进一步说,合约的设计必须符合某种成熟的模式,或者标准,合约代码部署前最好交由专业的机构进行评审。否则,一个不起眼的代码就会让你丢掉所有的钱。
作者:傅理
原文载于:GoToken观察
稿源:http://www.8btc.com/parity-multisig
文章为作者独立观点,不代表巴比特立场。
回复以下关键词查阅相关区块链资料
回复 区块链报告 免费下载 《37份国内证券行业发布的区块链研究报告》
回复 工信部 免费下载 《中国区块链技术和应用发展白皮书》
回复 超级账本 免费下载《超级账本Hyperledger白皮书》
回复 比特币白皮书,免费下载《比特币:一种点对点的电子现金系统》
回复 以太坊,免费下载《以太坊白皮书》
回复 侧链 免费下载《侧链白皮书:用楔入式侧链实现区块链的创新》
回复 欧洲央行 免费下载《欧洲央行分布式账本技术报告》
回复 高盛 免费下载 《高盛区块链报告:区块链 从理论走向实践》
回复 闪电网络 查看《详解最近大热的闪电网络、雷电网络和CORDA到底是什么》
回复 闪电网络白皮书 免费下载《比特币闪电网络白皮书:可扩展的 off-chain 即时支付》
回复 麦肯锡 免费下载《麦肯锡区块链报告:银行业游戏规则的颠覆者》
回复 IBM 免费下载《IBM 区块链热点技术与应用》
回复 毕马威 免费下载《毕马威区块链研究报告:价值互联的不变协议 》
回复 金融科技 免费下载《中国领先金融科技50强》