Entry № 1020
重入攻击
重入攻击 是什么?
重入攻击智能合约漏洞,外部调用使攻击者在状态更新前再次进入原函数,通过递归循环不断转出资金。
当合约在更新自身账本之前向外部地址发送 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 与区块链 分类。
重入攻击 是什么意思?
智能合约漏洞,外部调用使攻击者在状态更新前再次进入原函数,通过递归循环不断转出资金。
如何防御 重入攻击?
针对 重入攻击 的防御通常结合技术控制与运营实践,详见上方完整定义。
重入攻击 还有哪些其他名称?
常见的别称包括: 递归调用攻击。