节点程序安全
节点运维安全
公链安全切入
1.公链代码,通读源码
2.用户可控制的可输入输出的位置
3.危险函数方法的调用
4.各种功能模块代码
5.各种骚姿势
用户可控制的可输入输出的位置
1.RPC接口模块
通常是HTTP RPC,传统安全的接口测试思路+白盒测试
2.P2P通信模块
通常情况下区块链同步的数据均是走P2P
3.节点配置模块
以太坊黑色情人节
stop bitcoin node
bitcoin node crash
-
智能合约模块
以太坊黑色情人节事件
1.节点默认开放在0.0.0.0,在配置开放地址的时候,需要指定 -rpcaddr <指定访问的ip白名单地址>
2.私钥与服务器分离
3.设置RPC接口方法的调用白名单
UnlockAccount
-
私钥在内存中保存的时间,默认是300秒
-
如果设置为0,则表示永久留存在内存,直至geth/parity退出
用户在带私钥的节点中进行解锁钱包操作,准备转账
personal.unlockAccount("0xd5bAA94e09C4a1C6613A35c485604F507b368517")
unlock account 0xd5bAA94e09C4a1C6613A35c485604F507b368517
passphrase:
true
eth_sendTransaction
在地址unlock account后攻击者远程调用以太坊RPC API,进行转账操作
1.nonce 的递增从0开始每一笔交易加1
2.nonce和unlockaccount只和当前钱包有关
3.nonce过大时,只需等待小于这个过大nonce的所有nonce都使用完即可
4.节点程序(geth/parity)重启会重置unlockaccount时间
stop bitcoin node
1.以为私钥和节点分离就足够安全,实际上还可以拒绝服务(DOS)
2.curl --data-binary
'{"jsonrpc":"1.0","id":"curltext","method":"stop","params":[]}' -H
'content-type:text/plain;'http://user:[email protected]:85/
节点配置安全
1.前面加一层nginx反向代理
2.http替换成https
3.ip替换成域名
4.用户名密码隐藏
5.白名单api接口
bitcoin node crash
-
bitcoin:默认情况下没有对rpc请求的数据的大小和深度进行限制,可以通过发送超大深度的数据包,令节点dos,需要指定-m =< 指定内存大小 > (-m = 100m)
-
poc:'{"slowmist":'+''{"slowmist":'* 0xffff + '""}' +}'* 0xffff
危险函数调用
各种功能模块代码
-
https://github.com/bitcoin/bips
-
https://eips.ethereum.org/all
文章相关内容来自于SlowMist Team
本文始发于微信公众号(IDLab):链上对抗-公链安全
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论