TMT观察网_独特视角观察TMT行业

WF曲速區:Solidity中的重入漏洞分析區塊鏈

曲速未來安全區 2018-08-08 21:55
分享到:
導讀

Soildity作為編寫智能合約的語言,已經被廣泛的應用。但同時,開發者和用戶也得到了慘痛的教訓,智能合約的安全問題層出不窮。因此,區塊鏈安全公司WF曲速未來總結了一些常見的Solidity安全問題。前車之鑒,后車之師,希望后來者能有所警惕。

前言

Soildity 作為編寫智能合約的語言,已經被廣泛的應用。但同時,開發者和用戶也得到了慘痛的教訓,智能合約的安全問題層出不窮。

因此,區塊鏈安全公司WF曲速未來總結了一些常見的Solidity安全問題。前車之鑒,后車之師,希望后來者能有所警惕。

重入漏洞介紹

重入漏洞,按照表面意思就是可以重復進入。在以太坊的智能合約中,向為外部地址發送ETH需要調用外部合約的代碼。黑客通過劫持外部調用,從而重復進入以太坊智能合約的轉賬函數進行轉賬。

代碼分析

首先是以太坊的智能合約的轉賬函數

假如賬戶有10個幣,你要轉9個出去。肯定是可以的,你要轉11個,就不行。因為你沒有11個。所以此處要轉9個出去肯定是可以的。因為10>=9。最后一步就是減去你賬戶中的9個幣了。此時賬戶里面只有1個幣了。

看看黑客如何進行攻擊的:

 .

攻擊者首先構造一個惡意合約Mallory,將Mallory部署之后,攻擊者調用withdraw函數向Mallory合約捐贈一點以太幣。看似沒什么問題。

但是withdraw函數中的msg.sender.call.value(amout)()執行之后,由于轉賬 操作特性 ,會在轉賬結束之后自動調用Mallory 的 fallback函數,于是再次調用 withdraw函數。因為此時credit中并未更新額度,所以依然可以正常取款,便陷入遞 歸循環,每次都提取DAO中的一部分以太幣到Mallory合約中。

在這里,我們上面分析過了,我們是先進行轉賬再進行扣款的。那么這樣有什么壞處呢?也就是說,如果在轉賬處一直循環卡住了,那么扣款就不會執行。但是轉賬操作會一直執行

相關事件

2016年6月以太幣組織 The DAO 被攻擊,攻擊者利用兩個代碼漏洞創建子合約提取了360萬個以太幣。接下來我們詳細分析一下這個事件

從splitDAO代碼開始

函數調用者只能是TokenHolder。不能是ether賬戶。這里沒什么問題,符合預期

splitDAO的代碼有點長,我們看到如下的代碼

在這里是計算需要支付的金額,然后調用createTokenProxy函數。我們需要記住這點。根據BLOG 2,在DAO.sol中,function splitDAO函數有這樣一行:

合約中,為msg.sender記錄的dao幣余額歸零、扣減dao幣總量totalSupply等等都發生在將發回msg.sender之后,這里是在Blog 1中指出的一個典型“反模式”。

接下來看withdrawRewardFor函數。目前github中所見最新代碼并非部署于Ethereum livenet的代碼:

paidOut[_account] = reward 在原來代碼里面放在payOut函數調用之后,最新github代碼中被移到了payOut之前。再看payOut函數調用。rewardAccount的類型是ManagedAccount,在ManagedAccount.sol中可以看到:

_recipient.call.value()() 這個函數調用時,轉賬_amount個Wei,call調用默認會使用當前剩余的所有gas,此時call調用所執行的代碼步驟數可能很多,基本只受攻擊者所發消息的可用的gas限制。

把這些拼起來,黑客的攻擊手法就浮現了:

我們現在可以建立一個攻擊合約。

創建一個錢包,調用splitDAO多次,直到到達合約的gas limit,或者stack limit。

創建一個分割提案到一個新的錢包地址。

等待7天。

調用splitDAO

調用了兩次splitDAO,withdrawRewardFor也調用了兩次,并且兩次都是成功。成功竊取ether。

區塊鏈安全公司WF曲速未來 表示:作為已經有過被利用先例的漏洞,開發者在編寫合約時應更小心一些。

合約 調用 函數 代碼 轉賬
分享到:

1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。


