别再怪“闪电贷”了,bZx连遭攻击的真凶是它

2023-03-11 18:30发布

一周内,DeFi贷款协议bZx遭遇两次攻击,攻击者空手套白狼,十几秒套利超百万美金。这一事件被高度关注,因为它并非一起简单的、针对单一漏洞的“黑客式”攻击,而是在充分了解DeFi的情况下,利用各产品特点组合出拳。这起攻击事件或许暴露出DeFi系统性金融风险的隐患,并对行业发展的路径选择,具有醍醐灌顶的警示意义。笔者先说结论:


1. bZx被攻击是因自身产品设计漏洞,喂价完全依赖第三方,没有考虑接入方的机制,也没有经过极限压力测试; 2. 对于其他DeFi产品,也要谨慎考虑所接入的其他协议可能会对本身协议造成的影响和⻛险,防止协议调用导致的系统性风险; 3. 对于生态发展,开发炫技式产品和构建无限杠杆似乎成为一种风气,这是不健康的,DeFi的初心本应是开放式普惠金融。


回顾:攻击者借刀杀bZx,空手套得百万美金


首次攻击发生在2月15日,攻击者通过“闪电贷”0成本借得1万个ETH作为初始资金,利用多个DeFi协议的相互调用,实现了一笔非常不合理的交易。


第一步:通过“闪电贷”0抵押物从dYdX借出1万个ETH; 第二步:将其中5500 ETH在Compound中抵押借贷112 WBTC 的贷款抵押; 第三步:将1300ETH在bZx被发送到fulcrum,打开了一个ETH/BTC交易对的5倍杠杆空头头寸; 第四步:通过 Kyber Reserve 到 Uniswap WBTC pool 卖 5637 ETH(150 万美金), 获得 51.34BTC(51 万美金); 第五步:把 Compound 借出来的 112 BTC,在 Uniswap WBTC pool 卖 112 WBTC, 获得 6800 ETH; 第6步:将 3200 ETH 6800 ETH(卖 112 BTC 获利)= 10000 ETH 还给 dydx。


笔者也做了一个表格还原资产变化和最终结果:


最终表格


据悉,攻击者获得总利润为 1193 ETH,目前价值 29.8万美元。链上数据显示,攻击者已将所获资金转移到了Compound。理论上,Compound 可以使用管理员密钥没收资金,但根据Chris Blec 发起的投票,支持没收资金的仅占 12.3%,反对者占 69.5%。Hydro创始人李天放表示「使用管理者权限非常损害信任,Compound没有因为攻击遭受损失,不太可能牺牲自己的信任帮竞争对手找钱。」「Compound也可以发起社区投票,征询这种用户(攻击者)是否受欢迎,如果Compound社区一致抵制,就可以冻结资金。」数字文艺复兴基金会董事总经理曹寅表示。


今日(2月18日),bZx再次发现了使用“闪电贷”进行的可疑交易,目前没有证据表明是同一个攻击者。尽管首次攻击发生之后,bZx 关闭了 Fulcrum 交易平台进行维护,但该攻击者再出新招,使用了Synthetix进行交易,目前bZx 已暂时关闭被利用的合约。Ethhub 创始人 Eric Conner估算到,这一次攻击者获利 2,388 个 ETH,约64.4万美金。


有趣的是,尽管bZx官方表示这次的损失跟“预言机”没有任何关系。但在首次攻击发生后,bZx宣布将新增集成预言机平台 ChainLink 作为价格来源之一。「目前看来,ChainLink能够在真实反映价格和预言机去中心化之间找到比较好的平衡,避免Uniswap等去中心化交易所喂价机制流动性不足导致的价格失真问题」曹寅表示。


澄清:bZx首次攻击为产品漏洞,第2次是价格操控


对于bZx的首次攻击,早期网友将其解读为价格被操纵。但真实情况是「利用了bZx的合约漏洞,借了大笔钱,然后在bZx接入的Kyber和Uniswap上操纵价格,套利成功。」MakerDao中国社区负责人潘超表示。但今日针对bZx的第二次攻击,确为价格操控的方式。


我们来具体解释下,几个协议之间的关系。bZx是一个保证金交易协议,用户可以抵押一种币作为保证金,在某个杠杆下借出另一种币。但是这两个币的浮动汇率是多少呢?bZx需要调用预言机或者去中心化交易所来喂价。在第一起攻击中,bZx 使用 Kyber 作为链上预言机来检查抵押品和借贷的比例。


而Kyber作为去中心化代币交易协议,它有很多储备库来提供流动性。储备库为兑换者们提供代币兑换,它可以是有丰富代币的个人,也可以是专业的做市商、项目团队、DEX等。而且为了获得竞争力,Kyber设计成为兑换者提供最好的兑换汇率,Uniswap就是Kyber的储备库之一。


在第一轮攻击中,攻击者在bZx上发起了保证金交易,抵押1300个ETH用5被杠杆兑换51.3个WBTC的行为,拉高了Uniswap上WBTC兑ETH的相对价格,此时攻击者再将从Compound 借出来的112 WBTC在此价位兑换成ETH,于是就获得了利润。


不可否认,储备池式DEX的确交易深度不够、流动性不足。试想一下,攻击者仅用1300个ETH就拉高了WBTC的价格,这在主流的中心化交易所大概率不会发生。


究其根本原因,bZx被 “骗”在uniswap上做了一笔非常不合理的交易,只能怪自己太依赖第三方。「此类型的攻击方案只针对于bZx这种完全依赖第三方AMM(automatic marker maker)的DeFi产品,在dydx, DDEX,和compound等类型产品中并不存在」李天放表示。


