概述:
综述一些geth上的RPC接口存在的可被利用的漏洞
列举的相关工作
- 智能合约DAO递归调用攻击。以太坊:The DAO漏洞攻击分析
- state-bloat攻击。(以太坊ddos,"Ethereum Continues to Suffer From DDoS Attacks")
- 日蚀攻击(Eclipse Attack)。比特币点对点网络中的日蚀攻击
设计缺陷分析
- 本地钱包管理的角度
geth本地钱包后解锁默认可用300秒,这300秒内,对外暴露的RPC接口,存在被攻击者直接调用已解锁的密钥进行签名操作的风险。 - http和ws接口的明文风险
geth开放的RPC接口和ws接口,通信的时候都用的明文传输,存在中间人攻击的劫持风险。 - geth模块和api没有合理的鉴权模块
基本模块包括:admin, eth, personal, miner, txpool。这些接口都是可直接调用密钥签名的高危接口,且没有严格的鉴权中间件,存在被渗透的风险。
攻击demo
首先,所有攻击的目的都是牟利。根据这个目的,作者找到这些攻击方式
测试环境:

image.png
- 模块启动攻击
geth有个admin模块,这个模块可以在rpc接口中调用(前提是rpc接口开放这个模块的权限)。而admin模块有个特别的功能,就是能启动其他模块,例如personal模块。意味着,如果geth节点开放了admin模块,那么攻击者就能利用这个模块的接口,启动别的模块的使用权限,geth节点的所有模块相当于完全暴露出来了。 - 本地钱包攻击
以太坊钱包的密钥,按照geth的设计,都是存在geth的本地钱包管理工具里面。通过rpc接口进行包嗅探或者暴力破解方法,渗透本地钱包以获取密钥,进行攻击。 - DOS攻击
解锁钱包需要浪费大量的内存,以为这能不断地调用geth节点的personal_unlocalAccount接口,让节点内存耗光,实现DOS。 - 劫持攻击
RPC接口都是明文的,以为这可以中间人劫持数据包进行攻击 - 日蚀攻击
也是通过调用admin模块,利用admin.removePeer和admin.addPeer接口,来把恶意节点加进来,把正常节点移除掉,实现对整个geth节点的日蚀攻击。 - 盗矿攻击
利用miner模块接口,调用miner.setEtherbase来修改矿工收益的钱包,实现在geth节点上盗取挖矿果实。这种攻击针对矿池节点比较有效。
防御措施
- 权限控制角度
对rpc接口和模块api添加权限控制中间件。 - 密钥不要放在Geth节点上
这个没什么好说,理所当然不要把密钥放在对外开放的geth节点的本地钱包上。公网geth节点一般只用来挖矿或者广播已签名的交易包。 - 重新配置端口
不要用默认的配置
不要用默认的配置
不要用默认的配置 - 限制RPC模块
rpc模块,用什么就开什么。其中,admin personal miner非常高危,要用也不要开。 - 钱包账户签名后要马上上锁
unlockAccount后,要记得,操作完马上上锁,不然会被干。 - 多重加密
总之密钥要好好保护,保护好密钥和保护好密钥的使用权限,比什么都重要 - 传统防御
安全老司机们的一套传统防御,防火墙、访问控制、容灾等等。