当前位置:主页 > 列表页 > 正文

行走笔记:Poly Network攻击事件技术复盘(上)

2021-08-15 02:01 | 出处: 行走


本篇笔记来自811日晚巴比特8问大事件的直播。直播分上下半场,上半场由主持人贾小别采访被黑客攻击的Poly Network上的一位受损当事人。下半场是由来自安全公司BlockSec联合创始人,浙江大学网络空间安全学院的教授博导周亚教授Poly被盗事件做了相对完整,虽然技术但基本能看懂的复盘。笔记会分上、下两篇呈现。同时行走也会把这一事件后续进展中一些大咖的评论贴在笔记后面供大家参考。

以下,Enjoy

主持人:接下来连线周亚教授周教授是浙大网络空间安全学院的教授,近期加入到了区块链行业,是一家专注安全研究公司BlockSec联合创始人。请周教授和大家打个招呼。

周亚我之前主要的研究方向在区块链安全,也包括了隐私计算和系统安全在区块链安全的行业,从18年开始到现在陆陆续续我们也研究了三年多18年当时区块链的生态还没有那么丰富,区块链从过去比较简单的游戏和博彩类的应用逐渐上升到今天有比较丰富的Defi生态我们是一步一步的看着区块链,包括以太坊的链一步步起来的

我们也发现在这个过程当中,安全其实是一个非常重要的因素很多人说区块链就是安全因为区块链特别是在Defi,有很多的资金的属性在里面对于虚拟货币和数字货币,安全事件的频发会给用户带来非常大的损失这也是这一次Poly的安全事件所带给我们的警示

安全在区块链里应当放到非常非常重要的地位包括前一阶段国外的Defi项目,200million USDT的损失还是非常大的。在目前,整个区块链行业还是需要安全这么一个比较强属性的东西来支撑

主持人:下面我们来讨论Poly Network被盗的事情事件发生的第一时间通过朋友联系到周教授你们当时就在跟踪

根据你们跟踪的结果,这次被盗事件是不是一次有预谋的行动?黑客从开始发起攻击做了哪些操作有哪些操作比较关键,的目的是什么?

周亚这个事件我们是从810晚上8点多钟第一时间知道以后,团队就一直在分析。在差不多不到24小时的时间,我们对整个攻击的了解是越来越深的。

到现在为止,攻击漏洞最本质的那个点大家都还没有找到虽然网上现在有很多版本的报告,但实际上最终的真相和最终的漏洞大家都还没有找到

我们现在还在分析,已经快接近真相了用一个PPT把整个的攻击的过程和原理给大家分享一下

首先我先简单介绍一下Poly Chain,它其实是一个跨链聚合器现在有很多条不同的公链,包括BSA以太坊以及其他的一些链,在链上存在不同的数字资产。这就带来一个需求,我的数字资产如何在不同的链之间去交换和传递。

Poly就是一个跨链的解决方案用户可以通过Poly的网络可以在不同的链上实现资产的流转。


我在左边引用的是整个Poly官方给出的文档。这里介绍Poly协议的流程,和后面我们分析攻击原理还是比较相关的。


我们假设有一个用户,他在这个以太坊上想用一个ETH转账到目标链上的币要怎么做呢?

用户首先会去调用以太坊链上的智能合约,把他的ETH资产锁在这个智能合约里面然后Poly有个名为“Relayer”的中继器会把这样一个交易传播到目标链上在整个传播的过程当中,它必须要对交易的合法性做很多的校验

第三步在目标链上同样有一个Poly的合约这个合约会去调用一unlock

函数unlock的操作做什么呢?它是把用户锁在以太坊上的一个ETH,换算成目

标链上相应资产的余额,转到目标链的代币里。

这样通过Poly Chain,我们就完成了资产从以太坊目标的转换。在整个过程当中,Poly其实有很多安全的考量,它需要校验整交易的合法性。

