黑客来袭,狂卷6亿美金,如何最大力度挽回损失?

摘要:我这里引用的是PolyNetwork官方的给出的文档,假设这里有一个用户在以太坊

我这里引用的是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过它的代码,并不代表没有安全威胁的存在。

从用户的角度来说,可以多维的评估项目方的安全程度,比如说这个项目方有没有定期的去披露监测到的风险的情况,比如每天或者每周去披露项目大概遇到疑似的攻击有多少次,怎么去阻断它的,至少说明项目方其实在这方面投入非常大的时间和成本。

另外一块,用户也需要更多的去支持一些对安全投入比较大的一些项目,和项目方可以有更好的这种良性的互动来去提高整个项目的安全性。

本文链接:https://www.8btc.com/article/6673671

转载请注明文章出处

免责声明

本文观点仅代表作者个人观点,不构成本平台的投资建议,本平台不对文章信息准确性、完整性和及时性作出任何保证,亦不对因使用或信赖文章信息引发的任何损失承担责任
上一篇

DeFi之道 | 原生代币流动性的艺术与科学

下一篇

读懂「二池」设计的奥秘:流动性并非多多益善,是艺术也是科学