据慢雾区消息,币安智能链(BSC)DeFi项目ImpossibleFinance遭遇闪电贷攻击。慢雾安全团队第一时间介入分析,并将结果分享如下:
攻击细节分析
ImpossibleFinance的DEX架构参考了Uniswapv2,但在Pair的实现上有所不同。ImpossiblePair分别实现了cheapSwap与swap两个接口。cheapSwap函数限制了只由Router合约可进行调用,swap函数则是任意用户都可调用进行代币兑换操作。本次攻击事件的根本原因正是出在这种特殊的代币兑换架构上,接下来我们对此次攻击进行具体分析:
首先攻击者利用闪电贷从PancakeSwap中借出大量WBNB,并最终将其兑换成IF(ImpossibleFinance代币)?。
ETHPoW团队:由矿工主导的以太坊分叉是“不可避免的”:金色财经报道,ETHPoW背后的团队今天发表了一封公开信,声称其以太坊的工作量证明分叉是“不可避免的”。ETHPoW是以太坊的计划分叉。它由一位名叫Chandler Guo的矿工领导,旨在脱离以太坊主网络。Guo声称,在以太坊在所谓的合并期间过渡到股权证明共识后,分叉将允许矿工继续他们的采矿作业。但这会产生两个区块链,每个区块链都有自己的协议版本和在链上运行的代币。
ETHPoW 向以太坊经典背后的开发团队ETC Cooperative发布了一封公开信。这是对ETC Cooperative之前写给Chandler Guo的信的回应,信中讨论了 ETHPoW 分叉不会成功的原因以及矿工应该简单地迁移到以太经典
在声明中,它认为以太坊经典不会容纳所有现有的以太坊矿工。因此它声称需要的不是一个而是多个 PoW 分叉。ETC 的小池子根本无法容纳 ETH 的整个算力池。这是一个艰难的事实。面对如此确凿的事实,这次硬分叉是不可避免的。[2022/8/12 12:21:53]
加密倡导者:美国新法案赋予财政部长“不受约束的单边权力”来禁止加密交易:金色财经报道,位于华盛顿的智库Coin Center的执行董事Jerry Brito在推文中警告了“?2022 年美国竞争法案”。该法案于周二在众议院提出。Brito警告称,注意到 2022 年美国竞争法案“很可能以某种形式通过”,它包含康涅狄格州国会议员 Jim Himes 提出的“特殊措施”条款,所谓的“特殊措施”条款,实质上将赋予财政部长不受限制的单方面权力来禁止加密货币交易。财政部长珍妮特耶伦将能够禁止任何加密交易,“无需任何程序、规则制定或对禁令持续时间的限制。Brito补充道,如果通过成为法律,这项规定将不仅对加密货币而且对与*所有*类型的金融交易相关的隐私和民主公共流程都是灾难。[2022/1/28 9:19:05]
随后攻击者创建了一个由自己控制的代币AAA(BBB),并与上一步骤中获得的IF代币添加流动性。
广州市中级人民法院:利用区块链技术打造“全天候”“不下线”“非接触式”智慧云庭审体系:8月13日消息,近日工信部等10部门印发《5G应用“扬帆”行动计划(2021-2023年)》,加快推动经济社会数字化、网络化、智能化转型升级。在广东省广州市中级人民法院,当事人不管身在何处,都可通过手机、电脑参与庭审。这种跨越时空的开庭方式,正是得益于区块链等新技术协同打造的“全天候”“不下线”“非接触式”智慧云庭审体系。(人民日报海外版)[2021/8/13 1:52:25]
前CFTC主席:发展CBDC“不是竞赛”:前CFTC主席、数字美元项目联合总监Christopher Giancarlo最近接受采访时表示,在开发和部署CBDC方面,这不是一场“竞赛”,也没有赢家和输家。他称,“我反对将其定性为一场比赛,如果被认为是一场比赛,这对美国来说将是一个错误,它会因为跑得太快而输掉一切。这个游戏的赢家并不是谁最先完成游戏,输家也不是谁最后完成游戏。在时间维度上考虑这个问题是错误的。”(AMBCrypto)[2020/6/1]
之后攻击者通过Router传入自定的兑换路径(AAA->IF->BUSD)将AAA代币兑换成BUSD代币,而问题正是出现在此兑换过程中。通过链上记录我们可以很容易的发现攻击者在将AAA代币兑换成IF代币的过程中进行了两次兑换操作:
声音 | ICE首席执行官:Bakkt比特币期货将在“不久的将来”推出:比特币期货平台Bakkt的母公司负责人周四表示,Bakkt正准备很快推出比特币期货平台,不过他没有给出具体的时间表。洲际交易所(ICE)首席执行官Jeffrey Sprecher在季度财报电话会议上表示,Bakkt正在“努力开发一个受监管的生态系统,为满足全球(参与者)不断变化的需求提供服务。”“在获得监管机构最终批准后,我们计划在不久的将来推出实物结算的比特币期货。”Sprecher没有提供具体的时间表。注,洲际交易所于8月首次宣布推出Bakkt,计划提供实物结算的比特币期货合约,并与微软(Microsoft)、星巴克(Starbucks)和BCG Consulting开展额外合作。虽然该公司最初计划在2018年12月推出该平台,但Bakkt多次被推迟,目前还没有确定的推出日期。(coindesk)[2019/8/1]
为什么在一次兑换过程中会进行两次兑换操作呢?
通过分析具体的内部调用流程我们可以发现,攻击者在Router合约调用AAA合约的transferFrom函数将AAA代币转入Pair合约的过程中,同时调用了一次Pair合约的swap函数(即在transferFrom函数实现了正常转账与swap调用的逻辑)。然后再通过项目设计预期的cheapSwap再进行一次正常的代币兑换操作。
通过以上分析我们可以知道攻击者在一次代币兑换过程中分别通过调用swap函数与cheapSwap函数进行两次代币兑换操作,最终收到了额外的BUSD代币。那么既然是进行兑换操作,理论上每次兑换操作都将导致K值的变化,最终使得用户无法获得预期的代币。
但通过分析ImpossiblePair的swap函数与cheapSwap函数的具体逻辑,我们发现一个惊人的情况:在swap函数中进行了K值检查,而在cheapSwap函数却未进行K值检查而直接进行了update操作。这就导致了攻击者进行了多次兑换操作获得了额外的BUSD。
攻击流程
1、攻击者先通过PancakeSwap闪电贷借出WBNB,并将WBNB兑换成IF代币。
2、创建恶意的代币合约AAA(BBB),并在Impossible中添加了AAA代币与IF代币流动性。
3、通过AAA->IF->BUSD路径进行AAA代币到BUSD代币的兑换,并在AAA代币转入Pair合约兑换成IF代币的过程中进行了一次IF代币与BUSD的兑换操作,随后再进行正常的cheapSwap操作。最终获得了额外的BUSD代币。
4、之后重复以上操作进行获利。
总结
本次攻击的核心在于cheapSwap函数中未进行K值检查,导致攻击者可以通过在一次兑换过程中进行多次兑换操作以获得额外的代币。慢雾安全团队建议DeFi协议在参考其他项目的基础上进行创新的过程中应该充分的对其新的模型进行检查验证以避免此类安全事故的发生。
参考交易:
https://bscscan.com/tx/0x0220704a99ddfb982d26e65cc337f26b77dc057930b7aa1d848cc48ec77984a8
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。