以太坊:PeckShield 研发副总吴家志:需要更多人合作解决区块链生态安全问题 | 区块链P.O.D大会_以太坊官网钱包

9月5日,在由Odaily星球日报主办、36Kr集团战略协办的P.O.D大会安全论坛上,PeckShield研发副总吴家志发表题为《区块链智能合约及公链安全》的演讲。在演讲中,吴家志指出,整个区块链生态存在的安全问题包括智能合约、基础设施、钱包问题、矿池问题等。他还表示,因为区块链相关的项目方众多,有各种公链,公链有各种实现,智能合约也有各种实现,这些安全问题不是一家公司可以搞定的,需要更多的人来共同做好这件事,所以PeckShield与白帽汇旗下的BCSEC共同成立了DVP漏洞平台。该平台在7月24号上线,目前收到1700多个漏洞,相关的厂商已经有705个,总共注册白帽子1万多。PeckShield希望跟所有相关方合作,把整个生态做得更好。以下为吴家志演讲全文,enjoy:

各位嘉宾下午好,我是吴家志,我来分享一下PeckShield的研究成果,我们公司是从今年年初开始区块链研究的,算起来到现在,差不多有半年的时间。最早从代码开始研究区块链相关的信息,到现在研究范围扩大到整个区块链生态的各个环节。大家知道我们名字可能从是智能合约问题曝光开始,后来我们也做了很多跟公链相关的漏洞披露,也有做像前面嘉宾所说数据分析方面的研究,发了一些跟数据有关的快讯,还有热门游戏相关的漏洞分析等等。我们有一个目标就是希望整个生态能够在一个安全的状态下运转。我们认为区块链某一定程度会取代人类的一些经济行为,跟以往的经济行为很大不一样的是“去中心化”。所以没有这种机构保证你的资金安全,你钱丢了是没办法找一个法院或者银行帮你追回来的,在这样环境下,整个生态安全问题就显得至关重要。先做一下自我介绍。最早之前是在学校,2015年来到北京工作,在360。如果说你们从2013年开始到2015、2016年,有用安卓手机的话,可能里面就有我写的一些代码。今年之前,我都是以系统安全研究白帽子的身份,在做一些事情,后面开始做区块链相关的安全研究。

我最近也在做一些数据分析,这是一个比较大的趋势图。我第一次看这个图怎么这么大,你可以看到,我们现在在这,9月初是在这,去年的时候是在这里,有两条线,蓝色是我们监控上面每个月新增的合约数,可以看到蓝色的波动,绿色是我们监控到的数,可以看到去年这时候是有一个下滑,这个原因大家应该也知道。到年底的时候,有各种包括以太猫在这个时间点,有一个攀升。7月份稍微有点返升,上个月又稍微凉了一点,大家也明白。

刚才那个图是比较简单的数据,我们统计每个月的量,看他的情况是怎么样。下面这个图就比较有趣,我来解释一下。Homestead,这个阶段是到155万个blknum,一个圈代表一万个区块,所以这个图上有115个圈。再来是X坐标,意思是说这一万个区块里面存在一个以上交易的块数,举个例子,这一块可能差不多是8200,这一万个块里面有82%左右不是空块。所以就你可以理解为这个圈如果在图的越右边的话,就表示这个网络是满载的情况。

再来看Y坐标,就是这一万个块里面的平均TX数,最大的值是200多,为什么是这个值,原因是每一个块是有gas上限的,你可以理解为每一个块承载的TX数是有限制的,最一开始状态是点都是在很低的地方,但是有一个往右边的增长,一开始可能很多都是空块,像创世块就在左下角,就是没有任何TX,进入下一个阶段可以看到这个图开始有一些往上增长,但也有往左的,还是属于一个网络不是太拥塞的情况。

到拜占庭这个时间点往右边的圈越来越多了,整个网络变得比较拥挤。

到最近这一年以来,基本就是贴到最右边去,可能是由于各种现象级的游戏,还有包括黑客攻击什么的,所以现在,可能随便出来一个现象级事件,包括Fomo3D这一类游戏,都可能导致这种结果。这个是我们PeckShield从数据方面观察到一些现象。

接下来分几个层面去讲整个区块链生态的一些安全问题,这里面大家可以看到,比如智能合约,有infrastructure,还有钱包问题等其他环节,我们都有一些研究。

