黑客来袭,狂卷6亿美金,如何最大力度挽回损失?
8月10日晚,跨链PolyNetwork遭攻击,超6.1亿美元资产被盗,O3躺枪。这是DEFI有史以来资金被盗最大的一次事故!事件发生后,全行业为之震惊,业内安全公司、KOL都在密切的关注黑客链上地址的动向。截至今日上午,黑客已经归还了价值3.42亿美元的代币。
事故原委究竟如何?跨链协议安全性究竟如何?如何最大力度挽回损失?8月11日晚,Poly受损事件当事人“郭德纲”(化名),BlockSec联合创始人、浙江大学网络空间安全学院教授、博导周亚金做客巴比特《8问大事件》直播间,围绕这场史诗级安全事件展开分析。
以下是直播主要内容:
主持人贾小别:你损失了多少?
郭德纲:
我损失了大概有20万,一部分稳定币,还有一部分是ETH。
主持人:你是在哪一条链上挖矿的,什么时候参与的O3?
郭德纲:
在BSC和以太坊上挖的。
最早接触到o3是在bsc上的Pancakeswap上的糖浆池,然后去玩O3。O3的挖矿年化非常高,我参与的时候能达到30%~40%,外面正常的一些室挖矿年化大概是20%左右。
我参与投资的决策是:第一,O3是新项目,项目方还是在国内的。第二,年化高,当然风险可能也高。第三,O3是做跨链的,我个人比较看好跨链赛道。
我拿了5%的仓位去玩了一下,分散投资。还好没有把资金全放在一个篮子里,不然可能就竹篮打水一场空了。
主持人:你去参与O3挖矿的时候,有没有了解过这个项目的背景?
郭德纲:
背景没有特别多的了解,我只知道他是一个国内的项目方,技术上跟DOT不一样。后来看很多的币圈的老用户都参与进来了,而且看到池子上的资金量也很足,所以说就放心的。
主持人:你是什么时候发现自己受到损失的?
郭德纲:
最近的工作比较忙,然后发现的时候已经全网传播了,我是在8月10号晚上9点多的时候在一个O3群里看到O3出事了。知道的太晚了,没有什么办法了。
俗话说的好,常在河边走,哪有不湿鞋。以前都是看别人,这次被别人看。其实钱损失还好,主要就是情绪可能有点不是特别好,感觉有点丢人。
主持人: 我看已经有“受害者群”建立起来了,群里的有效信息多不多?有哪些是有效的?
郭德纲:
我加了一个“受害者群”,群里还是很多有效信息的,比如说昨天晚上黑客在链上与大家对话以及资金被盗的去向,还有黑客在Curve添加了流动性转移资金。这些信息都是在群里第一时间看到的。
昨天下午黑客扬言要还钱,也还了点儿。为什么一点点还?可能黑客有他自己的想法。这些消息都是从群里第一时间看到的,还是有一定的帮助的,毕竟能了解这件事情的整个过程。
主持人:下一步你有什么打算?
郭德纲:
群里的那些人可能损失比我还要大,因为我看他们已经很气愤了,已经要到了报警的程度。
从情感上来讲,自己的财产受到损失,第一时间还是说是要去报警的。但是稍微冷静一下,也会有一些犹豫,因为目前国家对于公链,尤其是公链上的金融领域是非常抵触的,特别是今年自从519之后会国内出来很多的政策来打压金融。
这次损失的资金量是区块链产生这些年最大的一次了。其实报案的话,现在国家正愁没有机会强势下手,如果说真正的报案了,其实相当于递了一把刀过去。
我们这些人用了十几年的时间看到区块链从一小圈人到现在,就像自己家的孩子一样,从小到大,然后走到现在,我当然不希望有人去伤害它。我很大一部分资产都是区块链给的,我很热爱它,但是它在昨天伤害了我。
主持人:这件事情带来的经验教训是什么?
郭德纲:
我在我这里谈经验教训可能有点过了,因为我在圈子只是沧海一粟,只能说是有一点小的反思。
这件事就是给了我一个警示,就是区块链数字货币在2017年的时候就有点出圈了,到了2020年之后,它的成长真的是太快了。
我见证了它的成长,也参与进去了,带给我的喜悦甚至有时候让我忘乎所以了。
其实我们要意识到区块链还是在起步阶段,还是在人的在幼年阶段。我想到了7月24号巴比特牵头举办的区块链大会的主题——无限未来。我觉得“无限未来”用在区块链上真的是太贴切了。
下一步,我准备整理一下自己的资产,尽量多关注一下DeFi生态上的安全性。最近关注到BSC上的DeFi还算不错,如果说黑客把钱还回来了,我可能会把这些资金投入到BSC上的Pancakeswap上。因为O3我是从Pancakeswap上接触到的,最终如果拿回资金还是回归到Pancakeswap,算是一个有始有终。
现在看来,区块链依然是未来的趋势,国内依然去在大力的发展联盟链,只不过公链在国内不被认可。这次被盗不是最后一次,但我依然还会参与到公链当中。
主持人: 跨链协议polynetwork被盗,这否是一次有预谋的攻击?黑客从开始攻击开始做了哪些操作?(攻击者关键的操作有哪些?目的是什么)
周亚金:
我们团队从昨天晚上8点多钟第一时间知道以后就一直在分析,从昨天晚上到今天不到24小时的时间,我们是对整个攻击的了解越来越深,已经快接近真相了。我用一个PPT把整个的攻击和原理给大家分享一下。
PolyNetwork是一个跨链的聚合器,为以太坊、BSC以及其他的一些链的数字资提供交换和传递的解决方案。
我这里引用的是PolyNetwork官方的给出的文档,假设这里有一个用户在以太坊上想把资产转移到其他链,用户首先会去调用以太坊上面的一个智能合约把资产锁在智能合约里面,然后PolyNetwork有个Realyer中继器,会把这个交易传播到目标链上.在整个传播的过程当中,它必须要对交易的合法性做很多的校验。
在目标链上同样有一个proxy的合约,调用一个叫unlockd函数。unlock会把用户锁在以太坊上的资产换算成目标链上相应资产的余额,通过PolyNetwork完成两条链之间资产的转移。
在跨链的过程中,涉及到交互还是比较复杂的,它涉及到合约用户和合约之间的交互,和链的交互,链和Poly之间的交互,Polly和relay之间的交互,relay和目标链之间的交互,所以它整个的交互的链条还是比较长。
从最基本的安全设计来说,为了保证在整个跨链时候的交易的安全性,实际上我们需要对跨链的消息进行签名校验。
在Polly的整个的设计当中,它实际上是成立了4个的校验者,攻击者如果想完成整个攻击过程,他基本上需要做两件事情。第一件事情就是要绕过这些校验,第二步就是在绕过交易过程之后,可以发送crafted消息。
绕过校验的时候,通常有几种不同的方法。
第一种方法,在设计的时候密码学的一些算法本身就存在漏洞,你去做签名校验的,算法本身有一些后门户的漏洞被攻击者知道了。
第二种可能性,算法实现可能有错误,即便加密的算法和签名校验的算法没有问题,但是因为你的算法实现存在的漏洞,攻击者可以去利用它。
第三种情况,你用来校验签名这些消息的私钥泄露了,攻击者是可以用你泄露的私钥去嵌入出来各种各样任意的交易消息。
第四种,我可以去修改签名交易者的公钥。这个是什么意思呢?因为我在做校验的时候,必须要使用预知好的一些公钥去对我的消息去做校验,如果我有某一种方法能去修改签名校验的公钥,就可以把公钥修改成攻击者自身所控制的公钥,这样就可以用自己所有的私钥来去签署消息。
我们昨天晚上在分析攻击的时候,能看到的只是说有一笔合法签名的交易在链上,并且它的整个签名校验的过程确实都过了。而且在签名校验的过程中,我们发现校验公钥只有一半,所以当时安全性有很多的猜测。
后来进一步的研究发现,其实攻击者是通过第4种方法去修改了签名交易的公钥。他是怎么去修改的?交易的公钥实际上是存在某一个合约的变量里面,而能去修改变量的合约是特定的,也就是说,不是谁都可以去修改变量。
再回到我们一开始讲的,如果一个资产从以太坊的链转到另外一个链,需要进行哪些步骤?我们略过前面两步,我们就讲最后一步。最后一步是比较关键的,也就是在目标链上如果要完成资产的转移,需要调用一个叫unknock函数来去完成资产的转移。
如果攻击者通过某一种方法,调用的不是Unlock函数,并且这个方法本身就有权限去修改校验的公钥,这样的话就可以通过恶意调用修改公钥的函数,从而替换签名交易的公钥。
我们发现,攻击者最初的攻击交易是从ONT发送了一个精心构造的恶意交易,唯一的目的就是去修改在以太坊上用来做签名校验的公钥,交易本身是合法的。为什么会有一条合法的交易到ont的链上?
目前大家都还不知道,我们怀疑可能是ont链上polyNetwork合约有问题,或者说ont本身做跨链的接口有问题,导致攻击者可以恶意构造这么一个交易,最后来完成对密钥的替换。
我们具体详细过程还在分析当中。昨天很多的媒体和安全公司都认为polyNetwork的keeper只有一个公钥,实际上确实是这样,是因为他原先有4个公钥,但是被攻击者修改成只有1个公钥。
攻击者修改了公钥之后,接下来的攻击益就变得比较简单,可以任意的去伪造的交易,整个链就变成攻击者的提款机。
主持人: polynetwork准哪个环节出了问题,让资金被盗?目前争议比较大的是有分析团队认为攻击者通过此函数传入精心构造的数据修改了EthCrossChainData合约的keeper为攻击者指定的地址,不是由于keeper私钥泄漏导致这一事件的发生。 BlockSec这边追踪到的信息更倾向于哪一个?
周亚金:
关键问题所在就是有一条精心构造的交易从ont链然后送到了polynetwork,再到了以太坊。为什么这条交易能够上到ONT上,我们还不清楚,我们现在目前还在做进一步的调查。
这个攻击非常smart,攻击者构造攻击交易的时候,目的是要去修改替换公钥,而能替换公钥的函数是比较固定的,就那么一个函数。
构造的交易最后能调到那个函数,跟以太坊智能合约函数调用的选择的机制是有关系的,所以我觉得攻击者掌握了非常深的攻击技巧,并且对polynetwork链上的整个的机制是非常了解的,否则的话它其实很难构进行构造出来这么一个具有碰撞的这么一个恶意的从ont上的这么一个交易出来。
从这一点来看,我们认为攻击者应该是蓄谋已久的,并且可能是在攻击之前已经做了精心的实验和准备,所以他最后的攻击从替换公钥到最后完成交易整个时间是非常短的。
主持人:黑客混币是什么目的?混币成功了还能追踪出来吗?
周亚金:
攻击者在攻击成功以后,一般来说会尽快把赃款脱手,要把它洗干净从而很难让执法机关去追踪。
混币服务其实就是经常被用于对赃款进行一定的匿名化处理。在这一次的攻击当中,其实攻击者还是露出了马脚,他为了去做攻击,需要有一定的手续费,而这个手续费的来源是从一个中心化的交易所转出来的,不免会留下一定的痕迹,后续被一些安全团队发现,才会去做出退还赃款的操作。
主持人: 今天我们看到黑客归还了200多万的美金的,他不是一下子归还,而是拖拖拉拉,你怎么看?
周亚金:
我觉得攻击者应该会偿还比较多的大部分的资金,因为攻击者在整个攻击的过程中留下了比较多的痕迹。
在数字货币世界里面,匿名是一把双刃剑,匿名保护我们的隐私,但也会使得我们对于数字货币的追踪变得比较困难,特别是引入了混币服务以后。
在这一次攻击当中,攻击者由于在攻击准备阶段从中心化交易所里面转出了很多的资金,暴露出了一定的信息,我们不清楚项目方和其他的安全团队到底掌握了攻击者什么样的信息,但是我们认为,如果继续追踪的话,黑客的整个信息是可以被挖掘出来的。
另外,6亿美元是比较大额的安全事件,无论哪个国家的执法机关都应该去监管和查处的这个事情。所以从威慑的角度来讲,我个人觉得攻击者可能会后续偿还大部分的资金。
主持人: 在没被攻击前,大家都觉得DeFi是去中心化的,代码及法律。被攻击之后,受害群体的用户都在说要报警。安全取决于中心化还是去中心化?
周亚金:
安全与否,无关于中心化和去中心化。
虽然代码是法律,但是如果你的代码出现了问题,其实不就相当于出现了坏的法律了?怎么样让DeFi的代码变得更安全,我觉得可能是整个社区需要去探讨的问题,而不是纠结于中心化就一定不安全,去中化就一定安全。
主持人:给这次polynetwork受损用户的建议是什么?
周亚金:
不要把鸡蛋放在一个篮子里。
主持人: 除了监管上要加大力度,普通投资在投资defi时候应该注意哪些?对于一个项目的安全性应该如何判断?
周亚金:
我觉得用户有一个误区,认为项目被审计之后就一定安全。这是一个非常大的误区,项目被审计只说明这个项目被相应的审计公司以安全的视角去review过它的代码,并不代表没有安全威胁的存在。
从用户的角度来说,可以多维的评估项目方的安全程度,比如说这个项目方有没有定期的去披露监测到的风险的情况,比如每天或者每周去披露项目大概遇到疑似的攻击有多少次,怎么去阻断它的,至少说明项目方其实在这方面投入非常大的时间和成本。
另外一块,用户也需要更多的去支持一些对安全投入比较大的一些项目,和项目方可以有更好的这种良性的互动来去提高整个项目的安全性。