被推倒的多米诺骨牌 —— VTF 代币被黑分析
By: 九九
2022 年 10 月 27 日,据慢雾安全团队情报,Victor the Fortune (VTF) 代币和 V8 protocol (V8) 代币均存在严重漏洞遭到攻击,攻击者分别获利约 5.8 万美元和 5.3 万美元。慢雾安全团队第一时间介入分析,由于两种代币的被攻击手法相同,故本文仅以 VTF 代币的攻击事件切入解析并将结果分享如下:
相关信息
Victor the Fortune (VTF) 是 BSC 链上的一个 ERC 20 代币。以下是本次攻击涉及的主要地址:
VTF 代币地址
https://bscscan.com/address/0xc6548caF18e20F88cC437a52B6D388b0D54d830D
攻击者地址https://bscscan.com/address/0x57c112cf4f1e4e381158735b12aaf8384b60e1ce
主要攻击合约地址:
https://bscscan.com/address/0x450595e4a42cc08c14091b08dbab654a68b0a877
攻击交易:
https://bscscan.com/tx/0x74c63833219e751a38908860b9092b4acda3fb10fecefed3c480f7f85a346742
https://bscscan.com/tx/0xeeaf7e9662a7488ea724223c5156e209b630cdc21c961b85868fe45b64d9b086
攻击核心点
在 VTF 合约中其会为代币持有者进行奖励分红,分红数额是由两次分红的时间差值和账户当前持有的代币余额决定的。因此攻击者可以在请求分红时利用闪电贷来放大持有的代币余额以获得额外的分红代币奖励。
具体细节分析
1、在交易 0x74c63833 我们可以看到攻击者在发起攻击的前两天开始创建攻击需要使用的合约,总共 400 个,并逐个调用了 updateUserBalance 函数设置这些合约的 userBalanceTime 值为两天前的时间戳:
2、两天后,攻击者发起了正式的攻击 0xeeaf7e96,攻击者首先闪电贷借出大量的 USDT,接着通过 pancake 将 USDT 兑换成 VTF 代币并调用 VTF 代币合约的 updateUserBalance 函数获得分红奖励:
3、将 VTF 代币转给第一步生成的攻击合约 0x1dD557,之后用部分 VTF 代币换回 USDT 后为池子添加流动性:
4、接下来攻击者调用 VTF 代币合约的 updateUserBalance 为攻击合约 0x1dD557 分红奖励,由于正式攻击与之前第一笔准备攻击的交易相隔两天,所以 userBalanceTime 与当前时间戳具有两天的差值而不会为 0,从而通过了检查并且计算奖励的数值为账户中的 VTF 代币余额与时间差值相乘的结果,以此成功获得分红奖励:
5、随后,攻击者将所有的 VTF 代币转移给下一个攻击合约,并继续调用 updateUserBalance 函数分红奖励,循环该过程直到所有的攻击合约都获得奖励分红并不断累加 VTF 代币,最后一个合约将所有的 VTF 汇集转回给主攻击合约 0x450595e4:
6、最后将获得的 VTF 代币通过 pancake 的池子兑换回 USDT 后获利:
总结
本次攻击事件是由于整个代币的经济模型设计过于简单,代币持有的奖励分红仅取决于 userBalanceTime 的时间差值与持有的代币余额进行计算,导致攻击者利用创建多个合约以及闪电贷来积累获取更多的代币。慢雾安全团队建议在进行设计代币分红模式时应充分考虑代币流动性与安全性之间的平衡。
往期回顾
慢雾导航
慢雾科技官网
https://www.slowmist.com/
慢雾区官网
https://slowmist.io/
慢雾 GitHub
https://github.com/slowmist
Telegram
https://t.me/slowmistteam
https://twitter.com/@slowmist_team
Medium
https://medium.com/@slowmist
知识星球
https://t.zsxq.com/Q3zNvvF