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

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

作者:

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

引子:“真行者珞珈山诉苦,假猴王水帘洞誊文。”?——《西游记·第五十八回》

在《西游记》中,六耳猕猴冒充猴王孙悟空,以假乱真,过了唐僧,过了众神,纵使是照妖镜也分不出真假。

现在,智能合约遇上了“六耳猕猴”,又会擦出怎样的火花?

在智能合约中,构造函数负责一些数据的初始化工作,owner值一般也会放在构造函数中进行初始化。

owner是智能合约拥有者的称呼,也常被用来作为该合约的超级管理员。对代币合约来说,owner可能被分配的权限有:铸造/销毁代币、冻结代币等。

如果开发者以错误的语法创建“构造函数”,造成构造函数缺失,致使“六耳猕猴”以假乱真,瞒过了开发者,最后使得攻击者成为合约的拥有者,那么攻击者便可依赖owner的权限,对代币进行增发或销毁等操作,进而可能造成整个代币的崩盘。

Filecoin:FVM上线,Filecoin现支持智能合约:金色财经报道,Filecoin官方社交媒体账号发文称,“FVM成功上线,截至发稿时,Filecoin区块链现在支持智能合约和用户可编程性。”[2023/3/15 13:04:37]

一、构造函数简介

在Solidity语言中,当函数名和合约名相同时,此函数就是合约的构造函数,在合约对象创建时,会先调用构造函数对相关的数据进行初始化。

以太坊Solidity0.4.22版本中引入了关键字constructor,新的构造函数声明形式:constructor()public{},引入的目的是用以替代低版本中将合约名作为构造函数名的语法形式,从而避免开发者笔误造成构造函数命名错误的问题。

引入的这个关键字看似平淡无奇,实则意蕴深刻,且听我慢慢道来。

数据:Cardano Plutus智能合约超3000个,ADA钱包突破350万:8月5日消息,据Cardano Blockchain Insights数据显示,Cardano Vasil 硬分叉前达到两个里程碑,截至目前基于 Plutus 脚本的 Cardano 智能合约数量达到 3031 个,该指标展示了 Cardano 允许用户编写与区块链交互的应用程序的能力。此外,ADA 钱包已突破 350 万,截至最新 8 月 4 日数据为 3,505,141 个。

此前消息,原本计划于 7 月底进行的 Cardano 主网 Vasil 硬分叉升级再次推迟,延迟或将打到数周时间。[2022/8/6 12:05:43]

二、Fallout“以假乱真?”

–漏洞分析

下面以ethernaut靶场的Fallout题目为例进行分析。

一眼看去,这似乎是一个正常没有漏洞的合约代码,但经过仔细观察发现,该合约存在一个致命错误——构造函数名称与合约名称不一致,Fallout合约的构造函数被写错成了Fal1out。

QuickSwap与以太坊智能合约自动执行工具Gelato Network合作提供限价订单功能:Polygon网络上的去中心化交易所QuickSwap与以太坊智能合约自动执行工具Gelato Network达成合作,已为用户提供限价单服务。[2021/8/17 22:19:31]

这样的错误使其成为了一个被public修饰的普通函数,失去了构造函数仅在合约部署时被调用的特性,使得任何人都可以调用。该题目源码如下图所示:

图1

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

如下图所示:

现场 | Rick Feng:智能合约与商品溯源共促跨境电商发展:金色财经现场报道,1月9日,2019首届海南GFIS国际金融科技创新峰会在海南海口盛大召开,JRR合伙人、Jaypal首席执行官Rick Feng进行现场演讲,他指出:传统跨境电商领域面临支付效率低、手续费高昂;真货举证困难、买家欺诈等问题。当前可以通过去中心化、智能合约、商品溯源等方式解决上述问题。去中心化可以提高支付效率、节省支付成本;智能合约可以建立信任机制,保护贸易双方;商品溯源可以降低卖家真货举证难度,提高买家信心。[2019/1/9]

图2

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

声音 | 布比CTO王璟 : 智能合约更大的安全隐患一定会出现在虚拟机本身:11月24日,在杭州举办的2018中国区块链技术大会上,布比CTO王璟在演讲中表示,目前区块链底层大多数采用Nosql数据库,在大并发下,需要实现Nosql数据库集群,或更加高效的文件存储方式。而商用级别的隐私保护,除了最基本的数据加密,还需满足性能、监管、灵活授权查看等需求。此外,单链的性能永远存在性能瓶颈,因此同构链的主子链、侧链:异构链间的跨链,都将成为未来的研究方向。而在合约安全方面,目前,智能合约的安全仅仅停留在合约代码本身,更大的安全隐患一定会出现在虚拟机本身。[2018/11/24]

三、前车之覆

MorphToken事件分析

在过去也曾发生过类似的安全事件,包含着假构造函数的合约被成功发布到主链上,其中比较出名的是“MorphToken事件”,其因为一个看似很小的问题而造成了数千万市值的代币被增发。

合约代码地址:https://etherscan.io/address/0x2ef27bf41236bd859a95209e17a43fbd26851f92#code

在Owned合约中,由于首字母大小写的错误,导致本该成为构造函数的Owned成为了普通函数owned,且被public修饰,可供任何人调用。

如下图所示:

图3

MorphToken合约继承了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、在合约正式上线前一定要找专业可信的机构做好合约代码的审计工作。

标签:OWNNERCTOFALFishingTownGilTokengoldminer币前景ConnectomeFAL价格

AAVE热门资讯
以太坊:杭州区块链国际周 | Sigma Prime 联合创始人:以太坊2.0预计将在今年11月或12月上线

7月5日,由杭州市余杭区政府指导,杭州未来科技城管委会、巴比特主办的“2020杭州区块链国际周”正式开幕,来自世界各地的行业大咖、互联网大厂、创新企业、投资机构、学术机构、主流媒体将齐聚亮相.

1900/1/1 0:00:00
区块链:2020年四省八市区块链专项政策盘点:北京发文引关注,各省市产业竞赛日趋激烈

半年之内,十二省市印发区块链发展专项政策,行业春天到了吗?2020年,区块链开启了发展的第2个十年,这是区块链高速发展的新起点.

1900/1/1 0:00:00
区块链:中新峰会丨区块链Oracle和安全审计该如何做?这里有你想要的答案

7月4日,由新加坡新跃社科大学、万向区块链实验室及巴比特联合发起的顶级区块链线上峰会———2020中新区块链领袖高峰论坛正式开幕.

1900/1/1 0:00:00
BTC:DeFi 狂欢,也是比特币锚定币的生机

撰文:LucasOutumuro编译:张改娟DeFi无疑是近两个月加密货币领域最热门的的板块。DeFi热潮不仅吸引了以太坊加入到这个生态系统中,而且基于以太坊的BTC锚定币总发行量也不断创下历史.

1900/1/1 0:00:00
区块链:中新对话 | 基于区块链的数字资产托管企业服务,有哪些机会与未来?

7月4日,新加坡新跃社科大学,携手万向区块链实验室、巴比特和新加坡区块链协会,共同在线召开“2020中新区块链领袖论坛”.

1900/1/1 0:00:00
ABS:全球最大公募基金Vanguard在区块链上ABS测试项目的启示

作者:谷燕西6月11日,全球最大的公募基金Vanguard宣布刚刚完成了一个在区块链上发行ABS的测试项目。这个测试项目是完全模拟一个真正进行的ABS项目。测试顺利完成.

1900/1/1 0:00:00