Title: 【技术】黑客盗取3000万eth美元事件之技术分析 Post by: kuogen on July 22, 2017, 01:18:31 PM Parity钱包被盗事件回顾:
Parity Multisig电子钱包版本1.5+的漏洞被发现,使得攻击者从三个高安全的多重签名合约中窃取到超过15万以太坊(约3000万美元)。 原始报告: https://blog.parity.io/security-alert-high-2/ 1_看图王.png 如果您使用受影响的Parity钱包合约,请确保将所有资金立即移动到不同的钱包。 黑客资金账户: https://etherscan.io/address/0xb3764761e297d6f121e79c32a65829cd1ddb4d32#internaltx 2_看图王.png 可以看到,一共盗取了153,037 个ETH,受到影响的合约代码均为Parity的创始人Gavin Wood写的 Multi-Sig库代码: 3_看图王.png 源码地址位于: https://github.com/paritytech/parity/blob/4d08e7b0aec46443bf26547b17d10cb302672835/js/src/contracts/snippets/enhanced-wallet.sol 攻击过程技术分析还原: 第一步:成为合约的owner 4_看图王.png 通过往这个合约地址转账一个value = 0 ,msg.data.length > 0 的交易, 执行到_walletLibrary.delegatecall的分支,该函数能无条件的调用合约内的任何一个函数,黑客调用了一个叫做 initWallet的函数: 5_看图王.png 这个函数再次调用initMultiowned函数: 6_看图王.png 不幸的是,initWallet没有检查以防止攻击者在合同初始化后调用到initMultiowned, 这个函数使得这个合约的所有者被改为攻击者,相当于从unix中获得了root权限。 7_看图王.png 注意上图中的传入的Parity钱包攻击者地址: 0xb3764761e297d6f121e79c32a65829cd1ddb4d32,以及initWallet的合约ABI: 0xe46dcfeb,(注ABI计算 方法:https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI) 第二步: 转账, 剩下的事情就很清晰了,通过调用execute函数转账到黑客的地址: 8_看图王.png 第一个参数: address to= 0xb3764761e297d6f121e79c32a65829cd1ddb4d32, 转账额度116779808c03e4140000是为以Wei为单位的的eth,即 82189000000000000000000,可以通过如下的代码获得具体数值。 8_看图王.png 解决方案: 通过上面的分析可以看到,核心问题在于越权的函数调用,Parity钱包合约接口必须精心设计和明确定义访问权限,或者更进一步说,Parity钱包的合约的设计必须符合某种成熟的模式,或者标准,Parity钱包合约代码部署前最好交由专业的机构进行评审。否则,一个不起眼的代码就会让你丢掉所有的钱。 来源: 巴比特 作者: 币趣势 原文链接:http://www.jinse.com/ethereum/46061.html 免责声明:本文仅代表作者观点,与比特时代无关,仅为传播消息之用,不代表比特时代观点,不构成比特时代投资建议! Title: Re: 【技术】黑客盗取3000万eth美元事件之技术分析 Post by: District0xy on July 23, 2017, 05:17:32 AM 分析什么.不就是小漏洞
Title: Re: 【技术】黑客盗取3000万eth美元事件之技术分析 Post by: wvihor on July 26, 2017, 06:57:47 PM 看了还是不懂,这种技术的活不是我干的 :o
Title: Re: 【技术】黑客盗取3000万eth美元事件之技术分析 Post by: cherry11800 on July 26, 2017, 11:52:46 PM 难道以太坊要一直回滚,看来以太坊的智能合约也不安全。
|