因此,bZx被攻击的主要原因是「它自身存在设计上的失误,没有考虑到Kyber聚合型交易所的喂价机制,也没有经过极限的压力测试,于是被人利用了。」曹寅表示。从结果上来看,本次攻击也没有影响到其他协议,损失由bZx承担。


诘问:“闪电贷”和协议调用,谁才是魔鬼武器?


攻击事件让“闪电贷”进入了大众视线,这是攻击者无成本套利的关键。“闪电贷”是在一个区块内在不同 DeFi 借贷平台发起多笔交易的方式,也就是不同资产和债务之间的转贷。“闪电贷”也是一种无需抵押物的借贷方式,前提是贷款的发行和偿还必须在以太坊同一个区块内完成,按照目前以太坊的出块速度,就是 13 秒。如果不是空手借来的ETH,而是超额抵押借贷模式,还会出现这个情况吗?笔者采访的几位嘉宾有不同的看法。


曹寅表示,“闪电贷”本身没问题,但应该要限制“闪电贷”的使用场合,不能让大家随意调用这个协议,尤其是在DeFi这样一个无监管、去中心化、代码即法律的场景里,肯定要谨慎使用。他用了一个很形象的比喻:


现在的DeFi从功能的完善度上,就是一只猴子。而“闪电贷”则相当于一把枪,你给了猴子一把抢,那会有什么好结果呢?猴子现在需要学习用火,学会种地,学会服务实体经济,而不是纯金融工具类型的DeFi协议。


但李天放认为,“闪电贷”只是降低了攻击的门槛。就算没有“闪电贷”,一个本来就很有钱的以太坊账号也可以做出同样的攻击。当然“闪电贷”的存在让这类攻击变得更容易,合约设计者必须需要考虑到此现象的存在。


潘超也认为,闪电贷本身不是问题,而是协议之间的耦合问题。「本次攻击的漏洞对于独立的单个协议而言没有问题,但是几个协议联系起来就会被成功攻击,结果就是虽然账户里没有资产,但依然可以空手套白狼,或者说是借刀杀人,利用其他协议的漏洞借钱,损失让其他协议承担。」就像bZx团队“狡辩”的那样,「从协议的角度来看,只是有人简单地借了一笔钱,而从贷方的角度来看,这笔贷款与其他任何贷款一样,照常支付利息。」


「这也给了 DeFi 从业者一个警示,设计产品是要谨慎考虑所接入的其他协议可能会对本身协议造成的影响和⻛险」潘超表示。DeFi各产品的智能合约自由调用,增加了很多不确定性因素,那么应该予以限制吗?


针对这个问题,李天放表示,所谓的”admin key“(管理者权限)在各个合约之间中是非常不一样的,而且并不是个0或1的选择,在每类操作中你都可以选择留出full control, limited control, time delayed control等。


「每个合约的设计者需要在”去中心化“和“便于操作”中做出一系列选择。比如DDEX为了避免中心化,留的管理者权限非常少。当然这也有一些不便,比如我们不能随便升级合约的一些模块,加功能,移动资产,哪怕是“为了用户好”的操作。」他最后说到,时间会告诉我们正确的选择是什么。


反思: 无限杠杆意义何在,DeFi开发者勿忘初心


对于此次攻击事件,笔者的直观感受是DeFi很多产品的主要用途就是“加杠杆”,这让我想到2008年经济危机起因,就是华尔街把房地产打包成各种证券产品,制造了太多杠杆,同时让人们以很低的成本贷款。这和如今DeFi行业做的事情多么相似。


这究竟有什么意义?


「你说的很对,每个DeFi项目都应该考虑这些问题。一个好的协议设计应该鼓励更多有价值的”win win”行为。如果一类行为真的是空手套白狼,对整个系统是负价值的,也许协议上可以做一些调整来改善整个系统价值」李天放表示。


然而,DeFi社区不仅没有因为攻击事件变得审慎,反而在推波助澜。笔者注意到了两件事:


1.0x 的研发人员 Remco Bloemen 提出直接在代币的合约中创建免费无限的闪电贷款; 2.1inchExchange 新推出的1x.ag,利用“闪电贷”提高杠杆仓位的效率,来做无限杠杆。


「DeFi中造价值的角色有个共同点:它们都需要承担风险。比如做市商需要承担风险,liquidator(清算者)需要承担风险。但是“闪电贷”和“无风险套利”之都是在一个区块中做操作,空手套白狼」李天放表示。


「这暴露出这个行业的开发者存在误区,就是以“炫技式”的心态,去做一些DeFi协议的开发。」曹寅一刀见血的指出。


DeFi的初心究竟是什么?这值得建设者和拥护者反思,曹寅的这几段话非常有道理:


对于投机者来说,高杆杆、空手套白狼,肯定喜欢这样的工具。虽然套利行为对促进信息有效性,降低交易成本能够起到一定的作用。但无限杠杆可能带来连环性事故,酿成系统性风险。按照DeFi目前的发展方式,这种情况很有可能会发生。


我们做DeFi的初心是什么?是为了服务那些没有金融基础设施的的中小企业、创业者、普通生产者。我们降低中心化带来的摩擦成本,去掉完全没必要的中介成本,同时把数据所有权和金融所有权,从不靠谱的中心化机构手里抢回来,还给生产者,这才是我们做DeFi的初心。


DeFi的开发者,是想做一个服务全球人类,让金融成为一种普惠商品,让数据回到生产者和消费者手里的开放金融市场?还是要做一个没有监管,无限杠杆,非常投机性的赌场?大家到底想做什么事,这很重要。


本文源自巴比特