重放攻击是把原链网络上的交易拿到目标链网络上使用
问:我们常提到的智能合约漏洞真的是实际中威胁最大、发生最频繁的安全漏洞吗?
答:完全不是那样。例如“溢出”、“外部调用”等常提到的智能合约安全漏洞并不是最常发生,威胁最大的。
到底哪些安全威胁从发生频率和危害性上能称为Top10的呢?SharkTeam合约安全系列课程之和您一起讨论和深入。第十课。
一、什么是重放攻击
重放攻击是把原链网络上的交易拿到目标链网络上使用,即一笔交易重复执行,我们根据类型可以分为交易重放和签名重放。
交易重放是将原链上的交易一成不变放到目标链上,重放过后交易在目标链上可以正常执行并完成交易验证。
连锁汉堡品牌Shake Shack为通过Cash App购买商品的顾客提供BTC返点奖励:3 月 5 日,据华尔街邮报报道,连锁汉堡品牌 Shake Shack 宣布为通过 Cash App 购买商品的客户提供加密奖励。具体是:使用 Cash Card、Cash App 的借记卡以及通过奖励计划 Cash Boost 的购买行为将获得交易额 15% 的 BTC 返还。该优惠将于 3 月中旬结束。[2022/3/5 13:38:27]
签名重放利用私钥签名的消息进行重放,重放过程中无需像交易重放那样去重放整个交易,而是重放相应的签名信息。
在实施EIP155后,交易签名带有chainid,即链与分叉链之间的标识符。由于chainid不同,交易重放无法完成,签名重放可以间接完成。在以太坊完成分叉后,ETHW主网出现数起重放攻击事件,让我们回顾一下这些攻击事件前因后果。
ARK基金与21Shares?AG美国子公司合作推出比特币期货ETF:10月14日消息,CathieWood旗下ARK基金已与21Shares AG美国子公司合作申请推出比特币期货ETF:“ARK 21Shares Bitcoin Futures Strategy ETF”,股票代码为ARKA。据悉,ARK已经与21Shares根据1933年的《证券法》合作提交了实物比特币ETF的申请,此次申请是根据1940年《投资公司法》对比特币期货ETF的额外申请,后者是SEC主席GaryGensler曾明确表示可能获得批准的加密ETF。(金十)[2021/10/14 20:27:25]
二、攻击事件分析
2.1Optimism
2022年6月9日消息,据Optimism与加密货币做市商Wintermute透露,2000万个Optimism代币被黑客盗取。重放攻击过程如下:
21Shares将在瑞士SIX交易所推出XLM和ADA ETP:金色财经报道,总部位于瑞士的投资产品提供商21Shares周四宣布,将为Stellar和Cardan推出交易所交易产品(ETP)。Stellar XLM ETP(AXLM)和Cardano ADA ETP(AADA)将于4月26日在瑞士SIX交易所上市。[2021/4/23 20:49:29]
5月27日,Optimism地址0x2501向Optimism/L2上的0x4f3a地址转账2000万OP,0x4f3a地址在Ethereum/L1上是Wintermute的多签合约地址,但此时在Optimism/L2上面并没有部署合约;
6月1日,黑客地址0x8bcf部署合约0xe714。
6月5日,黑客通过重放Ethereum/L1上的交易创建了GnosisSafe:ProxyFactory1.1.1合约,其地址与Ethereum/L1上一样;然后地址0x60b2通过合约0xe714部署了多签合约0x4f3a,合约所有权归黑客所有,因此5月27日转入的2000万OP被黑客盗取。在Gnosis?Safe:ProxyFactory1.1.1合约中,其中创建代理合约函数createProxy如下:
库币将于11月13日18:00上线ShareRing (SHR):据库币KuCoin交易所消息,库币将于11月13日18:00上线ShareRing (SHR)并支持SHR/BTC、SHR/USDT交易服务。ShareRing是一个去中心化的共享生态系统,旨在与旅行,保险,租赁,物流,慈善,加密货币和市场等各个行业的业务无缝集成。库币数字货币交易所,为来自207个国家的600万用户提供币币、法币、合约、矿池、借贷等一站式服务。[2020/11/12 14:07:56]
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的合约。
声音 | ShapeShift创始人:Libra让美国立法者感到不安 因为他们害怕失去美元主导地位:加密货币交易所ShapeShift创始人兼首席执行官Erik Voorhees在博客分享关于加密生态系统中发生的几件事的看法。 Voorhees首先谈到最近在交易所中增加强制注册和KYC。他表示,大量的黑客攻击对那些最大交易所产生了广泛的影响,导致Shaes Shift命令用户需要完成KYC。 他表示,比特币社区憎恶其他加密项目,并在推特上攻击其他项目上,这是一个令人悲哀的景象。“我认为自己是整个加密货币生态系统的一部分,而不仅仅是比特币生态系统,也不仅仅是以太坊生态系统。” Voorhees解释了Facebook的Libra如何因其两个主要设计脱颖而出——它是使用区块链技术建造的,而且它不仅仅由一种法定货币支撑,而是一篮子法定货币。Voorhees认为,Facebook的加密冒险让美国立法者感到“不舒服”,因为他们担心失去对世界金融体系的主导地位。他补充说,Facebook的全球影响力对他们构成了比特币或其他加密货币更大的威胁。(AMBCrypto)[2019/8/14]
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
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。