AIN:SharkTeam:十大智能合约安全威胁之重放攻击_aibchain

重放攻击是把原链网络上的交易拿到目标链网络上使用

问:我们常提到的智能合约漏洞真的是实际中威胁最大、发生最频繁的安全漏洞吗?

答:完全不是那样。例如“溢出”、“外部调用”等常提到的智能合约安全漏洞并不是最常发生,威胁最大的。

到底哪些安全威胁从发生频率和危害性上能称为Top10的呢?SharkTeam合约安全系列课程之和您一起讨论和深入。第十课。

一、什么是重放攻击

重放攻击是把原链网络上的交易拿到目标链网络上使用,即一笔交易重复执行,我们根据类型可以分为交易重放和签名重放。

交易重放是将原链上的交易一成不变放到目标链上,重放过后交易在目标链上可以正常执行并完成交易验证。

a16z前高管正创办加密托管公司 并得到a16z的支持:4月27日消息,据知情人士透露,a16z 前首席技术官 (CTO) Riyaz Faizullabhoy 和前首席信息安全官 (CISO) Nassim Eddequiouaq 正在创办一家以机构为中心的加密货币托管公司,该举动已得到来自 a16z 的支持。

据悉,二人此前于今年 2 月从 a16z 离职,根据 a16z 的一篇博客文章显示,在加入 a16z 之前,两人共同为 Facebook 的 Novi(以前称为 Calibra)钱包创建了加密货币托管基础设施。( Coindesk )[2023/4/27 14:30:12]

签名重放利用私钥签名的消息进行重放,重放过程中无需像交易重放那样去重放整个交易,而是重放相应的签名信息。

在实施EIP155后,交易签名带有chainid,即链与分叉链之间的标识符。由于chainid不同,交易重放无法完成,签名重放可以间接完成。在以太坊完成分叉后,ETHW主网出现数起重放攻击事件,让我们回顾一下这些攻击事件前因后果。

a16z高管:美国国会议员首次通过委员会全体听证会来强调Web3是互联网的未来:12月9日消息,今日在美国国会的加密听证会上,a16z 政策主管 Tomicah Tilleman 表示:这是国会议员首次通过委员会全体听证会这个平台来强调 Web3 是互联网的未来。这是关于去中心化技术的全国性讨论中一个历史性的转折点,委员会成员承认 Web3 平台有潜力解决许多他们关心的问题,包括汇款和金融普惠。迄今为止,所有与会者的发言都是合理且具备建设性的。到目前为止,一切顺利。

众议员 Patrick McHenry 接着向 Bitfury 首席执行官 Brian Brooks 提出了一个关于 Web 3 的问题,Brooks 随后概述了他如何定义 Web1、Web2 和 Web3 之间的区别。[2021/12/9 13:00:23]

二、攻击事件分析

2.1Optimism

Coin Shares首席执行官:未来负利率环境和全球大规模的量化宽松是对比特币的真正考验:金色财经消息,Coin Shares首席执行官Jean-Marie Mognetti认为,现在是比特币展现其弹性和持久性的时候了。Mognetti解释道:“我们正看到全球一切事物的重新定价——从石油、到股票、到债券、到国债,没错,甚至是比特币。我们认为,比特币是一种暂时避险的资产交易,就像其他在历史上被视为避险的资产在传统市场上交易一样。未来数月乃至数年,我们将看到负利率环境和全球范围内大规模的量化宽松,这将是对比特币的真正考验。”(Live Bitcoin News)[2020/3/16]

2022年6月9日消息,据Optimism与加密货币做市商Wintermute透露,2000万个Optimism代币被黑客盗取。重放攻击过程如下:

5月27日,Optimism地址0x2501向Optimism/L2上的0x4f3a地址转账2000万OP,0x4f3a地址在Ethereum/L1上是Wintermute的多签合约地址,但此时在Optimism/L2上面并没有部署合约;

声音 | BM:如今的监管环境若存在于 5 年前,bitshares、Steem 可能不会存在:昨日晚间至今日凌晨,BM 在电报群谈论有关监管的话题,他表示:如今这样的监管环境若存在于 5 年前,那么 bitshares、Steem 甚至 EOS 就不会存在,因为这些法规扼杀了创新,营造了一个只能在政府许可下进行商业的环境。像 B1 这样的公司是可以遵守规定,但对于没有数亿美元资金的所有人来说,这是不可能的。此外,他还回应了一些社区的提问:现在的 EOS 钱包支持用 youbikey 签署交易吗?BM:不,需要硬分叉(技术升级)。关于 EOSIO 2.0 支持 Webauthn,还是原来的 EOSIO,同样的 EOS 代币,不变对吗?BM:EOS 代币保持不变,EOSIO 只会变得更快更安全。EOS 除了 Voice 和 DApp 外,还有什么其他的战略合作伙伴吗?BM:(在这方面)EOS VC 做了很多。[2019/6/12]

