首页 > 热点新闻 > SharkTeam:Move语言安全性分析及合约审计要点之重放攻击
SharkTeam  

SharkTeam:Move语言安全性分析及合约审计要点之重放攻击

摘要:重放攻击(Replay Attack,又称为重播攻击、回放攻击)是传统网络中的一种恶意或欺诈的重复或延迟有效数据的攻击手段。

SharkTeam在此前的“十大智能化合约安全风险”系列课程中,根据历史产生智能合约安全事故,梳理总结了在智能合约行业里出现比较多、伤害较大前10大系统漏洞。这种系统漏洞以前一般出现在了Solidity智能化合约中,那对于Move智能化合约而言,会不会出现同样的危害性呢?

SharkTeam【Move语言安全性分析及合约财务审计关键点】系列课程带您您逐渐深层次,基本内容管理权限系统漏洞、再入系统漏洞、逻辑性校检系统漏洞、函数公式故意复位、返回攻击、提议攻击、合约更新系统漏洞、控制预言机、三明治攻击、重放攻击。此章具体内容【重放攻击】。

image.png

重放攻击(Replay Attack,也称为回播攻击、回看攻击)是一般网络中的一种故意或诈骗的相同或延迟时间合理数据库的攻击方式。这样可以由重放攻击的发动者或者由阻拦数据信息后重新传送数据的敌人去执行,从而达到蒙骗系统软件的效果。这也是“中介人攻击”的一个较低级别版本号,主要运用于身份验证全过程,毁坏验证的正确性。

区块链中,一样存在重放攻击。区块链中,身份验证的过程就是数据签名验证的一个过程,每一次的身份验证都要一次一个新的电子签名。攻击者很有可能运用已经被用过的电子签名开展身份验证,最终成功根据,让我们称这类攻击方式为区块链里的重放攻击。下面中仅探讨区块链里的重放攻击及其对Move生态系统危害。

一、重放攻击归类

依据重放的签字数据以及攻击方面的不一样,我们将要重放攻击分成交易重放和签字重放。

交易重放指重复使用交易以及签字,将该链里的交易一成不变放进总体目标链上,重放之后交易在总体目标链上能正常实行并进行交易认证。交易重放是区块链方面的攻击,是一种同生态系统跨链(例如Solidity生态系统Ethereum、BNB Chain、HECO Chain等)攻击方式。

签字重放指重复使用交易数据信息里的私钥签名开展重放,重放环节中不用像交易重放那般去重放全部交易,反而是重放对应的数据信息以及签字。签字重放是智能化合约方面的攻击,能够在同一个一条链里的重放,能是同一绿色生态跨链攻击,还可以是签字适配的差异绿色生态公有链(例如Solidity生态系统Ethereum、Rust生态系统Solana、Move生态系统Aptos等)的跨链攻击。签字重放更多的是同一生态系统跨链攻击;同一条链内重放特别少;有所不同生态系统跨链重放攻击必须的前提条件最严苛,概率最少,但很难保证绝不会产生。针对网络黑客,不论是工程项目的设计师、开发人员,或是财务审计者,都不能掉以轻心的心。

二、安全事故

2.1 Optimism重放攻击事情

2022年6月9日,网络黑客根据交易重放攻击取得成功窃取了Optimism慈善基金会向Wintermute授予2000万枚OP货币。交易重放攻击全过程如下所示:

(1)5月27日,Optimism慈善基金会向Wintermute在Optimism/L2上边的多签合约详细地址转到2000万OP货币。该多签合约地点是Wintermute在Ethereum/L1里的多签合约详细地址,并已经启动了多签合约。但是,Wintermute并不在Optimism/L2上边布署对应的多签合约。

(2)6月1日,攻击者启动了攻击合约。

