区块风豹实验室

猎豹移动区块链安全报告Ⅳ-漏洞

2018-11-12 14:39:47

2017年是虚拟货币爆发的一年,虚拟货币的价格和市值飞涨,其价值被越来越多投资机构和投资者所认可,无数人在这里赚到了钱,不法分子因此也盯上了这块肥肉,想出各种各样的办法来骗投资者的钱。诈骗类型一般分为钓鱼,诈骗,盗取,漏洞四种,不同类型又有不同的诈骗手法。本文详细介绍利用漏洞诈骗用户资产的手法,希望帮助投资者保护自己资产安全。

一.智能合约漏洞
1.the DAO攻击
攻击者组合了2个漏洞攻击。攻击者利用的第一个漏洞是递归调用splitDAO函数。
也就是说splitDAO函数被第一次合法调用后会非法的再次调用自己,然后不断重复这个自己非法调用自己的过程。这样的递归调用可以使得攻击者的DAO资产在被清零之 前,数十次的从TheDAO的资产池里重复分离出来理应被清零的攻击者的DAO资产。 攻击者利用的第二个漏洞是DAO资产分离后避免从TheDAO资产池中销毁。正常情况 下,攻击者的DAO资产被分离后,TheDAO资产池会销毁这部分DAO资产。但是攻击 者在递归调用结束前把自己的DAO资产转移到了其他账户,这样就可以避免这部分 DAO资产被销毁。在利用第一个漏洞进行攻击完后把安全转移走的DAO资产再转回原账户。这样攻击者做到了只用2个同样的账户和同样DAO资产进行了200多次攻击。
此次事件导致将近15%的ETH被黑客盗走,为了挽回投资者的损失,以太坊社区决定进行软分叉来找回丢失的ETH,最终导致了ETH的分叉。
2.以太坊Parity钱包合约漏洞
智能合约的callback里使用了delegatecall(msg.data),这个函数会呼叫data中的函数并将msg.sender设为原呼叫函数的地址,黑客利用这一点呼叫了initWallet,这时你们可能会以为Parity应该有在initWallet设置条件阻挡黑客就不能呼叫,结果竟然是没有!所以黑客就成功并改变合约的拥有者,最后再把以太币转走
3.MAIAN工具对智能合约漏洞的分析
新加坡和英国几位研究员用一种MAIAN的工具分析扫描了100万份智能合约,发现大约3.4%的智能合约存在安全漏洞,报告指出由于智能合约编码不完善,存在数个漏洞,导致数百万美元的以太币暴露在风险中。
4.ERC20标准导致用户损失主要问题是缺乏处理通过ERC20代币transfer方法执行的传入ERC20事务的可能性。如果您发送100个ETH到一个不打算与Ether协同工作的合同,那么它将拒绝一个交易,并且不会发生任何错误。如果您将100个ERC20令牌发送到不打算与ERC20令牌一起使用的合同,则它不会拒绝令牌,因为它无法识别传入的事务。结果,您的代币将卡住合约余额。
目前丢失了多少ERC20令牌(2017年12月27日):
QTUM,1,204,273美元流失。
EOS 损失1,015,131美元。
GNT,亏损249,627美元。
STORJ,亏损217,477美元。
Tronix,损失201,232美元。
DGD,损失151,826美元。
OMG,亏损149,941美元。
STORJ,输掉102,560 美元。

二、客户端漏洞
1.Ledger钱包漏洞
Ledger钱包在每次收到付款时都会生成一个新地址,不过如果电脑感染了恶意软件,那么当用户试图生成地址以转移加密货币时,攻击者可通过中间人攻击将加密货币转移到欺诈地址。
2.JSON RPC漏洞
攻击者利用以太坊节点 Geth/Parity RPC API 鉴权缺陷,恶意调用 eth_sendTransaction 盗取代币。
全球扫描 8545 端口(HTTP JSON RPC API)、8546 端口(WebSocket JSON RPC API)等开放的以太坊节点,发送 eth_getBlockByNumber、eth_accounts、eth_getBalance 遍历区块高度、钱包地址及余额不断重复调用 eth_sendTransaction 尝试将余额转账到攻击者的钱包当正好碰上节点用户对自己的钱包执行 unlockAccount 时,在 duration 期间内无需再次输入密码为交易签名,此时攻击者的 eth_sendTransaction 调用将被正确执行,余额就进入攻击者的钱包里了。截止到发文之前,此地址已经收到4313笔转账,即4313个人的账号被盗,总价值为38079.4个ETH,约19686843美元。