火星链 火星链
Ctrl+D收藏火星链
首页 > AAVE > 正文

STR:智能合约安全实践:练就“火眼金睛”,真假构造函数一眼看清

作者:

时间:1900/1/1 0:00:00

引子:“真行者珞珈山诉苦,假猴王水帘洞誊文。”——《西游记·第五十八回》在《西游记》中,六耳猕猴冒充猴王孙悟空,以假乱真,过了唐僧,过了众神,纵使是照妖镜也分不出真假。现在,智能合约遇上了“六耳猕猴”,又会擦出怎样的火花?

在智能合约中,构造函数负责一些数据的初始化工作,owner值一般也会放在构造函数中进行初始化。owner是智能合约拥有者的称呼,也常被用来作为该合约的超级管理员。对代币合约来说,owner可能被分配的权限有:铸造/销毁代币、冻结代币等。如果开发者以错误的语法创建“构造函数”,造成构造函数缺失,致使“六耳猕猴”以假乱真,瞒过了开发者,最后使得攻击者成为合约的拥有者,那么攻击者便可依赖owner的权限,对代币进行增发或销毁等操作,进而可能造成整个代币的崩盘。一、构造函数简介

Tellor将管理密钥发送至“Parachute”智能合约,以应对攻击等特殊情况:去中心化预言机Tellor已将其管理密钥发送至“Parachute”智能合约,该合约允许Tellor团队通过代码驱动的清晰透明的逻辑重新获得控制权,以修复错误或纠正攻击事件。这种DAO管理的形式可帮助Tellor更加去中心化,同时有利于在未来发生灾难性事件时进行补救。此前报道,今年2月Tellor在升级过程中出现重大错误,之后冻结了Tellor系统,迫使项目将代币迁移到了一个新的主合约。[2021/8/12 1:50:56]

在Solidity语言中,当函数名和合约名相同时,此函数就是合约的构造函数,在合约对象创建时,会先调用构造函数对相关的数据进行初始化。以太坊Solidity0.4.22版本中引入了关键字constructor,新的构造函数声明形式:constructor()public{},引入的目的是用以替代低版本中将合约名作为构造函数名的语法形式,从而避免开发者笔误造成构造函数命名错误的问题。引入的这个关键字看似平淡无奇,实则意蕴深刻,且听我慢慢道来。

Acala启动智能合约功能 为波卡DeFi提供以太坊兼容支持:波卡DeFi平台Acala宣布启动智能合约功能,为Substrate提供EVM和ink!模块支持,也就是基于Substrate提供Solidity和Wasm智能合约开发支持。具体来说,Acala支持EVM模块(又名运行时模块),本质上是Substrate上的以太坊虚拟机实施,这意味着Acala将支持部署和运行Solidity合约。此外,Acala还支持ink!合约模块,支持用Rust编写的基于Wasm(WebAssembly)的Substrate原生智能合约。[2020/9/11]

动态 | Change Healthcare与TIBCO合作计划在医疗行业引入智能合约:据unhashed消息,美国医疗保健公司Change Healthcare正与软件公司TIBCO合作,计划通过区块链技术在医疗行业引入智能合约,实现医疗和相关交易的自动化。[2018/11/6]

二、Fal1out“以假乱真?”

–漏洞分析下面以ethernaut靶场的Fallout题目为例进行分析。一眼看去,这似乎是一个正常没有漏洞的合约代码,但经过仔细观察发现,该合约存在一个致命错误——构造函数名称与合约名称不一致,Fallout合约的构造函数被写错成了Fal1out。这样的错误使其成为了一个被public修饰的普通函数,失去了构造函数仅在合约部署时被调用的特性,使得任何人都可以调用。该题目源码如下图所示:

以太坊智能合约再曝安全漏洞 攻击者可任意窃取受影响合约地址的数字资产:区块链安全公司PeckShield近日发现一种新型的智能合约安全漏洞evilReflex,攻击者可通过公开的接口窃取合约地址账户中存放的Token。据PeckShield研究人员透露,目前已发现有数十个Token受该漏洞影响,其中部分Token已在某些顶级交易所上线并交易。[2018/6/24]

图1在Fal1out函数中直接指定了函数调用者的地址即为owner,所以只需要调用Fal1out函数即可实现对合约owner的更改。如下图所示:

