第八课【详解回退攻击】
问:我们常提到的智能合约漏洞真的是实际中威胁最大、发生最频繁的安全漏洞吗? 答:完全不是那样。例如“溢出”、“外部调用”等常提到的智能合约安全漏洞并不是最常发生,威胁最大的。 到底哪些安全威胁从发生频率和危害性上能称为Top10的呢?SharkTeam合约安全系列课程之【十大智能合约安全威胁】和您一起讨论和深入。第八课【详解回退攻击】。
回退是区块链上的一种机制。回退操作是为了恢复到之前的状态,无论是简单的交易转移,还是处理一些更复杂的逻辑合约调用。在这异常的交易操作中,gas成本费是不会被退还的。 回退攻击是根据操作结果来决定的,如果操作结果没有达到攻击者预期的效果,攻击者会让交易回退。 以太坊在拜占庭升级后,EVM中实现了EIP-140:REVERT 指令。REVERT 指令在执行中发送异常,将撤消所有状态更改,但其处理方式与无效操作码(0xfe)有两种不同的处理方式: (1)它将允许你返回一个值。 (2)它将把剩余的gas退还给调用者。 Solidity中提供了revert()、require()两种方法,这两种方法使用0xfd操作码触发错误条件。0xfd操作码在EIP-140中被映射到REVERT指令,即两种方法可以在执行中发送异常,将撤消所有状态更改,返还剩余gas。 我们在开发中定义了require(condition, "description"),如果有定义error Error(string),那么require(condition, "description")等效于if (!condition) revert Error("description"))。 目前针对GameFi市场智能合约的攻击类型主要是回退攻击,因此接下来我们回顾下相关的攻击事件。
CryptoZoan在币安智能链 (BSC)上以NFT游戏的玩法和体验为重点,旨在创建一个与区块链和游戏相结合的新金融系统,使用户在进行游戏的同事,赚取收益。该游戏通过加入随机性的机制来增强用户体验,用户可以将游戏中的“蛋”进行孵化,ZOAN随机拥有一个稀有度等级,ZOAN终生依附于这个稀有度等级,总共有6个等级,等级越高,价值越高。攻击者利用随机性与回退的结合,使得攻击者的孵化请求得到想要的结果(Level 6),破坏游戏的公平性,使得攻击者获得最高收益。 攻击流程: (1)将待孵化的蛋部署在攻击合约; (2)调用攻击合约触发evolveEgg(uint256)函数; (3)检查稀有度,如果等级太低则进行回滚;(可能会消耗Gas费用,需要去权衡选择是否继续。) (4)取出高等级的宠物。 攻击脚本如下:
加入require判断,要求稀有度等级必须大于等于6才可以正常执行,否则将交易回滚。
CryptoZoons的任务是与怪兽战斗。玩家首先选择要在战斗中使用的生物,并通过在 MarketPlace 购买这些物品来为它们装备武器。玩家将支付一点 BNB gas 价格与选定的敌人进行战斗,同时获胜的一方会获得一定数量的代币。正是由于合约中回退机制,使得攻击者在战斗结束后可通过余额判断是否获胜。取得胜利时,则发送交易正常执行;失败时进行回滚。 攻击流程: (1)将宠物部署在攻击合约; (2)让合约触发战斗; (3)检查代币是否增加(战斗是否胜利); (4)战斗失败,将交易回滚,发送交易; (5)战斗胜利,发送交易。 攻击脚本如下:
加入require判断,要求余额必须大于交易前(战斗胜利)才可以正常执行,否则将交易回滚。
我们回顾了相关事件后,我们在开发过程中应当采取哪些适当的措施来降低回退攻击风险呢? (1)使用OpenZeppelin安全库中isContract()方法判断调用地址是否合约地址。 (2)进行权限设置,限制特定的合约地址和EOA调用。 (3)项目上线前,需联系专业的第三方专业审计团队进行审计。
关于我们:SharkTeam的愿景是全面保护Web3世界的安全。团队成员分布在北京、南京、苏州、硅谷,由来自世界各地的经验丰富的安全专业人士和高级研究人员组成,精通区块链和智能合约的底层理论,提供包括智能合约审计、链上分析、应急响应等服务。已与区块链生态系统各个领域的关键参与者,如Polkadot、Moonbeam、polygon、OKC、Huobi Global、imToken、ChainIDE等建立长期合作关系。
Twitter:https://twitter.com/sharkteamorg Discord:https://discord.gg/bFmbFy74 Telegram:https://t.me/sharkteamorg 更多区块链安全咨询与分析,点击下方链接查看 D查查|链上风险核查 https://m.chainaegis.com
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!