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

曲速未來 :以太坊智能合約編碼安全之Call注入區(qū)塊鏈

區(qū)塊鏈安全檔案 2018-09-14 19:42
分享到:
導(dǎo)讀

區(qū)塊鏈安全咨詢公司曲速未來表示:Solidity作為一種用于編寫以太坊智能合約的圖靈完備的語言,除了常見語言特性以外,還提供了調(diào)用/繼承其他合約的功能。在call、delegatecall、callcode三個(gè)函數(shù)來實(shí)現(xiàn)合約之間相互調(diào)用及交互。

前言

區(qū)塊鏈安全咨詢公司 曲速未來 表示:Solidity作為一種用于編寫以太坊智能合約的圖靈完備的語言,除了常見語言特性以外,還提供了調(diào)用/繼承其他合約的功能。在call、delegatecall、callcode三個(gè)函數(shù)來實(shí)現(xiàn)合約之間相互調(diào)用及交互。正是因?yàn)檫@些靈活各種調(diào)用,也導(dǎo)致了這些函數(shù)被合約開發(fā)者“濫用”,甚至“肆無忌憚”提供任意調(diào)用“功能”,導(dǎo)致了各種安全漏洞及風(fēng)險(xiǎn)。

上述代碼就是一個(gè)典型的存在call注入問題直接導(dǎo)致重入漏洞的demo。

2016年7月,The DAO被攻擊者使用重入漏洞取走了所有代幣,損失超過60億,直接導(dǎo)致了eth的硬分叉,影響深遠(yuǎn)。

2017年7月20日,Parity Multisig電子錢包版本1.5 的漏洞被發(fā)現(xiàn),使得攻擊者從三個(gè)高安全的多重簽名合約中竊取到超過15萬ETH ,其事件原因是由于未做限制的 delegatecall 函數(shù)調(diào)用了合約初始化函數(shù)導(dǎo)致合約擁有者被修改。

2018年6月16日,有人在先知大會(huì)上提到了一種新的攻擊場(chǎng)景——call注?,主要介紹了利用對(duì)call調(diào)用處理不當(dāng),配合一定的應(yīng)用場(chǎng)景的一種攻擊手段。

接著于 2018年6月20日,ATN代幣團(tuán)隊(duì)發(fā)布《ATN抵御黑客攻擊的報(bào)告》,報(bào)告指出黑客利用call注入攻擊漏洞修改合約擁有者,然后給自己發(fā)行代幣,從而造成 ATN 代幣增發(fā)。

Solidity 的三種調(diào)用函數(shù)

在Solidity中,call函數(shù)簇可以實(shí)現(xiàn)跨合約的函數(shù)調(diào)用功能,其中包括call、delegatecall和callcode三種方式。

以下是Solidity中call函數(shù)簇的調(diào)用模型:

這些函數(shù)提供了靈活的方式與合約進(jìn)行交互,并且可以接受任何長度、任何類型的參數(shù),其傳入的參數(shù)會(huì)被填充至32字節(jié)最后拼接為一個(gè)字符串序列,由EVM解析執(zhí)行。

在函數(shù)調(diào)用的過程中,Solidity中的內(nèi)置變量msg會(huì)隨著調(diào)用的發(fā)起而改變,msg保存了調(diào)用方的信息包括:調(diào)用發(fā)起的地址,交易金額,被調(diào)用函數(shù)字符序列等。

三種調(diào)用方式的異同點(diǎn)

call: 最常用的調(diào)用方式,調(diào)用后內(nèi)置變量msg的值會(huì)修改為調(diào)用者,執(zhí)行環(huán)境為被調(diào)用者的運(yùn)行環(huán)境(合約的 storage)。

delegatecall: 調(diào)用后內(nèi)置變量msg的值不會(huì)修改為調(diào)用者,但執(zhí)行環(huán)境為調(diào)用者的運(yùn)行環(huán)境。

callcode: 調(diào)用后內(nèi)置變量msg的值會(huì)修改為調(diào)用者,但執(zhí)行環(huán)境為調(diào)用者的運(yùn)行環(huán)境。

delegatecall濫用問題

delegatecall: 調(diào)用后內(nèi)置變量msg的值不會(huì)修改為調(diào)用者,但執(zhí)行環(huán)境為調(diào)用者的運(yùn)行環(huán)境。

原理

在智能合約的開發(fā)過程中,合約的相互調(diào)用是經(jīng)常發(fā)生的。開發(fā)者為了實(shí)現(xiàn)某些功能會(huì)調(diào)用另一個(gè)合約的函數(shù)。比如下面的例子,調(diào)用一個(gè)合約A的test()函數(shù),這是一個(gè)正常安全的調(diào)用。

但是在實(shí)際開發(fā)過程中,開發(fā)者為了兼顧代碼的靈活性,往往會(huì)有下面這種寫法:

