Advertisement

分析重入漏洞并实现修复方案

阅读量:

漏洞概述

在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)

还没有任何评论哟~