ETH接口漏洞总结

概述:

综述一些geth上的RPC接口存在的可被利用的漏洞

列举的相关工作

  1. 智能合约DAO递归调用攻击。以太坊:The DAO漏洞攻击分析
  2. state-bloat攻击。(以太坊ddos,"Ethereum Continues to Suffer From DDoS Attacks")
  3. 日蚀攻击(Eclipse Attack)。比特币点对点网络中的日蚀攻击

设计缺陷分析

  1. 本地钱包管理的角度
    geth本地钱包后解锁默认可用300秒,这300秒内,对外暴露的RPC接口,存在被攻击者直接调用已解锁的密钥进行签名操作的风险。
  2. http和ws接口的明文风险
    geth开放的RPC接口和ws接口,通信的时候都用的明文传输,存在中间人攻击的劫持风险。
  3. geth模块和api没有合理的鉴权模块
    基本模块包括:admin, eth, personal, miner, txpool。这些接口都是可直接调用密钥签名的高危接口,且没有严格的鉴权中间件,存在被渗透的风险。

攻击demo

首先,所有攻击的目的都是牟利。根据这个目的,作者找到这些攻击方式
测试环境:


image.png
  1. 模块启动攻击
    geth有个admin模块,这个模块可以在rpc接口中调用(前提是rpc接口开放这个模块的权限)。而admin模块有个特别的功能,就是能启动其他模块,例如personal模块。意味着,如果geth节点开放了admin模块,那么攻击者就能利用这个模块的接口,启动别的模块的使用权限,geth节点的所有模块相当于完全暴露出来了。
  2. 本地钱包攻击
    以太坊钱包的密钥,按照geth的设计,都是存在geth的本地钱包管理工具里面。通过rpc接口进行包嗅探或者暴力破解方法,渗透本地钱包以获取密钥,进行攻击。
  3. DOS攻击
    解锁钱包需要浪费大量的内存,以为这能不断地调用geth节点的personal_unlocalAccount接口,让节点内存耗光,实现DOS。
  4. 劫持攻击
    RPC接口都是明文的,以为这可以中间人劫持数据包进行攻击
  5. 日蚀攻击
    也是通过调用admin模块,利用admin.removePeer和admin.addPeer接口,来把恶意节点加进来,把正常节点移除掉,实现对整个geth节点的日蚀攻击。
  6. 盗矿攻击
    利用miner模块接口,调用miner.setEtherbase来修改矿工收益的钱包,实现在geth节点上盗取挖矿果实。这种攻击针对矿池节点比较有效。

防御措施

  1. 权限控制角度
    对rpc接口和模块api添加权限控制中间件。
  2. 密钥不要放在Geth节点上
    这个没什么好说,理所当然不要把密钥放在对外开放的geth节点的本地钱包上。公网geth节点一般只用来挖矿或者广播已签名的交易包。
  3. 重新配置端口
    不要用默认的配置
    不要用默认的配置
    不要用默认的配置
  4. 限制RPC模块
    rpc模块,用什么就开什么。其中,admin personal miner非常高危,要用也不要开。
  5. 钱包账户签名后要马上上锁
    unlockAccount后,要记得,操作完马上上锁,不然会被干。
  6. 多重加密
    总之密钥要好好保护,保护好密钥和保护好密钥的使用权限,比什么都重要
  7. 传统防御
    安全老司机们的一套传统防御,防火墙、访问控制、容灾等等。

你可能感兴趣的:(ETH接口漏洞总结)