這將引起任意 public 函數(shù)調(diào)用的問題:合約中的delegatecall的調(diào)用地址和調(diào)用的字符序列都由用戶傳入,那么完全可以調(diào)用任意地址的函數(shù)。

除此之外,由于delegatecall的執(zhí)行環(huán)境為調(diào)用者環(huán)境,當(dāng)調(diào)用者和被調(diào)用者有相同變量時(shí),如果被調(diào)用的函數(shù)對(duì)變量值進(jìn)行修改,那么修改的是調(diào)用者中的變量。

call 安全問題

call: 最常用的調(diào)用方式,調(diào)用后內(nèi)置變量msg的值會(huì)修改為調(diào)用者,執(zhí)行環(huán)境為被調(diào)用者的運(yùn)行環(huán)境。

call注入是一種新的攻擊場(chǎng)景,原因是對(duì)call調(diào)用處理不當(dāng),配合一定的應(yīng)用場(chǎng)景的一種攻擊手段。

call 注入原理

call 調(diào)用修改 msg.sender 值

通常情況下合約通過call來執(zhí)行來相互調(diào)用執(zhí)行,由于call在相互調(diào)用過程中內(nèi)置變量msg會(huì)隨著調(diào)用方的改變而改變,這就成為了一個(gè)安全隱患,在特定的應(yīng)用場(chǎng)景下將引發(fā)安全問題。

外部用戶通過call函數(shù)再調(diào)用合約函數(shù):

高度自由的 call 調(diào)用

在某些應(yīng)用場(chǎng)景下,調(diào)用函數(shù)可以由用戶指定;下面是call函數(shù)的調(diào)用方式:

從上面可以看出,call函數(shù)擁有極大的自由度:

1.對(duì)于一個(gè)指定合約地址的call調(diào)用,可以調(diào)用該合約下的任意函數(shù)

2.如果call調(diào)用的合約地址由用戶指定,那么可以調(diào)用任意合約的任意函數(shù)

為了便于理解,可以將智能合約中的call函數(shù)類比為其他語言中的eval函數(shù),call函數(shù)相當(dāng)于給用戶提供了隨意調(diào)用合約函數(shù)的入口,如果合約中有函數(shù)以msg.sender作為關(guān)鍵變量,那么就會(huì)引發(fā)安全問題。

call 函數(shù)簇調(diào)用自動(dòng)忽略多余參數(shù)

call函數(shù)簇在調(diào)用函數(shù)的過程中,會(huì)自動(dòng)忽略多余的參數(shù),這又額外增加了call函數(shù)簇調(diào)用的自由度。下面的例子演示call自動(dòng)忽略多余參數(shù):

例子中test()函數(shù)僅接收一個(gè)uint256的參數(shù),但在callFunc()中傳入了三個(gè)參數(shù),由于call自動(dòng)忽略多余參數(shù),所以成功調(diào)用了test()函數(shù)。

callcode 安全問題

callcode: 調(diào)用后內(nèi)置變量msg的值會(huì)修改為調(diào)用者,但執(zhí)行環(huán)境為調(diào)用者的運(yùn)行環(huán)境。

由于callcode同時(shí)包含了call和delegatecall 的特性,通過上文對(duì)call和delegatecall的安全問題進(jìn)行了分析和舉例,可以得出的結(jié)論是call和delegatecall存在的安全問題將同時(shí)存在于callcode中,這里不再進(jìn)行詳細(xì)的分析。

總結(jié)

針對(duì)文中所提到的安全隱患,區(qū)塊鏈安全咨詢公司 曲速未來 建議:

1.call、callcode、delegatecall調(diào)用的自由度極大,并且call會(huì)發(fā)生msg值的改變,需要謹(jǐn)慎的使用這些底層的函數(shù);同時(shí)在使用時(shí),需要對(duì)調(diào)用的合約地址、可調(diào)用的函數(shù)做嚴(yán)格的限制。

2.call與callcode調(diào)用會(huì)改變msg的值,會(huì)修改msg.sender為調(diào)用者合約的地址,所以在合約中不能輕易將合約本身的地址作為可信地址。

3.delegatecall與callcode會(huì)拷貝目標(biāo)代碼到自己的環(huán)境中執(zhí)行,所以調(diào)用的函數(shù)應(yīng)該做嚴(yán)格的限制,避開調(diào)用任意函數(shù)的隱患。

4.智能合約在部署前必須通過嚴(yán)格的審計(jì)和測(cè)試。

本文內(nèi)容由 曲速未來安全咨詢公司編譯,轉(zhuǎn)載請(qǐng)注明。 曲速未來提供包括主鏈安全、交易所安全、交易所錢包安全、DAPP開發(fā)安全、智能合約開發(fā)安全等相關(guān)區(qū)塊鏈安全咨詢服務(wù)。

調(diào)用 合約 函數(shù) 安全 delegatecall
分享到:

