引子:“真行者珞珈山诉苦,假猴王水帘洞誊文。”?——《西游记·第五十八回》
在《西游记》中,六耳猕猴冒充猴王孙悟空,以假乱真,过了唐僧,过了众神,纵使是照妖镜也分不出真假。
现在,智能合约遇上了“六耳猕猴”,又会擦出怎样的火花?
在智能合约中,构造函数负责一些数据的初始化工作,owner值一般也会放在构造函数中进行初始化。
owner是智能合约拥有者的称呼,也常被用来作为该合约的超级管理员。对代币合约来说,owner可能被分配的权限有:铸造/销毁代币、冻结代币等。
如果开发者以错误的语法创建“构造函数”,造成构造函数缺失,致使“六耳猕猴”以假乱真,瞒过了开发者,最后使得攻击者成为合约的拥有者,那么攻击者便可依赖owner的权限,对代币进行增发或销毁等操作,进而可能造成整个代币的崩盘。
ARK Invest:到2030年,智能合约网络每年可提供4500亿美元的费用:金色财经报道,ARK Invest近日发布“2023 Big Ideas”研究报告,比特币、数字钱包、公链和智能合约网络占据2023年14个“大创意”中的四席。
报告强调了Layer2网络Arbitrum和Optimism上的交易数量,现在与以太坊基础层交易数量相当。ARK Invest补充说,到2030年,智能合约网络每年可提供4500亿美元的费用。与此同时,ARK Invest预计数字钱包用户的数量将以每年8%的速度增长,到2030年达到全球人口的65%。
在另一个名为“技术融合”的主题中,Ark表示,加密挖矿可以支持更多的太阳能电池安装,并指出“将比特币挖矿纳入太阳能存储系统可以提高电网的规模和可靠性,而不会增加电力的平均成本”。[2023/2/2 11:41:53]
一、构造函数简介
在Solidity语言中,当函数名和合约名相同时,此函数就是合约的构造函数,在合约对象创建时,会先调用构造函数对相关的数据进行初始化。
以太坊推出的“Shandong”测试网将对执行智能合约的EVM进行更改:金色财经报道,10月17日,以太坊的核心开发人员推出了“Shandong”测试网,用于区块链网络的上海升级。上海升级预计将在2023年进行。这将是以太坊自9月合并以来的首次升级。此次升级对执行智能合约的技术以太坊虚拟机(EVM)进行了更改。另一个预期的提议将允许通过信标链提取质押的ETH和获得的奖励。目前,持有ETH的验证者无法直接提取资金。此外,升级还将引入对第2层协议的更改,通过均衡块大小和提高网络中的呼叫数据效率来降低gas价格。[2022/10/19 16:30:10]
以太坊Solidity0.4.22版本中引入了关键字constructor,新的构造函数声明形式:constructor()public{},引入的目的是用以替代低版本中将合约名作为构造函数名的语法形式,从而避免开发者笔误造成构造函数命名错误的问题。
引入的这个关键字看似平淡无奇,实则意蕴深刻,且听我慢慢道来。
现场丨Chainlink联合创始人:预言机是将智能合约连接至链下世界的关键:金色财经现场报道,由Web3基金会主办的Web3大会10月29日在上海举行。Chainlink联合创始人Sergey Nazarov在会上表示,目前智能合约已经迈入链下连通阶段,有金融、国际贸易、保险等越来越多的场景被覆盖,但它们都需要数据输入如价格数据,这些数据都需要以某种形式传输到区块链上。现在的趋势就是将脚本化智能合约连接至链下世界,而预言机则是实现这一趋势的关键。这一趋势将驱动DeFi智能合约实现极大增长。[2020/10/29]
二、Fallout“以假乱真?”
–漏洞分析
下面以ethernaut靶场的Fallout题目为例进行分析。
以太坊钱包Gnosis Safe Multisig推出智能合约交互功能:非托管以太坊钱包Gnosis Safe Multisig推出一个前端“智能合约交互(Contract Interaction)”功能,允许用户直接与以太坊智能合约进行交互。Gnosis表示该功能旨在提高使用智能合约的灵活性,并允许以太坊智能合约和应用程序直接交互,并支持尚未添加到Gnosis界面中智能合约,例如用户可以使用该功能与ENS交互并定义部分参数。Gnosis同时表示宣布推出桌面版钱包,并“增加额外的安全性”。[2020/5/20]
一眼看去,这似乎是一个正常没有漏洞的合约代码,但经过仔细观察发现,该合约存在一个致命错误——构造函数名称与合约名称不一致,Fallout合约的构造函数被写错成了Fal1out。
这样的错误使其成为了一个被public修饰的普通函数,失去了构造函数仅在合约部署时被调用的特性,使得任何人都可以调用。该题目源码如下图所示:
动态 | 2019中国网络诚信十大新闻出炉,区块链智能合约司法应用上榜:12月2日消息,以“网聚诚信力量 共创信用中国”为主题的2019中国网络诚信大会今日在古城西安举行,会上发布了“2019中国网络诚信十大新闻”的征集、评选结果。其中“首个区块链智能合约司法应用上线,新技术构筑网络诚信智能防线”新闻登上2019中国网络诚信十大新闻名单。[2019/12/2]
图1
在Fal1out函数中直接指定了函数调用者的地址即为owner,所以只需要调用Fal1out函数即可实现对合约owner的更改。
如下图所示:
图2
“假猴王”Fal1out想借着一些字体类型的相似字符的视觉差异混淆视听,可最终还是没能逃过我们的“火眼金睛”。
三、前车之覆
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、在合约正式上线前一定要找专业可信的机构做好合约代码的审计工作。
重要嘉宾:著名经济学家、“改革四君子”、数字资产研究院院长,CECBC区块链专委会特别顾问、原联合国工业发展组织经济学家朱嘉明教授今年4月,区块链被正式纳入新基建“国家队”.
1900/1/1 0:00:007月5日,由杭州市余杭区政府指导,杭州未来科技城管委会、巴比特主办的“2020杭州区块链国际周”正式开幕.
1900/1/1 0:00:00资产管理巨头富达成为加拿大上市矿业公司Hut8上月公募的最大投资者。根据最近的一份文件显示,富达购买了此次Hut8发行股票份额中的71%,也就是说,富达现在拥有Hut810.6%的流通股票.
1900/1/1 0:00:007月5日,由杭州市余杭区政府指导,杭州未来科技城管委会、巴比特主办的“2020杭州区块链国际周”正式开幕。下午场的比原链专场,举行了题为“DeFi,除了以太坊我们还能聊什么?”的圆桌论坛.
1900/1/1 0:00:00Curve,这家领先的稳定币AMM兑换商,刚刚发布了其治理代币CRV及治理社区CurveDAO的第一版计划.
1900/1/1 0:00:00法条链接《民法通则》第九十二条规定:没有合法根据,取得不当利益,造成他人损失的,应当将取得的不当利益返还受损失的人.
1900/1/1 0:00:00