分析重入漏洞并实现修复方案
发布时间
阅读量:
阅读量
漏洞概述
在Ethereum生态系统中, 智能合约能够执行其他合同脚本的功能, 因为智能合约既可以直接执行外部合同脚本的功能, 也可以通过发送加密货币至特定地址来触发相关操作, 这些功能通常会被发布到主链网络, 并可能导致被发起方控制整个网络的行为发生, 从而使目标合同可以在任何时间点被触发, 从而突破原有约束机制. 在这种情况下, 当一个合同试图通过发送加密货币至未知地址时, 就有可能引发重入攻击行为. 这种情况与编程中的递归函数调用机制具有相似性
简单的来说,发生重入攻击漏洞的条件有 2 个:
采用了外部合同,并且该合同存在安全隐患;在状态变量进行修改之前,外部合同中的函数已经调用了
在假设中,在智能合约A中包含功能模块F1,在攻击合约B中也包含功能模块F2。功能模块F1的功能包括向消息发送方转账或调用其特定的功能模块。从而可能导致攻击者通过重入机制发起攻击。
受害者合约:
contract EtherStore{
uint256 public withdrawaLimit = 1 ether;
mapping(address => uint256) public lastWithdrawTime;
mapping(address => uint256) public balances;
functi
全部评论 (0)
还没有任何评论哟~
