重入攻击
重入攻击 是什么?
重入攻击智能合约漏洞,外部调用使攻击者在状态更新前再次进入原函数,通过递归循环不断转出资金。
当合约在更新自身账本之前向外部地址发送 ETH 或代币(如使用 call、transfer 或 ERC-777 钩子)时,就可能发生重入。攻击者控制该外部地址,并在回调中再次调用原始的提取函数,如此循环直至合约被掏空。常见变体包括单函数、跨函数、跨合约以及只读重入。缓解方法包括 checks-effects-interactions 模式、OpenZeppelin 的 ReentrancyGuard、采用 pull-payment 设计,以及避免对不受信任的合约使用低级调用。2016 年针对 The DAO 的攻击是经典案例,并直接导致 Ethereum 与 Ethereum Classic 的硬分叉。
● 示例
- 01
2016 年 6 月 The DAO 被通过递归调用 splitDAO 抽走约 360 万枚 ETH。
- 02
2021 年 Cream Finance 因 ERC-777 回调引发跨函数重入而遭遇紧急事件。
● 常见问题
重入攻击 是什么?
智能合约漏洞,外部调用使攻击者在状态更新前再次进入原函数,通过递归循环不断转出资金。 它属于网络安全的 Web3 与区块链 分类。
重入攻击 是什么意思?
智能合约漏洞,外部调用使攻击者在状态更新前再次进入原函数,通过递归循环不断转出资金。
重入攻击 是如何工作的?
当合约在更新自身账本之前向外部地址发送 ETH 或代币(如使用 call、transfer 或 ERC-777 钩子)时,就可能发生重入。攻击者控制该外部地址,并在回调中再次调用原始的提取函数,如此循环直至合约被掏空。常见变体包括单函数、跨函数、跨合约以及只读重入。缓解方法包括 checks-effects-interactions 模式、OpenZeppelin 的 ReentrancyGuard、采用 pull-payment 设计,以及避免对不受信任的合约使用低级调用。2016 年针对 The DAO 的攻击是经典案例,并直接导致 Ethereum 与 Ethereum Classic 的硬分叉。
如何防御 重入攻击?
针对 重入攻击 的防御通常结合技术控制与运营实践,详见上方完整定义。
重入攻击 还有哪些其他名称?
常见的别称包括: 递归调用攻击。
● 相关术语
- web3№ 1056
智能合约安全
通过设计、审查和运维链上程序,防止其被利用以盗取资金、冻结逻辑或违反业务规则的实践。
- web3№ 1055
智能合约审计
由独立第三方对智能合约源代码、部署配置与经济设计进行的安全评审,通常在上线或升级前完成。
- web3№ 424
闪电贷攻击
DeFi 攻击者在一笔交易中借入巨额无抵押闪电贷,以操纵价格或治理,在贷款偿还前盗取资金。
- web3№ 106
区块链安全
保护分布式账本、共识机制、智能合约及其周边基础设施免受攻击、欺诈与盗窃的综合学科。
- vulnerabilities№ 895
竞态条件
系统的安全性或正确性依赖于并发操作的时序或顺序的缺陷,攻击者可借机交错执行并绕过检查。
- web3№ 765
预言机操纵
通过扰乱智能合约所依赖的价格或数据源,使合约在借贷、清算或结算中做出严重错误决策的攻击。