1.TMT觀察網(wǎng)遵循行業(yè)規(guī)范,任何轉(zhuǎn)載的稿件都會(huì)明確標(biāo)注作者和來源;
2.TMT觀察網(wǎng)的原創(chuàng)文章,請(qǐng)轉(zhuǎn)載時(shí)務(wù)必注明文章作者和"來源:TMT觀察網(wǎng)",不尊重原創(chuàng)的行為TMT觀察網(wǎng)或?qū)⒆肪控?zé)任;
3.作者投稿可能會(huì)經(jīng)TMT觀察網(wǎng)編輯修改或補(bǔ)充。


主站蜘蛛池模板: 聚氨酯保温钢管_聚氨酯直埋保温管道_聚氨酯发泡保温管厂家-沧州万荣防腐保温管道有限公司 | 品牌策划-品牌设计-济南之式传媒广告有限公司官网-提供品牌整合丨影视创意丨公关活动丨数字营销丨自媒体运营丨数字营销 | 涂层测厚仪_光泽度仪_uv能量计_紫外辐照计_太阳膜测试仪_透光率仪-林上科技 | 液压升降货梯_导轨式升降货梯厂家_升降货梯厂家-河南东圣升降设备有限公司 | 建筑消防设施检测系统检测箱-电梯**检测仪器箱-北京宇成伟业科技有限责任公司 | 体检车_移动CT车_CT检查车_CT车_深圳市艾克瑞电气有限公司移动CT体检车厂家-深圳市艾克瑞电气有限公司 | 油液红外光谱仪-油液监测系统-燃油嗅探仪-上海冉超光电科技有限公司 | 恒湿机_除湿加湿一体机_恒湿净化消毒一体机厂家-杭州英腾电器有限公司 | 长城人品牌官网| 应急灯_消防应急灯_应急照明灯_应急灯厂家-大成智慧官网 | 818手游网_提供当下热门APP手游_最新手机游戏下载 | 塑料瓶罐_食品塑料瓶_保健品塑料瓶_调味品塑料瓶–东莞市富慷塑料制品有限公司 | 抖音短视频运营_企业网站建设_网络推广_全网自媒体营销-东莞市凌天信息科技有限公司 | 高速混合机_锂电混合机_VC高效混合机-无锡鑫海干燥粉体设备有限公司 | 德国EA可编程直流电源_电子负载,中国台湾固纬直流电源_交流电源-苏州展文电子科技有限公司 | 高压油管,液压接头,液压附件-烟台市正诚液压附件 | 泰安塞纳春天装饰公司【网站】 | 培训中心-翰香原香酥板栗饼加盟店总部-正宗板栗酥饼技术 | 首页 - 军军小站|张军博客 | 元拓建材集团官方网站| 旋振筛|圆形摇摆筛|直线振动筛|滚筒筛|压榨机|河南天众机械设备有限公司 | 板框压滤机-隔膜压滤机配件生产厂家-陕西华星佳洋装备制造有限公司 | 吹田功率计-长创耐压测试仪-深圳市新朗普电子科技有限公司 | 北钻固控设备|石油钻采设备-石油固控设备厂家 | 珠海网站建设_响应网站建设_珠海建站公司_珠海网站设计与制作_珠海网讯互联 | 济南网站建设_济南网站制作_济南网站设计_济南网站建设公司_富库网络旗下模易宝_模板建站 | 北京租车牌|京牌指标租赁|小客车指标出租 | 厌氧反应器,IC厌氧反应器,厌氧三相分离器-山东创博环保科技有限公司 | 地图标注-手机导航电子地图如何标注-房地产商场地图标记【DiTuBiaoZhu.net】 | 电动葫芦|防爆钢丝绳电动葫芦|手拉葫芦-保定大力起重葫芦有限公司 | 工业设计,人工智能,体验式3D展示的智能技术交流服务平台-纳金网 J.S.Bach 圣巴赫_高端背景音乐系统_官网 | 嘉兴恒升声级计-湖南衡仪声级计-杭州爱华多功能声级计-上海邦沃仪器设备有限公司 | 扬尘在线监测系统_工地噪声扬尘检测仪_扬尘监测系统_贝塔射线扬尘监测设备「风途物联网科技」 | 艺术涂料_进口艺术涂料_艺术涂料加盟_艺术涂料十大品牌 -英国蒙太奇艺术涂料 | 酒店品牌设计-酒店vi设计-酒店标识设计【国际级】VI策划公司 | 消防设施操作员考试报名时间,报名入口,报考条件 | 高扬程排污泵_隔膜泵_磁力泵_节能自吸离心水泵厂家-【上海博洋】 | 搅拌磨|搅拌球磨机|循环磨|循环球磨机-无锡市少宏粉体科技有限公司 | 长春网站建设,五合一网站设计制作,免费优化推广-长春网站建设 | 吸污车_吸粪车_抽粪车_电动三轮吸粪车_真空吸污车_高压清洗吸污车-远大汽车制造有限公司 | 生物制药洁净车间-GMP车间净化工程-食品净化厂房-杭州波涛净化设备工程有限公司 |