(3)6月5日,攻击者根据重放Ethereum/L1里的交易创立了Gnosis Safe: Proxy Factory 1.1.1合约,其地点与Ethereum/L1上一样;随后攻击者根据攻击合约启动了多签合约0x4f3a,该合约一样与Wintermute在Ethereum/L1能够的多签合约详细地址同样,但合约使用权归攻击者全部。这时,该多签合约中已经被转到了2000万OP货币。

(4)攻击者利用其部署的多签合约0x4f3a将100万OP转至攻击者详细地址,将100万OP折算成了720.7 Ether。

全部攻击全过程之所以能取得成功,重点在于攻击者运用Solidity中合约建立的系统漏洞,根据重放攻击创立了与Ethereum/L1里的Wintermute多签合约具有相同地址的多的钱合约,该多签合约的使用权归攻击者全部。

在Gnosis Safe: Proxy Factory 1.1.1合约中,在其中建立代理商合约函数createProxy的代码如下所示:

image.png

Gnosis Safe: Proxy Factory 1.1.1合约所使用的Solidity版本号是0.5.3,根据new来建立合约。这儿的new建立合约所使用的操作码是CREATE而非CREATE2。

应用CREATE操作码建立合约,合约地点是creator(合约创始人详细地址,一般用CREATE操作码的现阶段合约详细地址)及其nonce来计算的。在Ethereum/L1上边,建立多签合约0x4f3a的creator便是Gnosis Safe: Proxy Factory 1.1.1地址,攻击者在Optimism/L2根据重放交易来创办于Gnosis Safe: Proxy Factory 1.1.1合约的重要目的就是为了确保在Optimism/L2上建立合约0x4f3a的creator和在Ethereum/L1上一致。再通过交易重放维持nonce也和Ethereum/L1上一致。因而,攻击者就可以用智能化合约(合约0xe714)启用createProxy函数公式来建立出与Ethereum/L1具有相同详细地址(0x4f3a)的多签合约。

(5)6月5日,多签合约0x4f3a在接受到2000万OP后,将100万OP转帐给网络黑客详细地址0x60b2,再将100万OP折算成了720.7 Ether。

(6)6月9日,合约0x4f3a将这其中的100万OP转帐给帐户详细地址0xd8da, 其它的1800万OP仍在合约0x4f3a中。

总的来说,此次安全事故是交易重放、Solidity新老版本号差别及其主主链交易签名验证等各项要素所造成的。

Solidity操作码CREATE与CREATE2介绍如下所示:

(1)CREATE操作码建立合约,一个新的合约详细地址测算如下所示:

Hash(creator, nonce)

Ÿ   creator:新合约的创始人详细地址,一般用CREATE的合约详细地址

Ÿ   nonce:建立合约的交易的nonce值

根据new应用CREATE建立新合约:

Contract x = new Contract{value: _value}(params)

这其中的value是可供选择的,指上传的以太坊

(2)CREATE2操作码建立合约,一个新的合约详细地址测算如下所示:

Hash("0xff", creator, salt, bytecode)

Ÿ   "0xff":一个变量定义,防止和CREATE矛盾

Ÿ   creator:新合约的创始人详细地址

Ÿ   salt:一个创始人给定的盐值

Ÿ   bytecode:待布署合约的字节码

根据new应用CREATE2建立一个新的合约:

Contract x = new Contract{salt: _salt, value: _value}(params)

这其中的value是可供选择的,指上传的以太坊。

2.2 OmniBridge重放攻击事情

2022年9月18日,攻击者根据Gnosis链omni桥转移到了200 WETH,之后在PoW链上重放了同样的信息,赢得了额外200 ETHW。

在同一个一条链中,我们可以通过nonce来对交易进行筛选,防止交易被重放。在不同链上,我们会根据chainid进行识别链种类,例如以太币主网上线的chainid是1,ETHW主网上线的chainid是10001。交易中置入chainid,能够避免交易的跨链重放。但对于签字而言,一般用于跨链检验的签字之中会包括chainid,防止签字的跨链重放。

