如何通过恒定乘积黑掉SushiSwap?简析SushiSwap第二次被攻击始末
慢雾科技
刚刚
12
背景
2021年1月27日,据慢雾区情报,SushiSwap再次遭遇攻击,此次问题为DIGG-WBTC交易对的手续费被攻击者通过特殊的手段薅走。慢雾安全团队在收到情报后立马介入相关事件的分析工作,以下为攻击相关细节。
SushiMaker是什么
SushiMaker是SushiSwap协议中的一个重要的组件,其用于收集SushiSwap每个交易对的手续费,并通过设置每个代币的路由,将不同交易对的手续费最终转换成sushi代币,回馈给sushi代币的持有者。这个过程就是发生在SushiMaker合约上。
说说恒定乘积
恒定乘积的公式很简单,在不计算手续费的情况下,恒定乘积的公式为
BiKi将于1月20日19:00上线BADGER并开启流动性挖矿:据BiKi公告,平台将于1月20日19:00(GMT+8)上线BADGER并开放BADGER/USDT交易对和提现,现已开放充值。为庆祝BADGER上线,将开启BADGER流动性挖矿活动,用户通过APP或者PC开启BADGER/USDT网格交易,满足条件即可获得网格+流动性挖矿双收益,一键双挖。
Badger DAO旨在成为一个汇集所有优秀开发者社区,加速打造BTC在DeFi应用中的各类产品。[2021/1/20 16:36:16]
也就是说每次兑换,其实都是遵循这个公式,及交易前后K值不变,在兑换的过程中,由于要保持K值不变,公式的形式会是这个样子
BULL将于11月20日18:00首发上线BiKi:据BiKi公告,BULL将于11月20日18:00(GMT+8)上线BiKi,开放BULL/USDT交易对和提现,并于11月18日 15:00(GMT+8)开放充值。
BULL由区块链去中心化金融与电商融合,采取与互联网共生方式深透到世界每一个角落。BULL的设计初衷是与现存的主流互联网应用(如Facebook、youtube、微信) 相互呼应、循环、平衡,以此构成了BULL初期强大的内部结构,其内在的金融平衡,社区推广,商业对接,价值沉淀和网络扩张都将进一步完善中心化商业模式的不足之处,最终BULL将成为一个供全世界使用的共存共生互联网络。[2020/11/18 21:10:19]
匿名币项目Grin拟于11月24日发布Grinv5.0.0测试版:11月17日,匿名币项目古灵币(Grin)撰文称,Grinv5.0.0版本的升级范围目前处于冻结状态,计划于11月24日发布测试版。另外,Grin钱包Grin++开发者davidtavarez目前在安卓上拥有一个完整的、允许稳定运行的节点。注:Grinv5.0.0将是Grin最后一个既定的硬分叉,预计于2021年1月进行。[2020/11/17 21:02:26]
其中X代表卖掉的代币,Y代表要购买的代币,那么每次能兑换到的代币数量会是这个样子(具体的推导过程就不演示了:D)
从公式上可以看到,当输出代币Y的兑换数量上限取决于Y代币的数量,而和X代币数量的大小无关,反过来说,如果要卖掉的X代币数量很大,但是Y代币的数量很小,那么就会造成大量的X代币只能兑换出少量的Y代币,而这个兑换价格相比正常的交易价格会偏离很多,这就是所谓的滑点,是本次攻击中的关键。
公告 | 火币全球站将于1月20日16:00调整BSV提币地址:据火币公告,BSV即将进行“Genesis”硬分叉升级,并在区块高度达到 620538 时激活稳定版本(预计于2020年2月4日)。火币全球站支持本次硬分叉升级,处理方案如下:1.火币全球站将于1月20日16:00起,不再支持BSV提币到P2SH多签地址(以“3”起始的地址)。2.将暂停BSV充提业务及新增借出服务业务,将在升级之前暂停BSV的充币、提币及杠杆交易对的新增借出服务业务。3. 资产和交易不受影响升级前后及升级期间,用户在火币全球站的BSV资产和交易正常,不受影响。[2020/1/18]
攻击流程
2020年11月30日,SushiSwap就曾因为SushiMaker的问题出现过一次攻击(详解参阅:以小博大,简析SushiSwap攻击事件始末),本次攻击和第一次攻击相似,但流程上有区别。相较于旧合约,在新的合约中,手续费在兑换的过程中会通过bridgeFor函数为不同交易对中的代币寻找特定的兑换路由,然后进行兑换。
中国纪检监察报:中国区块链发展的最大挑战是“如何让监管理解区块链并适度监管”: 中国纪检监察报发文表示,区块链底层技术获得实质性突破之前的这个阶段,恰恰是一个战略机遇期。如果中国区块链行业能紧密合作,监管能够适当包容、鼓励,中国在区块链领域引领全球指日可待。实际上,区块链技术最终必然演化为“监管融入技术”的模式,区块链的难以篡改、共享账本和分布式的特性,更易于监管介入,获得更加全面实时的监管数据。让监管机构本身也参与到技术中去,通过技术本身实现对技术的监管,最终化解区块链与监管的冲突。[2018/3/6]
其中,brdigeFor函数的逻辑如下:
根据bridgeFor的逻辑,我们不难发现,如果没有手动设置过特定币种的bridge,那么默认的bridge是WETH,也就是说,在未设置bridge的情况下,默认是将手续费兑换成WETH。而DIGG这个币,就是正好没有通过setBridge设置对应的bridge的。
但是这里还有一个问题,就是在swap的过程中,如果这个交易对不存在,兑换的过程是失败的。本次攻击中,DIGG-WETH这个交易对一开始并不存在,所以攻击者预先创建一个DIGG-WETH的交易对,然后添加少量的流动性。这个时候如果发生手续费兑换,根据前面说的恒定乘积的特性,由于DIGG-WETH的流动性很少,也就是DIGG-WETH中的WETH上限很小,而SushiMaker中的要转换的手续费数量相对较大,这样的兑换会导致巨大的滑点。兑换的过程会拉高DIGG-WETH交易对中WETH兑DIGG的价格,并且,DIGG-WETH的所有DIGG手续费收益都到了DIGG-WETH交易中。通过观察DIGG-WETH交易对的流动性情况,流动性最大的时候也才只有不到2800美元的流动性,这个结果也能和公式的推导相互验证。
攻击者在SushiMaker完成手续费转换后,由于?DIGG-WETH交易对中WETH兑DIGG的价格已经被拉高,导致少量的WETH即可兑换大量的DIGG,而这个DIGG的数量,正是DIGG-WBTC交易对的大部分手续费收入。
总结
本次攻击和SushiSwap第一次攻击类似,都是通过操控交易对的兑换价格来产生获利。但是过程是不一样的。第一次攻击是因为攻击者使用LP代币本身和其他代币创建了一个新的交易对,并通过操纵初始流动性操控了这个新的交易对的价格来进行获利,而这次的攻击则利用了DIGG本身没有对WETH交易对,而攻击者创建了这个交易对并操控了初始的交易价格,导致手续费兑换过程中产生了巨大的滑点,攻击者只需使用少量的DIGG和WETH提供初始流动性即可获取巨额利润。
相关参考链接如下:
SushiMaker归集手续费交易:
https://etherscan.io/tx/0x90fb0c9976361f537330a5617a404045ffb3fef5972cf67b531386014eeae7a9
攻击者套利交易:
https://etherscan.io/tx/0x0af5a6d2d8b49f68dcfd4599a0e767450e76e08a5aeba9b3d534a604d308e60b
DIGG-WETH流动性详情:
https://www.sushiswap.fi/pair/0xf41e354eb138b328d56957b36b7f814826708724
Sushi第一次被攻击详解:
https://mp.weixin.qq.com/s/-Vp9bPSqxE0yw2hk_yogFw
By:?yudan@慢雾安全团队
DeFi
SushiSwap
本文来源:
慢雾科技
文章作者:慢雾安全团队
我要纠错
声明:本文由入驻金色财经的作者撰写,观点仅代表作者本人,绝不代表金色财经赞同其观点或证实其描述。
提示:投资有风险,入市须谨慎。本资讯不作为投资理财建议。
金色财经>区块链>如何通过恒定乘积黑掉SushiSwap?简析SushiSwap第二次被攻击始末
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。