skka3134

skka3134

email
telegram

智能合約安全:5.selfdestruct

自毀函數 selfdestruct 是智能合約一個具有潛在危險性的功能,黑客可以通過多種手段利用它進行惡意攻擊。本文將通過程式碼實例分析 selfdestruct 攻擊方式,以及如何通過安全編碼防範這類攻擊。

攻擊者可以通過調用目標合約的 selfdestruct 函數破壞合約。例如:

contract Target {
  address owner;

  function selfDestruct() public {
    require(msg.sender == owner);  
    selfdestruct(owner);
  }
}

contract Attacker {
  function attack(Target target) public {
    target.selfDestruct();
  }
}

上例中,攻擊者調用公開的 selfDestruct 函數,如果擁有 owner 權限就可以刪除 Target 合約。

另一個場景是攻擊者通過繼承獲取對 selfdestruct 的訪問權限。例如:

contract Base {
  function selfDestruct() internal {
    selfdestruct(msg.sender);
  }
}

// 惡意繼承
contract Attacker is Base {
  function attack() public {
    selfDestruct();
  }
}

解決辦法
對自毀函數加訪問控制,只允許所有者調用
不設置公開可調用的自毀函數,避免被惡意合約繼承
將危險函數設為內部函數 internal

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。