首先我先讲一下智能合约的问题,这个跟大家最早知道PeckShield的美链事件是类似的一个问题,代码在这个地方,这些value加起来之后出现一个溢出的数,导致amount检查会被绕过,我们看画面右边有一个案例,右面可以看到两个手机的样子,旁边是我攻击的流程,等一下你会看到右边我更新的一下会凭空造出两个很大的数字,后面的零数不过来,就是通过这种方式,我们生成两个不同地址,分别是那两个手机的钱包地址,造成这个地方溢出,然后这个检查绕过,这边就等于看到生成很多数字资产的地方,就是在balance+=value这个地方,空手套白狼,这是一个挺严重的问题。这样的问题有一个比较公认的解决方法,就是在这个地方,是一种比较严谨的计算函数库,叫Safemath。

这边是一个allowance的运算,它可以保证你不会溢出,那为什么你看我标题写的是Unsafemath呢?我们最近发现一个很有趣的现象,在你右手边,这里safeSub的实现里,用assert确保B小于或对于A,也就是说你不能用一个比较小的数减一个比较大的数。assert这个方法可以保证你这边错的时候,会可以把你的gas烧完,让这个TX结束,这也是刚刚郭老师讲的攻击里面的细节。就是说本来架构里面有一个这样的机制存在,但他的这个safeMath实现里,多加了一个assert函数,在发生错误的时候直接return。所以选择你的安全函数库的时候也要注意一下。

再来我讲一下关于infrastructure的研究,左边这个截图是漏洞奖励计划的网站,PeckShield现在是暂时排名第五,目前已公开有三个比较早期提交给基金会的漏洞,都是跟公链有关。我今天稍微介绍一下其中的一个,已经修复的,大家不用担心,如果你把Geth升级到最新的,这个漏洞不存在。

这个漏洞简单说一下,我们命名为叫做EPoD,只要发一个数据包给你,你笔记本现在跑一个客户端,我知道你的IP,直接发给你,你收到后,你的客户端就会崩溃,这个崩溃听起来好像没什么,但是我直接广发这个数据部就直接死一片,你其实可以很简单联想到这个可以拿来做算力的攻击。代码的细节不讲太多,简单说就是我把某一个数据弄成负1,这边代码实现是把这个数+1,当你要分配内存大小,负1+1就是零,我又去access负1这个地方的位置,最终导致越界访问,程序就崩溃了。我们直接看案例比较简单一点。

右边这个就是我运行的客户端,这边先去证明一下我客户端是从官网上面下载,保证说这个客户端不是我自己修改过的,是官网直接下载的。等一下检查完之后左边会出现两个窗口,左上角是攻击代码运行情况,左下角是一个抓包的画面,刚刚我做了一个操作,就是先把网关掉,确保这个机器已经没有网了,所有网络测的数据包都是来自本机的包。看到最右边已经把Geth客户端领跑起来了,这边是我刚才抓到的UDP包,如果你们有了解,这种包不需要建立连接,我可以在网关或者什么地方,可以扩散我的攻击,左上角是我攻击代码,我攻击的目标是127.0.0.1,这我们本机的IP,这个是攻击的包,所以只要在某一个版本以下的Golang客户端收到这个包就会崩溃。这样的漏洞其实我们有一整个系列,这是最早被公开的一个,我们在明天的互联网大会上会讲,这整个系列会有好几个类似这样的案例。以上是我针对公链还有智能合约的安全问题简单做的两个案例,大家理解一下就可以,如果真的要看代码,可以关注下PeckShield的官网。最后,我要说是我们最近跟白帽汇旗下BCSEC合作的一个项目,我们感觉区块链相关的项目方实在太多了,有各种公链,公链有各种实现,智能合约有各种实现,所以我们就开始觉得说,这个安全的问题其实不是我们一家公司可以搞定的,我们需要更多的人同时来把这件事做的更好,所以我们成立一个平台叫做DVP漏洞平台。最右边是漏洞提交的情况,简单说我们就是利用一种众测方式,集合所有有安全能力的研究人员或者白帽子,让项目方把他的项目在我们平台上面悬赏。比如说我现在要测试1.0版本,你找到一个什么样等级漏洞给你怎么样的报酬,通过这样方式鼓励白帽子帮我们把整个生态做的更好。这个平台是在7月24号上线,目前收到1700多个漏洞,相关的厂商已经有705个,总共注册白帽子一万多。这些是已经入驻这个平台的厂商,包括我们自己公司网站也放在上面做悬赏。PeckShield其实希望跟所有项目方合作,把整个生态做的更好,一开始我也讲到这件事情,最右边是我们公司的官网,我们会不定期在上面发布我们最新的研究成果,大家可以关注一下。以上就是我今天的分享,谢谢。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

大币网

[0:0ms0-4:956ms