以太币在硬分叉以前强制实行EIP-155,那就说明ETH PoS链上交易不可以在PoW链上重放。因而,该交易重放并非链自身的系统漏洞。剖析Omni Bridge源代码,发现Omni Bridge认证chainid的思路中,chainid来源于unitStorage中存放数值,而不是通过操作码 CHAINID(0x46)立即载入的链上chainid。

image.png

在以太币硬分叉后,该初始条件存储的chainid并没更新给新的chainid,因而,硬分叉前后签字是可以被重放的。攻击者运用该系统漏洞开展签字重放,赢得了额外200万ETHW。

三、风险防控

根据回望已经发生的攻击事情,不论是交易重放,或是签字重放,产生的主要原因全是签字的认证体制中欠缺唯一性认证。只需在签字和验证体制中加入唯一性标识符就可以预防再入攻击。

依据重放攻击的差异方面,唯一性标识符包含3种,即

(1)公有链方面的唯一性标识chainid(公有链ID),认证chainid可以预防跨链的重放攻击(参照EIP-155);

(2)交易方面的唯一性标识nonce(交易系列号),认证nonce可以预防同链重放攻击;

(3)合约方面的唯一性标识,即自定业务流程标志,例如自定义序列号,认证自定业务流程标志可以预防合约中业务方面的签字重放攻击。

针对合约方面,不仅在签字和验证体制中加入唯一性标识符以外,能增加签名验证纪录,例如应用mapping来记录每一个唯一性签字的认证结论。

四、Move重放攻击风险评估

重放攻击都是基于签字制度的攻击方式。与仅支持ECDSA一种签字策略的以太币不一样,Move绿色生态支持多种签字体制,特别是合约方面,适用区块链常见的签名算法,包含根据Secp256k1椭圆曲线的ECDSA签字计划方案(以太币唯一签字计划方案)、根据Ed25519椭圆曲线的单签策略和k-of-N多签计划方案、BLS12-381聚合签名计划方案,乃至也包含Groth16等零知识证明计划方案。

Aptos公有链交易签字适用根据Ed25519椭圆曲线的EdDSA单签策略和k-of-N多签计划方案,默认设置挑选单签计划方案。而合约方面适用4种签字制度的认证:

(1)根据secp256k1椭圆曲线的ECDSA签名验证

image.png

(2)根据Ed25519椭圆曲线的EdDSA签名验证

image.png

(3)根据Ed25519椭圆曲线的k-of-N EdDSA多签签名验证

image.png

(4)bls12-381聚合签名、多签签字和单签签字的认证

image.png

Sui公有链Move合约一样适用上边的4种签名验证,除此之外还提供了范畴证实认证及其Groth16零知识证明的认证。

image.png

image.png

Move公有链支持多种签名验证体制更便于完成合约方面的财产跨链转移,有益于Move生态系统产生。使用签字完成跨链时一定要坚决杜绝签字重放攻击,特别是链上与链下数据库的互动及其业务流程合约方面的签字与认证,更应该慎重对待,防止出现同链或跨链的合约方面的业务数据签字的重放攻击。

About Us

SharkTeam的愿景是全方位维护Web3全球的安全性。精英团队由来自全国各地的资深的安全性专业人员高级科学研究人员构成,熟练区块链智能合约的底层基础理论,提供专业的智能化合约财务审计、链上剖析、应急处置等业务。已经与区块链生态体系各行各业的重要参加者,如Polkadot、Moonbeam、polygon、OKC、Huobi Global、imToken、ChainIDE等建立长期合作伙伴关系。

image.png

Twitter:https://twitter.com/sharkteamorg

Discord:https://discord.gg/jGH9xXCjDZ 

Telegram:https://t.me/sharkteamorg

大量区块链安全咨询和分析,点击进入连接查询

D查下|链上风险性审查https://app.chainaegis.com

转载:驼鸟区块链

Tags:
免责声明
世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:msy2134。