Category: 重大漏洞

老牌交易所coinbase惊现修改余额漏洞,电子加密货币恐成为极客提款机

老牌交易所coinbase惊现修改余额漏洞,电子加密货币恐成为极客提款机

电子加密货币的生态显然还没准备好迎接全球黑客的挑战。

当前所暴露出来的安全问题,显现出大量比较初级却致命的漏洞,可见整个电子加密货币的生态还处于发展初期,其安全质量没有经过过多的考虑。

2018-3-21,知名的老牌交易所coinbase(https://www.coinbase.com/)被vicompany爆出账户余额可被修改的漏洞,可以持续往coinbase钱包里免费充值。

vicompany的原文在此,但并未透露过多细节:https://www.vicompany.nl/magazine/from-christmas-present-in-the-blockchain-to-massive-bug-bounty

我们将展示我们所掌握的信息帮助大家了解这个漏洞。

关于coinbase:

自2012年建立以来,截止到2015年1月21日,Coinbase已经融资超过1.05亿美元,现已拥有约100名员工,其中50人在公司的旧金山的总部全职工作。2014年,Coinbase成立美国首家正规比特币交易所,将为包括纽约、加州在内的 25 个州提供交易服务。这意味着Coinbase 已获得美国多个州监管机构的合法执照。2016年5月,Coinbase交易所更名为GDAX,既代表着全球数字资产交易所。

漏洞细节

攻击者可通过编写智能合约,将资金转移到智能合约中,并执行智能合约将资金转入coinbase。

在转账过程中,最后会有一笔交易由于余额不足交易失败,从而引起事务回滚。

问题的关键在于,如果智能合约中有一笔交易失败,则之前所有的交易都将被撤销。

但在coinbase上,平台的开发者并没有考虑到交易回滚的情况,这些交易在coinbase上不会被逆转,这意味着攻击者可以不断执行智能合约,在coinbase中无限添加余额。

以下的合约交易请求展示了这个过程:

https://etherscan.io/tx/0x587be0cedc106b85ce8c84de73f17432e6d45531d1c33a6b8e226379f4509e1b

在交易页面,你可以看到50个成功的交易,之后发生了1个Out of gas的错误,导致整个交易链进行事务回滚,资金并没有转移给coinbase,而coinbase账户余额却成功增加了数量。

漏洞修复进展

目前漏洞已经通过hackone平台传递到coinbase,被认定为最高级别漏洞,并完成了修复:

https://hackerone.com/reports/300748

揭秘以太坊中潜伏多年的“偷渡”漏洞,全球黑客正在疯狂偷币

揭秘以太坊中潜伏多年的“偷渡”漏洞,全球黑客正在疯狂偷币

世界上有一群人,互联网对于他们来说就是提款机。

是的,过去是,现在更是,因为电子货币的出现,他们提款的速度变得更疯狂。

在2017年,我们的蜜罐监测到一起针对以太坊的全球大规模攻击事件,我们将其命名为以太坊“偷渡”漏洞

通过该漏洞,黑客可以在没有服务器权限、没有keystore密码权限的情况下,转走钱包中的所有余额。

而如此严重的漏洞,1年前就在reddit.com被曝光有黑客在利用,并且最早可追溯到2016年的2月14号就有黑客通过此漏洞窃取到比特币:

https://www.reddit.com/r/ethereum/comments/4z0mvi/ethereum_nodes_with_insecure_rpc_settings_are/

近期也有中国的慢雾安全团队揭露了这种攻击手法:

https://mp.weixin.qq.com/s/Kk2lsoQ1679Gda56Ec-zJg

在长达2年的时间里,并没有多少用户关注到,以太坊也没有进行针对性的防护措施,直到今日,以太坊的最新代码中依然没有能够抵御这种攻击。

因此我们决定将我们所掌握的详细数据公布给所有人,希望能促使以太坊的开发者承认并修复该漏洞。

漏洞成因

(以下的代码分析基于https://github.com/ethereum/go-ethereum的当前最新提交:commit b1917ac9a3cf4716460bd53a11db40384103e5e2)

以太坊目前最流行的节点程序(Geth/Parity )都提供了RPC API,用于对接矿池、钱包等其他第三方程序。

默认情况下,节点的RPC服务是无需密码就可以进行接口调用,官方实现的RPC API也并未提供设置RPC连接密码的功能,因此,一旦将RPC端口暴露在互联网,将会非常危险。

而我们所捕获的以太坊“偷渡”漏洞,正是利用了以太坊默认对RPC不做鉴权的设计。

被攻击的用户,需要具备以下条件:

  1. 节点的RPC端口对外开放
  2. 节点的RPC端口可直接调用API,未做额外的鉴权保护(如通过nginx等方式进行鉴权保护)
  3. 节点的区块高度已经同步到网络的最新高度,因为需要在该节点进行转账,如果未达到最高度,无法进行转账

当用户对自己的钱包进行了解锁(unlockAccount函数),在解锁超时期间,无需再输入密码,便可调用RPC API的eth_sendTransaction进行转账操作。

漏洞的关键组成,由未鉴权的RPC API服务及解锁账户后有一定的免密码时间相结合,以下是解锁账户的unlockAccount函数:

代码路径:go-ethereum/internal/jsre/deps/api.go

通过函数的实现代码可见,解锁账户的api允许传入超时时间,默认超时为300秒,

真正进行解锁的函数TimedUnlock实现如下:

代码路径:go-ethereum/accounts/keystore/keystore.go

当传入的超时大于0时,会发起一个协程进行超时处理,如果传入的超时时间为0,则是永久不会超时,账户一直处于解锁状态,直到节点进程退出。

详细的用法参考官方文档:https://github.com/ethereum/go-ethereum/wiki/Management-APIs#personal_unlockaccount

攻击手法揭秘

1. 寻找对外开放以太坊RPC端口的服务器,确认节点已经达到以太坊网络的最高区块高度

黑客通过全球的端口服务扫描,发现RPC服务为以太坊的RPC接口时,调用eth_getBlockByNumber(‘last’, false),获取最新的区块高度。

但是由于有些以太节点是以太坊的分叉币,高度与以太坊的不一样,因此黑客即使发现节点高度与以太坊的高度不一样,也不会放弃攻击。

2. 调用eth_accounts,获取该节点上的所有账户。

eth_accounts的请求将返回一个账户地址列表:[0x1834axxxxxxxxxxxxxxxxxxxxxxxxxxx, 0xa13jkcxxxxxxxxxxxxxxxxxxxxxxxxxxx,…… ]

3. 调用eth_getBalance,查询地址余额。

这个过程黑客可在自己的服务器完成以太坊的余额查询,因为以太坊的区块链账本数据库是随意公开获取的。

有部分黑客没有搭建以太坊的全节点,没有自行查询余额,因此也会在被攻击服务器进行eth_getBalance操作。

4. 持续调用转账操作,直到刚好用户用密码解锁了钱包,完成非法转账操作的“偷渡”

黑客会构造eth_sendTransaction的转账操作,并填写余额、固定的手续费:

{“jsonrpc”:”2.0″,”id”:2,”method”:”eth_sendTransaction”,”params”:[{“from”:”受害者钱包地址1″,”gas”:”0x55f0″,”to”:”0xdc3431d42c0bf108b44cb48bfbd2cd4d392c32d6″,”value”:”0x112345fc212345000″}]}
{“jsonrpc”:”2.0″,”id”:2,”method”:”eth_sendTransaction”,”params”:[{“from”:”受害者钱包地址2″,”gas”:”0x55f0″,”to”:”0xdc3431d42c0bf108b44cb48bfbd2cd4d392c32d6″,”value”:”0x112345fc212345000″}]}
{“jsonrpc”:”2.0″,”id”:2,”method”:”eth_sendTransaction”,”params”:[{“from”:”受害者钱包地址3″,”gas”:”0x55f0″,”to”:”0xdc3431d42c0bf108b44cb48bfbd2cd4d392c32d6″,”value”:”0x112345fc212345000″}]}

其中的value的单位是以太的最小单位:wei,计算为以太的话需要除10的18次方:

>>> 0x112345fc212345000
19758522752314920960L
>>> 19758522752314920960L/1000000000000000000
19L

黑客会持续发转账操作,并定期监控余额变化,更新转账的金额,直到用户使用钱包,输入密码解锁了钱包,此时钱包余额会立即被转走。

 

快速漏洞测试

安装python的web3库,然后连接RPC端口,发起请求,如果获取到返回结果,便可能存在该漏洞。

参考:http://web3py.readthedocs.io/en/stable/quickstart.html

from web3 import Web3, HTTPProvider, IPCProvider
web3 = Web3(HTTPProvider(‘http://ip:port’))
print web3.eth.blockNumber

 

黑客解密及IOCs情报

黑客钱包

目前我们掌握了3个黑客的钱包收款地址,未转走的账户余额为2220万美金:

https://etherscan.io/address/0x957cD4Ff9b3894FC78b5134A8DC72b032fFbC464,余额为38,076 ETH(未统计erc20 token),最早进账为2016-2-14,最新进账为2018-3-21(当前还在持续入账)

https://etherscan.io/address/0x96a5296eb1d8f8098d35f300659c95f7d6362d15,余额为321 ETH(未统计erc20 token),最早进账为2016-8-10,最新进账为2017-11-28。

https://etherscan.io/address/0xdc3431d42c0bf108b44cb48bfbd2cd4d392c32d6,余额为330 ETH(未统计erc20 token),最早进账为2018-2-06,最新进账为2018-3-20。

黑客攻击源IP

146.0.249.87(德国黑森州法兰克福)
162.251.61.133(加拿大)
190.2.133.114(库拉索)
85.14.240.84(德国北莱茵)

 

目前大部分的黑客使用https://github.com/regcostajr/go-web3进行频繁API请求,如果有看到大量user-agent为“Go-http-client/1.1”的POST请求时,请记录下请求内容,确认是否为恶意行为。

紧急响应及修复建议

  1. 关闭对外暴露的RPC端口,如果必须暴露在互联网,请使用鉴权:https://tokenmarket.net/blog/protecting-ethereum-json-rpc-api-with-password/
  2. 借助防火墙等网络防护软件,封堵黑客攻击源IP
  3. 检查RPC日志、web接口日志,是否有异常大量的频繁请求,检查请求内容是否为eth_sendTransaction
  4. 等待以太坊更新最新代码,使用修复了该漏洞的节点程序
以太坊网络爆出“日食攻击”!

以太坊网络爆出“日食攻击”!

原标题:以太坊网络爆出“日食攻击”!

日食攻击

以太坊网络的维护人员近日发布了其网络底层代码库的更新版,以修复本周发表的一篇研究论文中描述的漏洞。

这篇研究论文由波士顿大学和匹兹堡大学的研究人员共同撰写,描述了一个名为“日食攻击”(eclipse attack)的安全漏洞。

日食攻击是其他节点实施的网络层面攻击,其攻击手段是,囤积和霸占受害者的点对点连接时隙(slot),将该节点保留在一个隔离的网络中。

这种类型的攻击旨在阻止最新的区块链信息进入到日食节点,从而隔离节点。比特币网络也很容易受到日食攻击(https://eprint.iacr.org/2015/263.pdf)。

两个坏的节点就足以对以太坊发动日食攻击

现在研究人员发现,以太坊也很容易受到日食攻击。以太坊是节点组成的网络,它是以太币这种加密货币及众多智能合约的基础,而智能合约支持其他许多数字货币和首次代币发行(ICO)。

但是,虽然对比特币网络上的节点实施日食攻击需要成千上万个恶意节点才能搞垮一个受害者的节点,但攻击者只需要两个恶意的以太坊节点就能隔离和影响另一个节点。

日食攻击能搞什么破坏?

一次得逞的日食攻击让不法分子得以“征用受害者的挖掘能力,并用它来攻击区块链的一致性算法”或用于“重复支付和私自挖矿”。

此外,研究人员解释道,日食攻击可以诱骗受害者查看不正确的以太网交易细节,诱骗卖家在交易其实还没有完成的情况下将产品发布给攻击者。

最后但并非最不重要的一点是,日食攻击还可以攻击以太坊合约,方法就是让日食节点无法看清楚区块链,从而延迟节点看清楚智能合约的内部计算可能用到的各个参数,导致不正确的智能合约输出,因而攻击者可以大捞一笔。

针对以太坊节点的补丁

撰写该论文的研究团队并不是冷不防突然发布研究结果。他们表示,自己与以太坊基金会合作,悄悄给这些问题打上补丁。

研究人员表示,他们建议了诸多对策,开发人员已将它们添加到两周前发布的geth 1.8.0中,这是在以太坊节点上运行的软件。

这些对策无法完全防止日食攻击,而是只是将实施这种攻击所需的恶意节点数量从两个增加到了几千个。

想了解更进一步的细节,请参阅尤瓦尔•马库斯(Yuval Marcus)等研究人员共同撰写的《针对以太坊的点对点网络发动的低资源日食攻击》(http://www.cs.bu.edu/~goldbe/projects/eclipseEth.pdf)。

文章来源:http://www.sohu.com/a/224786752_465914