答:并非如此。例如,常见的“溢出”或“外部调用”等智能合约网络安全问题,并不是造成最频繁或最大威胁的问题之一。
那么什么样的安全威胁在发生次数和不良影响方面可以算作是最严重的前十个呢?SharkTeam合同安全系列课程中的【十大智能合约安全威胁】会与你深入探讨,其中第八课详细讨论“回退进攻”。
一、什么是回退进攻?
“回退”是区块链中一种机制。回退操作用于恢复之前的正常状态,无论是简单的交易迁移还是解决更复杂的智能合约启用问题。在异常交易操作中发生后,gas成本费用通常不会退还。
回退进攻取决于操作结果,如果操作结果未达到攻击者想要的效果,攻击者会进行回退操作。
以太币在拜占庭更新后,EVM中加入了EIP-140:REVERT命令。REVERT命令在执行过程中会抛出异常,撤销全部状态变更,但其处理方式与无效操作码(0xfe)略有不同:
1.能够将你恢复到某个值。
2.计划将剩余的gas退还给调用者。
Solidity中提供了revert和require两种方式,这两种方式使用0xfd操作码以正确标准开展。0xfd操作码在EIP-140中被投射到REVERT命令,这两种方式也可以在执行过程中抛出异常,撤销全部状态变更,退还其余gas。
在设计中,如果将require(condition,"description")结合errorError(string)进行定义,那么require(condition,"description")等价于if(!condition)revertError("description")。
目前,GameFi销售市场智能合约的攻击类型通常是回退进攻,因此下面我们回顾一些相关攻击事件。
二、攻击事件分析
2.1 CryptoZoan
CryptoZoan是基于币安智能链(BSC)上的NFT游戏,旨在创建与区块链游戏相结合的新金融系统,让参与游戏的用户获得利润。该游戏根据添加了随机性机制来提高用户体验。用户可以孵化游戏中的“蛋”,每个蛋拥有一个品阶级别,共有6个级别,级别越高则使用价值越大。攻击者利用随机性和回退的结合,使得其孵化要求达到最期望的结果(Level6),破坏游戏的公平性,使攻击者获得最大利润。
攻击步骤:
1.将待孵化的蛋部署在攻击合约。
2.启动攻击合约触发evolveEgg(uint256)函数。
3.检查品阶,如果级别太低则进行回退(可能会消耗Gas费用,需要进行权衡)。
4.获取高级别的宠物。
攻击脚本代码如下:
加入require区分,规定品阶级别必须大于或等于6才能正常执行,否则操作将被回退。
2.2 CryptoZoons
CryptoZoons旨在与怪物战斗。游戏玩家首先选择常用于战斗中的微生物,并使用MarketPlace购买武器和装备。游戏玩家需要支付一定的BNBgas费用与指定的对手进行战斗,同时获胜方将得到一定数量的货币。由于合同中存在回退机制,攻击者可以在战斗结束后根据账户余额确定是否获胜。如果获胜,则系统会正常执行操作;如果失败,则进行回退操作。
攻击步骤:
1.将小宠物部署在攻击合约。
2.启动攻击合约进行作战。
3.检查货币是否增值(是否获胜)。
4.如果作战失败,则进行回退操作并执行交易;如果作战获胜,则执行交易。
攻击脚本代码如下:
加入require区分,规定账户余额必须超过交易前的值(胜利)才能正常执行,否则操作将被回退。
三、防范措施
回顾相关事件后,我们应该采取什么适当的措施来减少回退攻击风险呢?
1.使用OpenZeppelin安全库中的isContract函数,判断启用的地址是否为合约地址。
2.进行权限管理,限制特定的合约地址和EOA启用。
3.在项目上线前,必须联系专业的第三方技术和财务审计团队进行审计。
公司介绍:SharkTeam的企业愿景是全方位维护Web3生态的安全性。团队成员分布在北京、南京、苏州和美国硅谷,由全球各地的安全专家和科学研究人员构成,熟悉区块链和智能合约的最底层基础理论,提供专业的智能合约审计、链上分析、应急响应等服务。已与区块链生态系统中的多个关键参与方建立了合作关系,如Polkadot、Moonbeam、Polygon、OKC、HuobiGlobal、imToken、ChainIDE等。
Twitter:https://twitter.com/sharkteamorg
Discord:https://discord.gg/bFmbFy74
Telegram:https://t.me/sharkteamorg
获取更多区块链安全咨询和分析,请访问以下链接:
D查下|链上风险审查https://m.chainaegis.com
转载:驼鸟区块链