据慢雾区消息,币安智能链(BSC)DeFi项目ImpossibleFinance遭遇闪电贷攻击。慢雾安全团队第一时间介入分析,并将结果分享如下:
攻击细节分析
ImpossibleFinance的DEX架构参考了Uniswapv2,但在Pair的实现上有所不同。ImpossiblePair分别实现了cheapSwap与swap两个接口。cheapSwap函数限制了只由Router合约可进行调用,swap函数则是任意用户都可调用进行代币兑换操作。本次攻击事件的根本原因正是出在这种特殊的代币兑换架构上,接下来我们对此次攻击进行具体分析:
首先攻击者利用闪电贷从PancakeSwap中借出大量WBNB,并最终将其兑换成IF(ImpossibleFinance代币)?。
FTX新任CEO:SBF有3大“不可接受的做法”:金色财经报道,在众议院金融服务委员会听证会的准备发言中,加密货币交易所 FTX 新任首席执行官 John J. Ray III 表示,该公司的倒闭是由“一小群非常缺乏经验和不成熟的人造成的”,主要有3个“不可接受的做法”包括:允许公司的高级人员访问客户资产、资产混合、将Alameda Research客户资金进行交易和投资。John J. Ray III 还表示,同样由SBF经营的美国实体FTX US并不独立于巴哈马的业务而运营,这与SBF说法相悖。SBF将在美国东部时间14日上午 10 点首次远程出席众议院金融服务委员会听证会。(decrypt)[2022/12/13 21:40:35]
广州市中级人民法院:利用区块链技术打造“全天候”“不下线”“非接触式”智慧云庭审体系:8月13日消息,近日工信部等10部门印发《5G应用“扬帆”行动计划(2021-2023年)》,加快推动经济社会数字化、网络化、智能化转型升级。在广东省广州市中级人民法院,当事人不管身在何处,都可通过手机、电脑参与庭审。这种跨越时空的开庭方式,正是得益于区块链等新技术协同打造的“全天候”“不下线”“非接触式”智慧云庭审体系。(人民日报海外版)[2021/8/13 1:52:25]
随后攻击者创建了一个由自己控制的代币AAA(BBB),并与上一步骤中获得的IF代币添加流动性。
声音 | 蚂蚁金服总裁胡晓明:要用区块链技术“不可造假”的特性,打造透明公益:据新浪财经消息,在9月5日举行的的阿里巴巴95公益论坛上。阿里巴巴推出了“链上公益”计划,蚂蚁金服总裁胡晓明表示,科技发展不仅降低了公众参与公益的门槛,也在逐步破解公益难题。每一笔公益捐赠背后,都是参与者对平台的信任。未来3年,要用区块链技术“不可造假”的特性,打造透明公益。[2019/9/5]
之后攻击者通过Router传入自定的兑换路径(AAA->IF->BUSD)将AAA代币兑换成BUSD代币,而问题正是出现在此兑换过程中。通过链上记录我们可以很容易的发现攻击者在将AAA代币兑换成IF代币的过程中进行了两次兑换操作:
ETC交易量激增 官方转发“不支持CLO”消息:行情显示,ETC的24小时成交量达5.88亿美元,占比3.58%,排名第五。此前Bitcoin.com报道,ETC在区块高度5500000硬分叉,产生新的分叉币CLO,ETC持有者将获得1:1的CLO,目前ETC高度为5498455。关于分叉币CLO的糖果分配,Bittrex表示无法在3月5日前完成审核,故不支持空投。除此之外,ETC官方账号在3月2日转发ETCDEV团队的官方消息写到:“回答所有关于CLO的问题:我们不知道,不要问我们。ETCDEV并没有执行这个项目,我们不支持也不赞同它”。ETC现全球均价29.26美元,24小时跌幅3.52%。[2018/3/5]
为什么在一次兑换过程中会进行两次兑换操作呢?
通过分析具体的内部调用流程我们可以发现,攻击者在Router合约调用AAA合约的transferFrom函数将AAA代币转入Pair合约的过程中,同时调用了一次Pair合约的swap函数(即在transferFrom函数实现了正常转账与swap调用的逻辑)。然后再通过项目设计预期的cheapSwap再进行一次正常的代币兑换操作。
韩国律师事务所宣称:比特币“不是法定货币” 呼吁新的比特币交易规则:据报道,韩国一家律师事务所对即将到来的限制数字货币交易的规定提出了宪法上诉。总部位于首尔的Anguk律师事务所上周六通过宪法法院的在线上诉系统提出上诉,称政府在没有法律支持的情况下对数字货币交易作出新规定是对财产权的侵犯。韩国时报的一篇报道指出,该公司在其上诉中宣称像比特币这样的数字货币“不是法定货币”,而是一种可以通过合法货币或具有经济价值的商品进行交易的财产。[2018/1/4]
通过以上分析我们可以知道攻击者在一次代币兑换过程中分别通过调用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
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。