复盘|IT 代币被黑分析
By: Sissice
背景
2024 年 3 月 14 日,据慢雾安全团队情报,BSC 链上的 IT 代币遭攻击,攻击者获利约 1.52 万美元。慢雾安全团队对该攻击事件展开分析并将结果分享如下:
(https://twitter.com/SlowMist_Team/status/1768104947541840111)
相关信息
攻击者地址:
0xB495573Cd2246e7cc7D6d2B37d779463295e5ab0
攻击合约地址:
0x9A2287E3122441F9657bB01b5f8c3cAbB3F4C6f2
攻击交易:
0xdd2c446bbc98acb6649f949108536438c1d2bdd728955b4166d0efcde81c55aa
0x0c8e64ed42c360b5bbc1ac9cf31c3d6fd66f0f2ab014ef3df00220b3846963af
0x5e7ecbef2cab00144f427fe167c854710df1373853c43f268827b88ad845f976
0x6a951db7d919a0ac4e3085c88d341475542ba83628585eb808f6b9e5b668bb52
0xb33057f57ce451aa8cbb65508d298fe3c627509cc64a394736dace2671b6dcfa
攻击核心
攻击者利用 IT 代币中的 transfer 函数会根据兑换代币的数目来额外增发代币给池子的特性,逐步提高池子中 IT 代币的储备,从而操纵价格,并不断兑换出池子中的 BSC-USD 获利。
交易分析
1. 攻击者首先借入一笔闪电贷 2000 BSC-USD 至攻击合约。
2. 接着攻击者用其中的 100 BSC-USD 在 pancake 的池子(0xcfbb39) 中连续进行三次 transfer-swap 操作。
攻击者在 0x7265_PancakePair 中 swap 时会将指定数额的 IT 和 BSC-USD 代币转移至攻击合约(0xcfbb39)。接着跟进 IT 代币 transfer 函数中的逻辑,当 IT 代币从 0x7265_PancakePair 中转出时,会调用 mintToPoolIfNeeded 函数向池子增发代币。
然而,铸造代币的数量是根据转移代币的数量和池子中代币的储备量来计算的,这就导致每次借款时,池子中 IT 代币的储备会提高,而 tokenUsdtRate 的值不断降低,那么 tokenMinReserveAfterBuy 的值就会不断升高,最后池子里铸造出了更多的 IT 代币,攻击者以此来操控每次兑换时代币的价格,使其可以用固定的 100 枚 BSC-USD 来套出池子中的 BSC-USD 代币。
3. 经过以上三次重复的操作,攻击者最终从池子中套出额外的 208 枚 BSC-USD,并用这些利润在 0xcaba_PancakePair 池子中兑换出大量自己创建的代币(0x7c82a1),拉高币价。
4. 攻击者以同样的手法又重复攻击了 4 次,在所有攻击都完成后砸盘,用手中的垃圾代币(0x7c82a1) 对倒出 BSC-USD 获利。
这种利用攻击交易中的获利拉高垃圾代币的价格,在攻击完成后砸盘再对倒回利润的手法,隐藏了攻击交易中的资金流向。并且由于垃圾代币是由攻击者创建的,其 transfer 函数并不会发出事件,在大部分的链上分析工具中查看的话,会有一种攻击者并没有获利的错觉。
总结
本次攻击的核心在于每次 IT 代币从池子转移出来时,会导致池子中铸造出更多的代币,使得池子中代币的价格可以被操控。慢雾安全团队建议项目方在设计代币模型时,应考虑池子储备的直接更改对代币价格的影响,避免代币转移大幅影响池子平衡性的情况。