專題報道

主站蜘蛛池模板: 飞利浦LED体育场灯具-吸顶式油站灯-飞利浦LED罩棚灯-佛山嘉耀照明有限公司 | CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | POM塑料_PBT材料「进口」聚甲醛POM杜邦原料、加纤PBT塑料报价格找利隆塑料 | 影像测量仪_三坐标测量机_一键式二次元_全自动影像测量仪-广东妙机精密科技股份有限公司 | 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | 冲锋衣滑雪服厂家-冲锋衣定制工厂-滑雪服加工厂-广东睿牛户外(S-GERT) | 车充外壳,车载充电器外壳,车载点烟器外壳,点烟器连接头,旅行充充电器外壳,手机充电器外壳,深圳市华科达塑胶五金有限公司 | 包装机_厂家_价格-山东包装机有限公司 | 液压压力机,液压折弯机,液压剪板机,模锻液压机-鲁南新力机床有限公司 | 菲希尔FISCHER测厚仪-铁素体检测仪-上海吉馨实业发展有限公司 | 低粘度纤维素|混凝土灌浆料|有机硅憎水粉|聚羧酸减水剂-南京斯泰宝 | nalgene洗瓶,nalgene量筒,nalgene窄口瓶,nalgene放水口大瓶,浙江省nalgene代理-杭州雷琪实验器材有限公司 | 层流手术室净化装修-检验科ICU改造施工-华锐净化工程-特殊科室建设厂家 | 蚂蚁分类信息系统 - PHP同城分类信息系统 - MayiCMS | 防堵吹扫装置-防堵风压测量装置-电动操作显示器-兴洲仪器 | 立式_复合式_壁挂式智能化电伴热洗眼器-上海达傲洗眼器生产厂家 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 冷油器,取样冷却器,热力除氧器-连云港振辉机械设备有限公司 | 100_150_200_250_300_350_400公斤压力空气压缩机-舰艇航天配套厂家 | 合肥地磅_合肥数控切割机_安徽地磅厂家_合肥世佳电工设备有限公司 | 皮带机-带式输送机价格-固定式胶带机生产厂家-河南坤威机械 | 玉米加工设备,玉米深加工机械,玉米糁加工设备.玉米脱皮制糁机 华豫万通粮机 | 无尘烘箱_洁净烤箱_真空无氧烤箱_半导体烤箱_电子防潮柜-深圳市怡和兴机电 | 北京印刷厂_北京印刷_北京印刷公司_北京印刷厂家_北京东爵盛世印刷有限公司 | 桌上式超净工作台-水平送风超净工作台-上海康路仪器设备有限公司 | 塑钢件_塑钢门窗配件_塑钢配件厂家-文安县启泰金属制品有限公司 深圳南财多媒体有限公司介绍 | 电机铸铝配件_汽车压铸铝合金件_发动机压铸件_青岛颖圣赫机械有限公司 | 玻璃钢型材_拉挤模具_玻璃钢拉挤设备——滑县康百思 | 圆盘鞋底注塑机_连帮鞋底成型注塑机-温州天钢机械有限公司 | 紫外荧光硫分析仪-硫含量分析仪-红外光度测定仪-泰州美旭仪器 | 东莞工厂厂房装修_无尘车间施工_钢结构工程安装-广东集景建筑装饰设计工程有限公司 | TPM咨询,精益生产管理,5S,6S现场管理培训_华谋咨询公司 | 成都APP开发-成都App定制-成都app开发公司-【未来久】 | 生物颗粒燃烧机-生物质燃烧机-热风炉-生物颗粒蒸汽发生器-丽水市久凯能源设备有限公司 | 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 排烟防火阀-消防排烟风机-正压送风口-厂家-价格-哪家好-德州鑫港旺通风设备有限公司 | 卸料器-卸灰阀-卸料阀-瑞安市天蓝环保设备有限公司 | 北京网站建设|北京网站开发|北京网站设计|高端做网站公司 | 西安中国国际旅行社(西安国旅) | 洗砂机械-球磨制砂机-洗沙制砂机械设备_青州冠诚重工机械有限公司 | 昆明挖掘机修理厂_挖掘机翻新再制造-昆明聚力工程机械维修有限公司 | 重庆钣金加工厂家首页-专业定做监控电视墙_操作台 |