以太坊盗币方式揭秘之“偷渡时代”

区块链安全档案
区块链安全档案 机构得得号

Aug 23, 2018 隶属于曲速未来安全区,安全问题深度分析、一手威胁情报披露

摘要: 攻击者通过端口扫描等方式发现受害者开放了JSON-RPC端口后,查询当前节点最新的区块高度以及该节点上已有的账户。查询账户余额并发起转账申请。当受害者解锁账户时,攻击者就完成攻击。

古人的盗亦有道,在虚拟货币领域也有着它独特的定义。只有对区块链技术足够了解,才能在这场盛宴中获取足够多的金钱。他们似那黑暗中独行的狼,无论是否得手都会在被发现前抽身而去。

黑暗中的盗币方式:偷渡时代

攻击流程复现

攻击复现环境位于ropsten测试网络。

被攻击者 IP: 10.0.0.2,启动客户端命令为:geth –testnet –rpc –rpcapi eth –rpcaddr 0.0.0.0 console账户地址为:

0x6c047d734ee0c0a11d04e12adf5cce4b31da3921, 剩余余额为5 ether;

攻击者 IP: 10.0.0.3 , 账户地址为:

0xda0b72478ed8abd676c603364f3105233068bdad;

攻击者步骤如下:

1. 攻击者通过端口扫描等方式发现被攻击者开放了JSON-RPC端口后,调用eth_getBlockByNumbereth_accounts接口查询当前节点最新的区块高度以及该节点上已有的账户。

2. 攻击者调用eth_getBalance接口查询当前节点上所有账户的余额。

3. 攻击者对存在余额的账户持续发起转账请求。

一段时间后,被攻击者需要进行交易:
按照之前的知识点,用户需要先解锁账户然后才能转账。当我们使用 personal.unlockAccount 和密码解锁账户后,就可以在终端看到恶意攻击者已经成功发起交易。

恶意攻击者的交易信息:

攻击的流程图如下所示:

攻击成功的关键点解析

看完前面的偷渡漏洞攻击流程,你可能会有这样的疑问:

1)攻击者为什么可以转账成功?

2)如例子中所示,该地址只有 5 ether,一次被转走了 4.79 ether,如果我们解锁账户后在被攻击前发起转账,转走 1 ether,是否攻击者就不会攻击成功?

下文将详细分析这两个问题并给出答案。

攻击者可以通过 rpc 接口转账的原因:

首先,分析一下关键的unlockAccount函数:

在判断传入的解锁时间是否为空、是否大于最大值后,调用 TimedUnlock() 进行解锁账户的操作,而 TimedUnlock() 的代码如下:

首先通过getDecryptedKey()从keystore文件夹下的文件中解密出私钥,再判断该账户是否已经被解锁,如果没有被解锁,则将解密出的私钥存入名为unlocked的map中。如果设置了解锁时间,则启动一个协程进行超时处理go ks.expire()。

再看向实现转账的函数的实现过程SendTransaction()-> wallet.SignTx() -> w.keystore.SignTx():

可以看到,在w.keystore.SignTx()中,直接从ks.unlocked中取出对应的私钥。这也就意味着如果执行了unlockAccount()函数、没有超时的话,从ipc、rpc调用SendTransaction()都会成功签名相关交易。

由于默认参数启动的 Go-Ethereum 设计上并没有对 ipc、rpc 接口添加相应的鉴权模式,也没有在上述的代码中对请求用户的身份进行判断,最终导致攻击者可以在用户解锁账号的时候完成转账操作,偷渡漏洞利用成功。

攻击者和用户竞争转账的问题

由于用户解锁账户的目的是为了转账,所以存在用户和攻击者几乎同时发起了交易的情况,在这种情况下,攻击者是如何保证其攻击的成功率呢?

在攻击者账号0x957cD4Ff9b3894FC78b5134A8DC72b032fFbC464的交易记录中,交易0x8ec46c3054434fe00155bb2d7e36d59f35d0ae1527aa5da8ec6721b800ec3aa2能够很好地解释该问题。

相较于目前主流的gasPrice维持在1Gwei,该笔交易的gasPrice达到了惊人的1,149,246 Gwei。

也正是由于较高的gasPrice, 使得该攻击者在与其它攻击者的竞争中(有兴趣的可以看看上图红框下方两笔dropped Txns)得到这笔巨款。

蜜罐捕获数据

蜜罐是一台无人使用但却被严密监控的网络主机,它包含虚假的高价值资源和一些漏洞,以此吸引入侵者攻击主机。并且在被入侵的讨程中,实时记录和审计攻击者的攻击流量、行为和数据。以此了解攻击者的方式、手段和目的,并且完成对攻击溯源取证等进一步的工作。

数据捕获:数据捕获技术包括网络流量数据捕获以及主机上系统行为的捕获。网络流量数据的捕获结合网络入侵检测系统,配置相关敏感信息的检测规则,触发入侵检测规则时立即记录网络流量。

在偷渡漏洞被曝光后,就有在已有的蜜罐数据中寻找到部分攻击的痕迹。

下图是2017/10/01到2018/03/21间蜜罐监控到的相关攻击情况:

被攻击端口主要是8545端口,8546、10332、8555、18082、8585端口等也有少量扫描痕迹。

攻击来源IP主要集中在46.166.148.120/196和216.158.238.178/186/226上:

46.166.148.120/196攻击者使用的探测payload主要是:

216.158.238.178/186/226攻击者使用的探测payload主要是:

具有团队在全球节点蜜罐监测结果显示,黑客针对以太坊 JSON-RPC 进行盗币攻击一直在持续。

(作者:区块链安全档案,内容来自链得得内容开放平台“得得号”;本文仅代表作者观点,不代表链得得官方立场)

链得得仅提供相关信息展示,不构成任何投资建议
本文系作者 区块链安全档案 授权链得得发表,并经链得得编辑,转载请注明出处、作者和本文链接

更多精彩内容,关注链得得微信号(ID:ChainDD),或者下载链得得App

分享到:

相关推荐

    评论(0

    Oh! no

    您是否确认要删除该条评论吗?

    分享到微信