爆破攻击:后偷渡时代的盗币方式
摘要: 对于暂时无法关闭对公网暴露的RPC接口的节点,在不使用personal.unlockAccount()的情况下,仍然存在被盗币的可能。
漏洞复现
被攻击节点启动参数为:geth–testnet–rpc–rpcaddr 0.0.0.0–rpcapi eth,personal console
攻击者的攻击步骤为:
1.攻击者探测到目标开放了RPC端口->获取当前节点的区块高度、节点上的账户列表以及各账户的余额。根据蜜罐捕获的数据,部分攻击还会通过personal_listWallets接口进行查询,寻找当前节点上已经unlocked的账户。
2.调用personal_unlockAccount接口尝试解密用户账户。假如用户使用了弱口令,攻击者将会成功解锁相应账户。
3.攻击者可以将解锁账户中的余额全部转给自己。
攻击流程如下图所示:
升级的爆破方式
根据偷渡漏洞的原理可以知道该攻击方式有一个弊端:如果有两个攻击者同时攻击一个节点,当一个攻击者爆破成功,那么这两个攻击者都将可以取走节点中的余额。
谁付出了更多的手续费,谁的交易将会被先打包。这也陷入了一个恶性循环,盗币者需要将他们的利益更多地分给打包的矿工才能偷到对应的钱。也正是因为这个原因,蜜罐捕获到的爆破转账请求从最初的 personal_unlockAccount 接口逐渐变成了 personal_sendTransaction 接口。
personal_sendTransaction接口是Geth官方在2018/01新增了一个解决偷渡漏洞的RPC接口。使用该接口转账,解密出的私钥将会存放在内存中,所以不会引起偷渡漏洞相关的问题。攻击者与时俱进的攻击方式不免让我们惊叹。
探测的数据包
对蜜罐捕获的攻击流量进行统计,多个 JSON-RPC 接口被探测或利用:
其中eth_blockNumber、eth_accounts、net_version、personal_listWallets等接口具有很好的前期探测功能,net_version可以判断是否是主链,personal_listWallets则可以查看所有账户的解锁情况。
personal_unlockAccount、personal_sendTransaction、eth_sendTransaction等接口支持解锁账户或直接进行转账。
可以说,相比于第一阶段的攻击,后偷渡时代针对JSON-RPC的攻击正呈现多元化的特点。
爆破账号密码
蜜罐在2018/05/24第一次检测到通过unlockAccount接口爆破账户密码的行为。截止2018/07/14蜜罐一共捕获到809个密码在爆破中使用。
攻击者主要使用personal_unlockAccount接口进行爆破,爆破的payload主要是:
在所有的爆破密码中有一个比较特殊:ppppGoogle;该密码在personal_unlockAccount和personal_sendTransaction接口均有被多次爆破的痕迹。
转账的地址
蜜罐捕获到部分新增的盗币地址有:
攻击来源 IP
区块链技术与虚拟货币的火热,赋予了链上货币们巨大的经济价值,每个人都想在区块链浪潮中分得一杯羹。黑客们更是如此,他们作为盗币者,绞尽脑汁的想着各个角度攻击区块链与合约。当黑客栖身于矿工,他们不但能挖出区块,也能挖出漏洞。
(作者:区块链安全档案,内容来自链得得内容开放平台“得得号”;本文仅代表作者观点,不代表链得得官方立场)
评论(0)
Oh! no
您是否确认要删除该条评论吗?