首页
社区
课程
招聘
[原创]以太坊"伊斯坦布尔"硬分叉以及重入攻击的防护
发表于: 2019-11-4 14:29 27962

[原创]以太坊"伊斯坦布尔"硬分叉以及重入攻击的防护

2019-11-4 14:29
27962

首先感谢远在珠海辛勤工作的老婆的支持。
这篇文,主要是将最近所学以及实时现状进行总结和分析,全文分三个部分来写,希望路过的大佬们不吝啬指点一番,那就是获益匪浅了。

在9月30号的时候以太坊测试链上"伊斯坦布尔"已经完成分叉,有消息称"伊斯坦布尔"硬分叉在以太坊正式链上将在12月4号进行分叉。

在"伊斯坦布尔"硬分叉中EIP 1884将进行实现。
在EIP 1884中

这里的影响只提及安全影响,和我们的主题相关,重入漏洞使用的transfer以及send,被推荐的安全函数,他们的建立前提是:假设gas不改变。一旦gas改变,那么就具备了其相关的安全性。transfer以及send被限制最大只能使用2300gas,这是发送一次日志的使用量,但是由于EIP 1884导致fallback gas使用量增加,所以transfer函数以及send函数出现了问题。

"伊斯坦布尔"的前称为"君士坦丁堡"。前一次硬分叉命名为"君士坦丁堡",这一次的硬分叉命名为"伊斯坦布尔"。1923年土耳其共和国初建时为首都(独立战争期间迁都安卡拉),伊斯坦布尔才成为国际上的正式名称。

整个过程就是:
拜占庭———君士坦丁堡——伊斯坦布尔

这里将重入漏洞进行复现以及利用。

这个网上有很多,大家可以去看一下,这里简单的说一下,就是通过递归,利用call.value gas使用无限制将币进行转移。

首先准备存在漏洞的sol
在大佬的源码上我做了一些精简,只为了能更好的复现漏洞。大佬的地址之后附在文末。

这个是漏洞源码

在withdraw这个函数中出现了重入漏洞的问题。
准备一个利用代码,利用的原理就是在使用call.value进行转账的时候,如果转账的是一个合约账户的话,那么就会调用合约账户的fallback函数。
所以现在的逻辑就是需要一个有fallback函数,并且需要再fallback里做文章。

首先用户存币

图片描述

然后攻击者创建合约并且给合约币

图片描述

然后设置目标合约地址:

图片描述

设置币值:

图片描述

成功盗币
图片描述

由于该漏洞的主要利用就是因为call.value的gas值没有做限制,所以之前是针对此出现了transfer以及send进行防护,而且被广为推荐。但是由于现在gas使用值改变所以这两个函数将不再适用。

除了因为call.value gas使用无限制的原因意外,出现漏洞的最主要原因是因为逻辑错误以及判断不够完整而导致的。

出现漏洞的地方一般都是先转账,然后再进行数值的减少。这里的逻辑问题就会导致先转了账,利用递归不执行数值减少的代码,从而导致盗币。那么反过来说就可以先进行数值的增减然后再进行转账操作。

但是这样子的逻辑还有一个问题就是如果转账失败的话,没有做处理就会导致数值减少但是没有真正转账。

修改之后的源码
图片描述

进行重入攻击的测试:

图片描述


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-11-4 14:54 被王嘟嘟编辑 ,原因:
收藏
免费 4
支持
分享
最新回复 (3)
雪    币: 26205
活跃值: (63302)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
2
感谢分享!
好男人,一般在文章中感谢老婆的男人不多
2019-11-4 17:09
0
雪    币: 14543
活跃值: (17558)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
3
Editor 感谢分享! 好男人,一般在文章中感谢老婆的男人不多
mark,楼主辛苦了,我也很想感谢老婆,但是不知道该选谁的老婆比较好
2019-11-4 18:03
0
雪    币: 1110
活跃值: (569)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
4
pureGavin mark,楼主辛苦了,我也很想感谢老婆,但是不知道该选谁的老婆比较好[em_86]
2019-11-7 17:18
0
游客
登录 | 注册 方可回帖
返回
//