安盛推出适用于航班延误的智能合约保险产品:全球第二大金融公司、保险巨头安盛(AXA)推出了一项以太坊公链上的智能合约保险产品。这款名为Fizzy的产品与之前称为FlightDelay的Etherisc类似,个人支付保险费,如果航班延误超过两个小时,则自动获得赔偿。[2018/6/19]

图2“假猴王”Fal1out想借着一些字体类型的相似字符的视觉差异混淆视听,可最终还是没能逃过我们的“火眼金睛”。三、前车之覆:

MorphToken事件分析在过去也曾发生过类似的安全事件,包含着假构造函数的合约被成功发布到主链上,其中比较出名的是“MorphToken事件”,其因为一个看似很小的问题而造成了数千万市值的代币被增发。合约代码地址:https://etherscan.io/address/0x2ef27bf41236bd859a95209e17a43fbd26851f92#code在Owned合约中,由于首字母大小写的错误,导致本该成为构造函数的Owned成为了普通函数owned,且被public修饰,可供任何人调用。如下图所示:

图3MorphToken合约继承了Owned合约,并在自己的构造函数内进行了owner的初始化,但是父合约Owned的owned函数是可供任何人调用的,攻击者便可通过调用owned函数更改合约的所有者owner。owner的初始化代码如下图所示:

图4由上述可知,任何人都可以通过调用合约的owned函数,成为合约的拥有者(owner)。如下图所示:

图5失之毫厘,差之千里,一个小小的字母错误,却导致了合约的代币的崩盘。代币也被恶意增发。如下图所示:

图6四、后车之鉴:

开发者应如何正确使用构造函数建议更换Solidity0.4.22及以上版本,并使用正确的constructor()语法。如下图所示:

图7切记:constructor()前并无function,functionconstructor()public{}为错误的构造函数形式。如果要使用低于0.4.22的版本,则一定要着重检查函数名是否和合约名一致。如下图所示:

图8五、安全建议

在智能合约中因开发者粗心,而造成安全漏洞的事件层出不穷,“千里之堤,溃于蚁穴”,成都链安-安全实验室在此给出如下建议:1、开发者在编写智能合约敏感函数时,应严格按照官方要求的代码书写规范,注意不要出现字符错误等情况。2、在某些情况下,编译器会对constructor的错误使用发出警告,开发者应予以正确对待,不可认为其只是警告信息而忽略不处理。3、在合约正式上线前一定要找专业可信的机构做好合约代码的审计工作。

标签:OWNSTRNEROUTbikingdownWSTR币LineraRouter Protocol

AAVE热门资讯
SDT:窄幅横盘震荡,波动率维持低位

2020年第28周区块链二级市场报告2020年7月6日-2020年7月13日本期报告重点内容:本周大盘走势:窄幅横盘震荡.

1900/1/1 0:00:00
区块链:观点:机构托管已成为加密市场的新风口?

编者按:本文来自加密谷Live,作者:JohnDantoni,Odaily星球日报经授权转载。摘要共有28家公司为机构客户提供数字资产托管的服务.

1900/1/1 0:00:00
区块链:通过BATJ看区块链布局趋势

想要在区块链领域投资布局,当然一定要关注互联网科技巨头公司的动态走向,52cbdc为大家整理和解读2020年上半年各大科技互联网巨头公司在区块链领域方面的布局和动态.

1900/1/1 0:00:00
ACE:OK区块链60讲 | 第39集:中本聪的消失

\n哈喽大家好,我是小K君,今天我们要讲的内容是:“中本聪的消失”? 我们都知道,中本聪是比特币的创始人.

1900/1/1 0:00:00
ETH:一文了解如何利用算法交易优化投资组合

Overview概述观点一:2019年7月13日至2020年7月13日,数字货币市值前十整体风险水平下限高于A股市值前十24.52%观点二:超额回报方面.

1900/1/1 0:00:00
Nexus:读懂去中心化保险新秀Nexus Mutual:用互助保险管理DeFi合约靠谱吗?

编者按:本文来自链闻ChainNews,撰文:LeftOfCenter,星球日报经授权发布。随着流动性挖矿越来越火热,越来越多的DeFi项目开始加入收益耕种大军,DeFi链上锁仓总值大幅增长.

1900/1/1 0:00:00