智能合约安全

2024年07月08日更新 456 人订阅
专栏简介 DeFi安全之杠杆挖矿 SharkTeam系列课程—NFT&GameFi开发与安全 NFT和GameFi概念介绍 ERC20/ERC721/ERC1155概念与协议 闪电贷和重入攻击:Grim Finance被黑事件分析 重入攻击:Uniswap V3流动性协议Visor Finance被黑事件分析 领航Web3安全,让数字生活更安全更美好:SharkTeam线上AMA实录 闪电贷攻击:Sashimi Swap被黑事件分析 ERC20相关业务的合约开发与合约安全 权限问题:Crosswise 被黑事件分析 细节决定成败:QBridge被黑事件分析 损失3.26亿,跨链协议再暴雷:Wormhole被黑事件分析 参数校验不严谨:Superfluid被黑事件分析 ERC721/ERC1155合约开发与合约安全 闪电贷+提案攻击-Beanstalk Farms攻击原理及资金流向分析 监守自盗?Titano.Finance被黑事件分析 AscendEX黑客攻击事件资金流向分析 NFT交易平台安全风险频发--OpenSea & X2Y2安全事件分析 SharkTeam系列课程—NFT 应用场景分析 SharkTeam发布2022年Q1智能合约安全态势感知季报 ChainAegis链上分析:以太坊合并后的中心化风险 大意失荆州-Akutar合约漏洞导致34M美元资金永久被锁 SharkTeam:十大智能合约安全威胁之回退攻击 闪电贷&重入攻击:Hundred与Agave被黑事件分析 从APE空投漏洞谈起,NFT安全情况究竟如何? 千里之堤,溃于蚁穴—跨链协议Nomad被黑事件分析 SharkTeam服务全线升级,重磅推出ChainAegis链上风险分析平台,全面保障Web3生态安全 ChainAegis:从链上数据看,FTX会崩盘吗? NFT合约同样也有重入风险:Revest Finance被黑事件分析 操纵预言机+提案攻击—Fortress Loans被黑事件分析 去年519,今年510—从链上分析的角度看,LUNA会不会真的陷入死亡螺旋? 算法稳定币UST崩盘—是完美风暴还是金融围猎? 6.2亿,再破记录:Ronin Bridge攻击事件技术分析与资金流向分析 周天王的愚人节-NFT精准钓鱼事件技术分析与资金流向分析 【深度】从链上分析和金融安全角度,看stETH的囚徒困境和Celsius挤兑事件 NFT流动性协议的安全困局—NFT借贷协议XCarnival被黑事件分析 NFT流动性市场安全问题频发—NFT交易平台Quixotic被黑事件分析 【深度】OpenSea 新协议 Seaport源码解析 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析 SharkTeam发布2022年第二季度Web3安全态势感知报告 DeFi安全之DEX与AMMs SharkTeam完成Flow生态NFT市场MatrixMarket的安全审计 闪电贷技术详解-Part 1 闪电贷技术详解-Part 2 闪电贷技术详解-Part 3 SharkTeam系列课程:什么是DeFi借贷 DeFi安全之抵押借贷 从链上分析角度看Tornado Cash被制裁事件 Defi安全之借贷杠杆 链上数据角度,看DeFi隐私赛道的现状和未来 火眼金睛,教你如何识别Rug Pull项目 SharkTeam:十大智能合约安全威胁之重入攻击 SharkTeam:十大智能合约安全威胁之操纵预言机 SharkTeam:十大智能合约安全威胁之逻辑校验漏洞 SharkTeam:十大智能合约安全威胁之权限漏洞 SharkTeam:8月Web3安全报告 SharkTeam:十大智能合约安全威胁之合约升级漏洞 警惕以太坊合并后的重放攻击:Omni跨链桥被攻击事件分析 SharkTeam:十大智能合约安全威胁之函数恶意初始化 波卡“以太坊"Moonbeam的技术创新之路 左手以太坊、右手跨链-Moonbeam的创新与突破 批准+校验漏洞-TransitSwap安全事件分析 ChainAegis:BTC和ETH第三季度链上数据解读 默克尔树漏洞成因和链上资金追踪-BNBChain跨链桥攻击事件分析 SharkTeam:Move合约开发与合约安全 Moonbeam的多链架构 高保真还原BNBChain跨链攻击实现原理-攻击者选择高度为110217401的区块到底有什么讲究? SharkTeam:十大智能合约安全威胁之三明治攻击 香港要成为国际虚拟资产中心,链上安全是关键 SharkTeam:十大智能合约安全威胁之提案攻击 ChainAegis:FTX资金流向最新分析,风险大,请尽快提款 SharkTeam:十大智能合约安全威胁之重放攻击 Move语言安全性分析及合约审计要点 之权限漏洞、重入攻击 ChainAegis:Top20 中心化交易所资金储备链上分析-Part 1 区块链安全 Move语言安全性分析及合约审计要点 之逻辑校验漏洞 ChainAegis:Top20 中心化交易所资金储备链上分析-Part 2 ChainAegis:Top20 中心化交易所资金储备链上分析-Part 3 Move语言安全性分析及合约审计要点 之函数恶意初始化 链上数据分析:CeFi频繁暴雷后,DEX会成为主流吗? Move语言安全性分析及合约审计要点之回退攻击 SharkTeam:11月Web3安全报告 SharkTeam与NFMS达成合作,提供Move合约审计服务 Move语言安全性分析及合约审计要点之提案攻击 ChainAegis分析报告:Dogecoin排名前10的市值从何而来? SharkTeam完成APTOS生态项目NFMS的合约审计 ArWiki调研报告 Move语言安全性分析及合约审计要点之合约升级漏洞 Verto调研报告 在深熊中艰难前行,DeFi & CeFi 2022年度分析报告 SharkTeam:2022年度Web3安全报告 ChainAegis:2022年度NFT&GameFi分析报告 Move语言安全性分析及合约审计要点之操纵预言机 加密货币反洗钱(AML)分析 SharkTeam:Move语言安全性分析及合约审计要点 之三明治攻击 ChainAegis:BUSD链上数据分析报告 闪电贷攻击+业务逻辑漏洞:Platypus Finance事件分析 SharkTeam:Move语言安全性分析及合约审计要点之重放攻击 加密货币钓鱼团伙Monkey Drainer链上行为分析 权限漏洞+价格操纵:SwapX被攻击事件分析 ChainAegis:Blur链上数据分析报告 ChainAegis:数读Silvergate & SVB崩盘事件 业务逻辑漏洞+闪电贷攻击:Euler Finance被攻击事件分析 ChainAegis:稳定币协议Liquity链上分析报告 ChainAegis:GMX链上分析报告 SharkTeam与GoPlus Security达成战略合作,共同守护Web3世界安全 香港之夜,Dao的盛会 SharkTeam:2023年第一季度Web3安全报告 Talk with us,公链、DeFi等Web3时代的创新发展机遇有哪些? 香港Web3嘉年华“Web3与安全”主题论坛议程揭秘 2023香港Web3嘉年华,SharkTeam展台指引 权限校验漏洞:SushiSwap被攻击事件分析 香港会议期间,SharkTeam发布“链上安全分析研究报告” 安全是发展Web3的必要条件-SharkTeam受邀香港Web3嘉年华 ChainAegis:LSD赛道链上分析报告 Sui 与 Aptos 技术实现对比 ChainAegis:去中心化保险赛道及风险分析 ChainAegis:Pancakeswap V2V3链上数据分析 ChainAegis:AAVE V2/V3链上数据分析 ChainAegis:Gains Network链上数据分析 逻辑漏洞:DEUS被攻击事件分析 ChainAegis:BRC-20链上数据分析 ChainAegis:Blend链上数据分析 SharkTeam:Tornado.Cash提案攻击原理分析 SharkTeam:Sui主网链上数据分析 SharkTeam:Jimbos protocol闪电贷攻击原理分析 SharkTeam:RWA赛道链上数据分析 SharkTeam:Zksync Era链上数据分析 SharkTeam:Atomic Wallet攻击原理和洗钱模式分析 链安全 Sui主网上线满月,链上持币者数据分析 SharkTeam:Atlantis提案攻击原理分析 SharkTeam:HashFlow攻击事件原理分析 SharkTeam:2023年第二季度Web3安全报告 SharkTeam与Move Accelerator达成合作,Let’s Move! SharkTeam:Themis protocol闪电贷价格操纵攻击分析 SharkTeam:4月28日攻击者就已实施攻击-PolyNetwork攻击原理和资产转移分析 SharkTeam:AzukiDAO攻击事件分析 SharkTeam:BNO攻击事件原理分析 SharkTeam:Vyper漏洞导致Curve和JPEG'd等项目被攻击原理分析 SharkTeam:UniswapV4 Hook最佳安全实践 SharkTeam:UniswapX 源码分析 SharkTeam:Worldcoin运营数据及业务安全分析 SharkTeam与TOKEN2049正式达成合作伙伴关系 SharkTeam:Exactly Protocol攻击事件原理分析 SharkTeam:Rugpull工厂黑色产业链分析 SharkTeam开启9月双城记 SharkTeam上海区块链全球峰会展台指引 SharkTeam:Web3安全实践与创新 KYT/AML:Web3合规展业的必要条件 SharkTeam:典型钓鱼攻击链上资产转移分析 SharkTeam:起底朝鲜APT组织Lazarus Group,攻击手法及洗钱模式 SharkTeam:2023年第三季度Web3安全报告 SharkTeam:BH闪电贷攻击原理分析 SharkTeam:Platypus Finance攻击事件原理分析 SharkTeam:Onyx Protocol攻击事件原理分析 SharkTeam:Raft攻击事件原理分析 从链上分析角度看FTX破产清算过程,美国加密货币监管与风险处置能力究竟如何 SharkTeam:KyberSwap攻击事件原理分析 SharkTeam:ERC2771\&Multicall任意地址欺骗漏洞原理分析 SharkTeam:OKX DEX攻击事件分析及链上资产追踪 SharkTeam:从链上数据看稳定币的安全与监管 SharkTeam:2023年加密货币犯罪分析报告 SharkTeam:MIM_SPELL被攻击事件原理分析 SharkTeam:合约精度计算漏洞与安全建议 SharkTeam:Woo Finance被攻击事件分析 SharkTeam:Prisma Finance被攻击事件分析 SharkTeam:2024年第一季度Web3安全报告 SharkTeam:Hedgey Finance被攻击事件分析 SharkTeam:Sonne Finance攻击事件分析 SharkTeam:Web3常见钓鱼方式分析与安全防范建议 SharkTeam:UwU Lend攻击事件分析 SharkTeam:美国众议院FIT21法案解读 SharkTeam:2024年上半年度Web3安全报告

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

  • SharkTeam
  • 发布于 2023-02-24 17:53
  • 阅读 2757