由于在跨的过程当中,涉及到交互还是比较复杂的涉及到用户和合约之间的交互,合约的交互,链Poly之间的交互,PolyRelayer之间的交互,Relayer和目标之间交互所以它整个交互的链条还是比较长的。

从最基本的安全设计来说,为了保证在整个跨链时候的交易安全性,我们需要对跨链的消息进行签名校验Poly整个的设计当中,是成立了4个校验者因此攻击者其实是没有办法去伪造消息,直接发送给目标链,从而完成提币和转的操作。

正因为有了这些校验,攻击者如果想完成攻击过程。他基本上需要做两件事情

第一件事情要绕过这些校验

第二步是在绕过校验过程之后,可以发送任意的提币的交易

去做绕过校验的时候,通常也有几种不同的方法

1整个在设计的时候,密码学的算法本身存在着漏洞用来去做签名校验的算法本身有一些后门或者漏洞,被攻击者知道了

2、算法实现可能有错误。签名校验的加密算法可能没有问题但是因为算法实现存在漏洞,那攻击者可以去利用它

3用来签名消息的私钥,可能存在私钥泄露的隐患攻击者实际上是可以用已经泄露的私钥去签名出来各种各样任意的交易消息的;

4修改签名交易者的公钥在做校验的时候,必须要使用预先预置好的一些公钥去对消息去做校验如果攻击者有某一种方法能去修改签名校验公钥可以把公钥修改成攻击者自身所控制的公钥这样就可以用自己所拥有的私钥去签署消息

我们在分析攻击的时候,从外部的角度来看,最后看到的都是面上的交易信息在链下的包括Poly Chain网络内部的一些操作,我们看不到的

所以我们在10号晚上,只是看到了有一笔合法签名的提币交易在上了,并且整个签名校验的过程确实都过了而且在签名校验的过程中,我们发现用来校验的公钥只有一个所以当时安全界有很多很多的猜测当然后来进一步的研究发现,其实攻击者是通过第种方法,去修改了签名校验的公钥

问题是他是怎么去修改的呢?

校验者公钥实际上是存在某一个合约的一个变量里面而能去修改这个变量的合约又是特定的也就是说不是谁都可以去修改这个变量的。攻击者是如何达到修改签名校验者的公钥呢?

我们再回到一开始讲的如果要让一个资产从以太坊的链到另外一个链转移,它需要进行哪些步骤。略过前面的步骤得不讲,我们就讲最后一步最后一步是比较关键的

在目标链上如果需要完成资产的转移,需要调用一个unlock函数完成资产的转移。但是如果攻击者通过某一种方法,调用的不是unlock”的方法,而是某一个其他的方法,并且这个方法本身就有权限能去修改校验的公钥。攻击者就可以通过恶意的调用修改公钥的函数,从而替换签名调用的公钥签名调用的公钥替换成攻击者控制之后,后面就可以任意的发送提币的交易。

这些是大家都掌握到信息我们继续做了一定的追踪,发现什么攻击者可以通过不调用unlock函数,而是通过调用一个特定的函数去完成修改公钥的操作。

我们发现攻击者最初的攻击交易,是从ONT(本体)这个发过来的。攻击者是从ONT上发了一个精心构造的恶意交易这个精心构造的恶意交易的唯一目的就是去修改在以太坊上用来做签名校验的公钥

但是这个交易本身是合法的这个交易本身是合法的在ONT上的交易。为什么会有一条合法的交易到ONT的链上?目前大家都还不知道我们也在看ONT链上本身的合约以及链的实现

我们比较怀疑可能是ont链上Poly Network合约有问题或者ONT本身去做跨的接口有问题导致攻击者可以恶意、精心构造这么一个交易,最后来完成对密钥的替换具体详细过程我们还在分析当中。

为什么810很多的媒体和安全公司都认为Poly Networkkeeper只有1个公钥实际上确实是这样。因为它原先4个公钥,但是被攻击者修改成只有一个公钥,所以从最后攻击的交易来看确实只有1个公钥。

我们

相关文章