Lendf.Me遭黑客攻击损失2500万美元背后 谁来背锅?
摘要: ERC777当真是DeFi暴雷的原罪吗?
近日,外媒展开了关于黑客攻击国产DeFi项目 Lendf.Me事件铺天盖地的报道。4 月 19 日上午,国产 DeFi 借贷协议 Lendf.Me 被曝遭受黑客攻击,据悉,黑客利用 imBTC 的 ERC 777 合约漏洞来实现重入攻击,Lendf.Me 损失了大约 2500 万美元。
链上信息显示,借贷平台Lendf.Me的攻击者在昨天凌晨3点左右,向借贷平台Lendf.Me的admin账户转回了38万枚HUSD和320枚HBTC。更早之前,慢雾团队曾监测到,攻击者向Lendf.Me平台admin账户转回12.6万枚PAX,并附言“Better future”。
针对攻击者攻击Lendf.Me一事,经慢雾安全团队分析发现,攻击者此次攻击Lendf.Me的手法与18日攻击Uniswap方式类似。由于DeFi合约缺少重入攻击保护,攻击者利用“supply()”函数重入合约,以此进行重入攻击。
具体攻击手段中,攻击者对Lendf.Me进行了两次「supply()」函数的调用,但是这两次调用都是独立的,并不是在前一笔「supply()」函数中再次调用「supply()」函数。紧接着,在第二次「supply()」函数的调用过程中,攻击者在他自己的合约中对Lendf.Me的「withdraw()」函数发起调用,最终提现。
黑客利用漏洞,在 Lendf 上重复铸造出了 6700 多枚假的 imBTC,并以此为抵押,将 Lendf.Me 上的资产洗劫一空,并立即不断通过 1inch.exchange、ParaSwap、Tokenlon 等 DEX 平台将盗取的币兑换成 ETH 及其他代币,还将其余部分赃款转入了借贷平台 Compound 和 Aave。
这两次黑客攻击事件发生后,引发了用户对于Lendf.Me和Uniswap的攻击以及对ERC777代币标准的不信任,攻击者能够对支持ERC777令牌但没有重入保护的协议发起重入攻击。但目前来说,尽管协议存在漏洞,但在DeFi上下文中ERC777可能比ERC20更具优势。
ERC777为什么是无辜的?
Conflux中文社区分析到,imBTC使用了ERC777,ERC777这次碰到的两个被攻击的合约,就像头孢和啤酒,两者分开都没任何问题,但碰到一起就出了问题。本次事件将矛头指向ERC777,这实际上无法解决DeFi目前面临的风控问题。DeFi当中绝大多数有个场景的发生,就是存钱,用户总会将Token存入DeFi合约当中。
这个存钱的动作在ERC20当中是很难做到的,ERC20只能做到知道一群人总共向合约转了多少钱,但是并不知道每个人分别转了多少钱。为了解决这一问题,针对ERC20做了一个升级的动作,授权银行可以从用户账户取钱,这个时候银行就知道取走了多少钱。
这其中的风险在于,用户授权给银行很大一笔钱,如果银行作恶的话可以将用户账户内很多钱都转走。ERC777由此应运而生,用户不再需要向银行授权一大笔钱,而是在每次向银行转钱的时候可以额外的通知银行,我这次转来了多少。这里便很好的绕开了授权的过程,直接让银行做好了记账。从这个角度来说,ERC777绝对比ERC20更加进步,通过额外的通知让用户转账的操作变得更加多样化。
重入攻击到底是什么?
本次两个项目被攻击都是由于重入攻击引起的,所以也有很多人怀疑是同一批黑客团队做的。重入攻击如何理解呢,比如两面镜子互相对照,在一个镜子当中可以看到另外一个镜子映射的倒影,而且会连续产生多重倒影。在这样的一个状态下,看其中一面镜子中的影像,就会包含它自己本身,这样的状态就叫做重入。在程序思维中,这样的现象也叫做递归,并且会经常被用到。
正常来说,程序员是知道什么样的场景该应用递归的,但是本次被攻击时间也是由于重入攻击引起的。比如说买烧饼,一个人用十块钱买了一个烧饼,给钱和给烧饼这两件事在程序员眼中是具有原子性的,要不一起发生要不不发生。而且这个交易必须按照严格的顺序,首先必须给钱然后才给烧饼。
当重入攻击插入到这段交易后,会变成先给十块钱,没拿到烧饼时再给十块钱,然后卖家连续给两个烧饼。其实这样的逻辑在绝大多数交易场景中是没问题的,因为毕竟是花了20块钱买了两个烧饼。但是不幸的是,当这个顺序改变后Lendf.Me的交易逻辑也发生了变化。
Uniswap主要功能就是交换,它使用自动做市商的算法,根据两个池子的多寡算兑换的汇率。常规交易场景中,一次交易一次买卖,一进一出的平衡汇率是相对稳定的。重入攻击后的场景,会导致其中一边的池子忽然变高了,另外一个池子没有变化,这个时候汇率就发生了比较大的波动,Uniswap的攻击者借助这个波动薅了羊毛。
Lendf.Me的交易场景中,用户将钱存进去之后,合约会计算存完这笔钱用户的最终余额会是多少,当它将这个最终值计算完毕后才进入到转账的操作。这其中如果插入重入攻击就会导致很严重的问题,套入买烧饼的例子,10块钱买个烧饼然后记账,这个顺序是没问题的。
但是在Lendf.Me的场景中,第一次的记账会覆盖第二次级联的记账,比如重入攻击后,先付了10块钱,再付了10块钱,拿了两个烧饼,可是Lendf.Me覆盖级联记账后只记录了一次10块钱拿了一个烧饼,所以这其中就会亏钱。这次交易顺序记账出错导致的结果,就是Lendf.Me的池子被黑客掏空了。
DeFi确实是未来的方向 但是解决自身风控才是当务之急
HelloEOS创始人梓岑发文称,DeFi是一个未经历长时间的安全攻防对抗检验的新生态,逃不开各种未知,包括黑天鹅。Uniswap和Lendf.me相继受到攻击,带来了对DeFi更尖锐的拷问,如果不能保证开源系统的资金安全,你甚至没有能力证明自己不是一剂毒药。DeFi在证明自己真的是一场变革之前,至少需要摆脱暴雷阴影。
区块链开发者岛娘表示,本次Lendf.Me 被骇总价值 2400w刀,数位资产追回在加密货币的历史上应当绝无仅有。还钱显然不是良心发现(虽然之前敲 better future 的时候还了一些无法兑出的资产),而是诉诸新加坡警方与平台与黑客谈判博弈的结果。
岛娘会更信任Lendf.Me是有这种危机处理能力的团队,但这和安全漏洞本身无关,历史上很多 DeFi 项目被黑都是同一个漏洞连续发生的(比如最近你的 bZx,有的项目方就是头铁)。最后这个黑客本身应该在国内,应该是刚学习了这个漏洞,但凡换一个稍微有点经验的,应该也就追讨不回来了。历数 DeFi 历史上的几个 Hack 事件,几乎都是非常简单的漏洞,黑客的手段也非常简单,由此也可以看出这个行业还非常不成熟。
Conflux中文社区认为,DeFi一直都贯彻不需要可信第三方的去中心化方式运行,其实还是要分为链上管理和链下管理的,链下的那部分核心就是做好风控。用中心化的手段先制作完善的DeFi风控方案出来,在风控管理好了之后再释放给去中心化的网络是一条更合适的路径。
在dForce社区发出的声明中,可以看到关于解决该事件的三个方案:
-
与顶尖安全团队合作,对 Lendf.Me 进行更为全面的安全评估;
-
与合作伙伴积极探讨可行的解决方案。虽然我们遭遇了攻击,但我们不会就此被打倒。
-
与主流交易所、OTC 交易商、公安机构积极配合展开相关调查,竭尽全力追索被盗款项,追踪黑客动态。
作者:链茶馆;来自链得得内容开放平台“得得号”,本文仅代表作者观点,不代表链得得官方立场凡“得得号”文章,原创性和内容的真实性由投稿人保证,如果稿件因抄袭、作假等行为导致的法律后果,由投稿人本人负责得得号平台发布文章,如有侵权、违规及其他不当言论内容,请广大读者监督,一经证实,平台会立即下线。如遇文章内容问题,请发送至邮箱:linggeqi@chaindd.com
评论(0)
Oh! no
您是否确认要删除该条评论吗?