SharkTeam【Move语言安全性分析及合约审计要点】系列课程将带您逐步深入,内容包括权限漏洞、重入漏洞、逻辑校验漏洞、函数恶意初始化、回退攻击、提案攻击、合约升级漏洞、操纵预言机、三明治攻击、重放攻击。本章内容【重放攻击】。

SharkTeam在之前的“十大智能合约安全威胁”系列课程中,根据历史发生的智能合约安全事件,总结分析了在智能合约领域中出现较多、危害最大的前10大漏洞。这些漏洞之前通常出现在Solidity智能合约中,那么对于Move智能合约来说,会不会存在相同的危害呢? 

SharkTeam【Move语言安全性分析及合约审计要点】系列课程将带您逐步深入,内容包括权限漏洞、重入漏洞、逻辑校验漏洞、函数恶意初始化、回退攻击、提案攻击、合约升级漏洞、操纵预言机、三明治攻击、重放攻击。本章内容【重放攻击】。

重放攻击(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的代码如下:

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 Omn****iBridge****重放攻击事件****

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。

在以太坊硬分叉后,该状态变量存储的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签名验证

(2)基于Ed25519椭圆曲线的EdDSA签名验证

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

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

Sui公链Move合约同样支持上面的4种签名验证,此外还支持范围证明验证以及Groth16零知识证明的验证。

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 @font-face{ font-family:"Times New Roman"; } @font-face{ font-family:"宋体"; } @font-face{ font-family:"Calibri"; } @font-face{ font-family:"微软雅黑"; } p.MsoNormal{ mso-style-name:正文; mso-style-parent:""; margin:0pt; margin-bottom:.0001pt; mso-pagination:none; text-align:justify; text-justify:inter-ideograph; font-family:Calibri; mso-fareast-font-family:宋体; mso-bidi-font-family:'Times New Roman'; font-size:10.5000pt; mso-font-kerning:1.0000pt; } p.MsoFooter{ mso-style-name:页脚; mso-style-noshow:yes; margin:0pt; margin-bottom:.0001pt; layout-grid-mode:char; mso-pagination:none; text-align:left; font-family:Calibri; mso-fareast-font-family:宋体; mso-bidi-font-family:'Times New Roman'; font-size:9.0000pt; mso-font-kerning:1.0000pt; } span.msoIns{ mso-style-type:export-only; mso-style-name:""; text-decoration:underline; text-underline:single; color:blue; } span.msoDel{ mso-style-type:export-only; mso-style-name:""; text-decoration:line-through; color:red; } @page{mso-page-border-surround-header:no; mso-page-border-surround-footer:no;}@page Section0{ } div.Section0{page:Section0;}

SharkTeam【Move语言安全性分析及合约审计要点】系列课程将带您逐步深入,内容包括权限漏洞、重入漏洞、逻辑校验漏洞、函数恶意初始化、回退攻击、提案攻击、合约升级漏洞、操纵预言机、三明治攻击、重放攻击。本章内容【重放攻击】。

  • 学分: 3
  • 分类: Move
  • 标签:
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论