6月1日,黑客地址0x8bcf部署合约0xe714。

Hshare (HSR)登陆韩国交易所Bithumb:Hshare将于首尔时间2018年5月3日下午6时,登陆韩国加密货币交易所Bithumb(具体时间以Bithumb最终公告为准)。为庆祝Hshare登入Bithumb,Bithumb注册用户在平台进行Hshare交易将会得到1%的返点奖励。具体活动时间和细节请关注Bithumb和Hcash官方公告。[2018/5/3]

6月5日,黑客通过重放Ethereum/L1上的交易创建了GnosisSafe:ProxyFactory1.1.1合约,其地址与Ethereum/L1上一样;然后地址0x60b2通过合约0xe714部署了多签合约0x4f3a,合约所有权归黑客所有,因此5月27日转入的2000万OP被黑客盗取。在Gnosis?Safe:ProxyFactory1.1.1合约中,其中创建代理合约函数createProxy如下:

GnosisSafe:ProxyFactory1.1.1合约使用的是0.5版本的Solidity,使用new来创建合约时使用的是create命令,而不是create2。使用create命令创建合约,合约地址是msg.sender以及nonce来计算的。在Ethereum/L1上面,创建多签合约0x4f3a的msg.sender就是GnosisSafe:ProxyFactory1.1.1的地址,黑客在Optimism/L2通过重放交易来创建于GnosisSafe:ProxyFactory1.1.1合约的主要目的就是为了保证在Optimism/L2上创建合约0x4f3a的msg.sender与在Ethereum/L1上一致,那么黑客可以很方便的通过智能合约调用createProxy函数来创建出地址是0x4f3a的合约。

6月5日,多签合约0x4f3a在接收到2000万OP后,将100万OP转账给黑客地址0x60b2,然后将100万OP兑换成了720.7Ether。

6月9日,合约0x4f3a将其中的100万OP转账给了账户地址0xd8da,其他的1800万OP仍然在合约0x4f3a中。

本次攻击根本原因是:交易重放、Solidity旧版本漏洞以及主链和侧链交易签名验证等综合因素

2.2Omni

2022年9月18日,以太坊合并完成后,PoW链遭到PoS链上交易的重放攻击,根本原因是网桥未正确读取并验证区块链的chainid。攻击者首先通过Gnosis链的Omni跨链桥转移了200WETH,然后在PoW链上重放了相同的消息,获得了额外的200ETHW。

PoS链交易hash:0xbddb0cc8bc9949321e1748f03503ed1a20dd618fbf0a51dc5734c975b1f8bdf5

PoW链交易hash:0x9c072551861ce384203516f4d705176a2d2e262d5b571d853467425f1a861fb4

我们对比发现两笔交易访问的合约相同,并且inputdata完全相同,即调用了同一个合约的同一个函数并且参数相同,根据相同的方法签名ID0x23caab49可知,黑客调用safeExecuteSignaturesWithAutoGasLimit函数。

在正常的交易中,我们通过nonce来进行排序交易,避免重复交易。在跨链中,我们会根据chianid进行识别链的类型,比如以太坊主网的chainid是1,ETHW主网的chainid是10001。

我们查看一下OmniBridge验证chainid的逻辑,发现chainid的来源于unitStorage中存储的值,而不是通过操作码CHAINID直接读取的链上chainid。

unitStorage是合约EternalStorage中的状态变量,sourceChainId()函数所在的合约BasicAMB继承了BasicBridge和VersionableAMB。其中,BasicBridge陆续继承了合约EternalStorage。这里保存的chainid是预先存储好的,如果发生区块链的硬分叉而chainid又没有重新设置或者chainid人为设置有误,从合约层面上来说,由于不是通过操作码获取的chainid,不会正确验证跨链消息的实际chainid。

本次攻击根本原因是:主要是Omni使用的solidity版本是0.4.24,采用的是手动存储和更新chainid的方式,并未通过EIP-1344中规定的CHAINID操作码进行实际chainid获取。

三、预防措施

针对重放攻击主要有以下几种预防的方法:

可以在签名消息中加入chainid和nonce两个参数值,chainid用于识别链ID的标识符,nonce是交易次数计数值。

记录签名是否使用过,比如利用mapping进行签名中对应参数映射为bool值,这样做可以防止签名多次使用。

项目上线前,需联系专业的第三方专业审计团队进行审计。

来源:tuoniaox

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

大币网

[0:46ms0-10:956ms