0x01:前言
援引官方消息,北京时间12月19日,Fantom链上复合收益平台GrimFinance遭遇了闪电贷攻击。知道创宇区块链安全实验室第一时间对本次事件深入跟踪并进行分析。0x02:事件详情
交易细节如下图所示:
浏览上图的交易过程可知,攻击合约利用闪电贷借取代币,将借取的代币质押到SpiritSwap里增加流动性获取lp代币,而问题就出现在depositFor()函数中。通过Tenderly(https://dashboard.tenderly.co/tx/fantom/0x19315e5b150d0a83e797203bb9c957ec1fa8a6f404f4f761d970cb29a74a5dd6/debugger调试该笔交易,攻击者多次递归调用depositFor函数,利用该函数获取大量代币:
LayerZero:CEO Bryan Pellegrino推特账户被盗,请勿参与可疑活动:7月5日消息,跨链互操作性协议LayerZero官方表示,CEO Bryan Pellegrino的推特账户被盗,请勿点击任何可疑链接或参与可疑活动。如果有人可以与推特取得联系,请联络我们。[2023/7/5 22:18:22]
0x03:漏洞分析
depositFor()函数位于https://ftmscan.com/address/0x660184ce8af80e0b1e5a1172a16168b15f4136bf#code的第1115行:
动态 | Virgil Griffith对有关其违反了《国际紧急经济权力法》的指控不认罪:金色财经报道,以太坊开发者Virgil Griffith对有关其密谋违反《国际紧急经济权力法》的指控不认罪。此前1月9日消息,Virgil Griffith被正式起诉,罪名为密谋违反《国际紧急经济权力法》。他被指控非法前往朝鲜,并出席了区块链会议,即使美国国务院已拒绝批准他前往朝鲜。[2020/1/31]
该函数的safeTransferFrom()方法从IERC20(token)调用,最后一次调用,也就是逆序第一次执行后,余额balance也会随之变动。当前铸造凭证数量/前一笔铸造凭证数量固定为3.54:
声音 | Zcash首席执行官:Grin、Beam不是竞争对手:据The Block报道,Zcash首席执行官Zooko Wilcox近日表示,尽管很高兴出现Grin和Beam这样的隐私币,但他并不认为其与Zcash是“平等的”,即不是竞争对手。Wilcox称,Grin和Beam是脆弱的,其基础技术是有限的。[2019/1/31]
我们推导其公式为:
声音 | 范宏达:2019年年底GRIN价值单个在4.4-12.5美元:区块链投研机构TokenGazer CEO范宏达在Grin社区杭州见面会上做了主题《Grin一年后市值预测》的分享,根据GRIN项目目前的技术发展、社区活跃程度、以及交易所上币积极性来看,TokenGazer的估值模型显示到2019年年底,GRIN的市值排名有97.5%的概率排名前40,在维持当前总市值120B美金的前提下,每个GRIN的价值预计在4.4-12.5美元之间。[2019/1/26]
将该公式分子拆分,得到shares/totalSupply的固定比为2.54:
动态 | 矿机制造商Obelisk推出针对Grin的采矿系统:据ASIC矿机制造商Obelisk官方消息,Obelisk现已推出采矿系统GRN1(The Obelisk GRN1),专门针对Grin的Cickatoo31 Proof-of-Work(PoW)算法。[2019/1/18]
最后将Debug交易里的shares/totalSupply进行计算,其值与shares/totalSupply的固定比相同,因此可以确定套利值只与totalSupply()有关:
其中函数safeTransferFrom()传入的变量token可控,导致攻击者可以自己实现safeTransferFrom()方法,将该方法重入到depositFor(),拉升totalSupply()总量,最后通过_mint()方法向用户添加质押凭证实现套利。以实施了5次重入攻击为例,开始pool的值为0,在重入depositFor方法的前四次里,攻击者一直传入自己铸造的代币,pool的值会一直保持为0,但在第五次,也就是最后一次传入100个受认可的代币时,after的值会变成100,而afer-pool的差值amount也就是100,最后由于重入了5次,导致合约会向攻击者铸造100*5的质押凭证代币。
其后果就是攻击者只质押一次代币,仍能多次增加质押总量实现套利。0x04:修复方案
1.由于depositFor()方法里的token可控才是导致这次攻击事件的原因,因此只需要在传递参数的时候让token不可控就行:
2.由于套利的原因是depositFor()方法里存在修改代币数量的函数,因此还可以将修改代币的方法单独实现,这样即使token变量可控,也无法成功套利:
3.锁定交易token:
0x05:总结
经过完整分析,知道创宇区块链安全实验室明确了该次攻击事件的源头并非网传的闪电贷攻击,攻击者利用GrimBoostVault合约的depositFor方法参数可控,实施了重入攻击,将自己的铸造的无价值代币兑换成了质押凭证,最后通过withdrawAll方法实现套利,而闪电贷?攻击者只是利用闪电贷扩大了套利值。对于合约代码而言安全性是十分重要的,每一个未经验证的传入参数都可能导致巨大的经济损失,开发者在编写重要操作方法时,须记住零信任原则,谨慎对待每一个传入参数。
区块链发展其实和城市规划设计一样,虽然你可以建造越来越高的摩天大楼来不断扩大城市规模,但最终,土地会被用尽,就像区块链中的区块大小会被用尽一样.
1900/1/1 0:00:00来源|Decrypt,Forbes,Cryptopotato萨尔瓦多对比特币的接纳一直是2021年加密行业最大的故事之一.
1900/1/1 0:00:00Odaily星球日报译者|Moni 自2019年以来,世界各地的监管机构最关注的加密行业细分领域就是稳定币,以及由稳定币衍生出的相关风险。近期,这种担忧愈演愈烈,尤其是在美国.
1900/1/1 0:00:00撰文:Footprint分析师Vincy数据来源:FootprintLayer2Dashboard据FootprintAnalytics最新数据显示.
1900/1/1 0:00:002022年即将到来。岁末年初,我们总是会看到许多市场预测,对于2021年来说,我们看到2020年疫情阴霾正在逐渐散去,经济复苏速度越来越快.
1900/1/1 0:00:00新年快乐!为庆祝2022年的开始,我们即将启动Strips的公开测试!很高兴向大家展示Strips令人惊叹的新UI,并介绍一些已在页面上部署的功能和更新.
1900/1/1 0:00:00