以太坊智能合约安全之重放攻击
什么是重放攻击?
1.顾名思义,重复的会话请求就是重放攻击。
2.可能是因为用户重复发起请求,也可能是因为请求被攻击者获取,然后重新发给服务器。
重放攻击的危害
请求被攻击者获取,并重新发送给认证服务器,从而达到认证通过的目的。
我们可以通过加密,签名的方式防止信息泄露,会话被劫持修改。但这种方式防止不了重放攻击。
为什么会出现重放攻击?
在比特币的某次硬分叉后,出现了一条新链,其代币为 BCH。比特币硬分叉后,新链与原链是拥有相同的交易数据、地址、私钥、交易方式。你在硬分叉之前的一种币,会因为分叉而变成两种,即原有的 BTC 和等额的 BCH。您只需要下载 BCH 对应的钱包,并且把原 BTC 的钱包私钥导入,即可得到等额的 BCH 。
同时,如果你在没有解决重放攻击问题之前,在自己钱包里把分叉前的一个 BTC 转到一个地址A上,有趣的事就发生了,你在 BCH 钱包内对应的一个 BCH 也会被转入到地址 A 里面去。因为你在分叉前的币,会自动被分叉后的两条链都承认是合法的。只要你发起一笔交易,另一笔会被同步到比特币网络中去,然后被矿工打包处理,该交易生效,这就是重放攻击!
智能合约中比较特殊的委托概念:
在资产管理体系中,常有委托管理的情况,委托人将资产给受托人管理,委托人支付一定的费用给受托人。这个业务场景在智能合约中也比较普遍。
这里举例子为transferProxy函数,该函数用于当user1转token给user3,但没有eth来支付gasprice,所以委托user2代理支付,通过调用transferProxy来完成。
上述代码nonce值可以被预测,而其他变量不变的情况下,可以通过重放攻击来多次转账。
影响范围
截止2018年9月5日,发现了18个存在重放攻击隐患问题的合约代码,其中16个仍处于交易状态,其中交易量最高的10个合约情况如下:
修复方式
合约中如果涉及委托管理的需求,应注意验证的不可复用性,避免重放攻击。其中主要的两点在于:
1.避免使用transferProxy函数。采用更靠谱的签名方式签名。
2.nonce机制其自增可预测与这种签名方式违背,导致可以被预测。尽量避免nonce自增。
重放攻击的防御
1)时间戳验证
请求时加上客户端当前时间戳,同时签名(签名是为了防止会话被劫持,时间戳被修改),服务端对请求时间戳进行判断,如超过5分钟,认定为重放攻击,请求无效。
时间戳无法完全防止重放攻击。
2)序号
顾名思义,在客户端和服务端通讯时,先定义一个初始序号,每次递增。这样,服务端就可以知道是否是重复发送的请求。
3)挑战与应答的方式
我们一般采用这种方式来防御重放攻击。
客户端请求服务器时,服务器会首先生成一个随机数,然后返回给客户端,客户端带上这个随机数,访问服务器,服务器比对客户端的这个参数,若相同,说明正确,不是重放攻击。
这种方式下,客户端每次请求时,服务端都会先生成一个挑战码,客户端带上应答码访问,服务端进行比对,若挑战码和应答码不对应,视为重放攻击。
4)Https防重放攻击
对于https,每个socket连接都会验证证书,交换密钥。攻击者截获请求,重新发送,因为socket不同,密钥也不同,后台解密后是一堆乱码,所以https本身就是防止重放攻击的,除非能复制socket,或者进行中间人攻击。
总结:
由于智能合约代码公开透明的特性,加上这类问题比较容易检查出,一旦出现就会导致对合约的毁灭性打击,所以大部分合约开发人员都会注意到这类问题。但在不容易被人们发现的未公开合约中,或许还有大批潜在的问题存在。建议所有的开发者重新审视自己的合约代码,检查是否存在编码安全问题,避免不必要的麻烦或严重的安全问题。
你可能感兴趣的文章
-
以太坊智能合约安全之重放攻击
-
以太坊智能合约安全之重放攻击
什么是重放攻击?1.顾名思义,重复的会话请求就是重放攻击。2.可能是因为用户重复发起请求,也可能是因为请求被攻击者获取,然后重新发给服务器。重放攻击的危害请求被...
2024-10-17
万字说透区块链预言机架构原理 以Oracl
-
万字说透区块链预言机架构原理 以Oracl
预言机本质上是一种数据调用和访问的中间件,它分别解决了「是或否」和「数据是多少」两类问题,从而实现了智能合约对外部数据的调用。它既可以从原生的链上获取数据,也可...
2024-10-12
区块链安全系列——什么是重放攻击?
-
区块链安全系列——什么是重放攻击?
重放攻击又称回放攻击,在该种网络攻击的情况下恶意实体将会拦截有效数据,并将其在网络中重复传输。由于原始数据(通常来自已授权用户)的有效性,所以网络的安全协议通常...
2024-10-12
BCH硬分叉背后:“重放攻击”下的用户自救指南
-
BCH硬分叉背后:“重放攻击”下的用户自救指南
11月16日凌晨2:16分,BCH在第556767个块高度发生硬分叉,分叉大战落下帷幕,分成了BCH ABC和BCH SV两个阵营。在此次此次硬分叉中,BCH ...
2024-10-11
区块链知识进阶|双花问题和51%攻击
-
区块链知识进阶|双花问题和51%攻击
近年来,数字货币被炒得热火朝天,很多人都开始密切关注数字货币,身边也总能听到有人谈起关于数字货币的林林总总。既然有人在参与,那么,自然也有人在观望,也有人在避而...
2024-10-08
区块链安全入门笔记汇编版,一文了解20种名词解释及26种攻击方式
-
区块链安全入门笔记汇编版,一文了解20种名词解释及26种攻击方式
虽然有着越来越多的人参与到区块链的行业之中,然而由于很多人之前并没有接触过区块链,也没有相关的安全知识,安全意识薄弱,这就很容易让攻击者们有空可钻。面对区块链的...
2024-09-29
说好稳赚不赔,一轮就凉凉?类 Fomo3D 游戏的2大问题
-
说好稳赚不赔,一轮就凉凉?类 Fomo3D 游戏的2大问题
本文从合约安全开发的角度出发,详细分析了类 Fomo3D 游戏的两个问题,并提出若干个可能的解决方案。无论是 Fomo3D 山寨版还是正宗原版都摆脱不了“一轮就...
2024-09-29
租赁算力实施 51% 攻击,中本聪没能预见的流动挖矿市场问题
-
租赁算力实施 51% 攻击,中本聪没能预见的流动挖矿市场问题
为了确保网络去中心化、避免出现“矿霸”,使用工作量证明(PoW)的加密货币一般不允许让一家挖矿公司控制大部分算力。但随着全球算力池不断增长,也更具流动性,加密货...
2024-09-19
熊市发财有法子,51%算力攻击成为新的“致富之道”
-
熊市发财有法子,51%算力攻击成为新的“致富之道”
从2018年初到现在,经历了漫长熊市的币圈人的耐心和信心正在一点一点的被消耗,习惯了按秒计算收益的投机者们蠢蠢欲动,开始迫切寻找下一个暴富的机会。此时,两个月多...
2024-09-18
莱特币为何在减半后跌了25分析师表示下行
-
莱特币为何在减半后跌了25分析师表示下行
莱特币最近一直笼罩在负面情绪中,这主要是由于它在最近的减半事件和最近的一次粉尘攻击之后,其平淡无奇的价格走势。这次粉尘攻击影响了Binance上近30万个LTC...
2024-09-12