宇宙链 宇宙链
Ctrl+D收藏宇宙链

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

作者:

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

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

在《西游记》中,六耳猕猴冒充猴王孙悟空,以假乱真,过了唐僧,过了众神,纵使是照妖镜也分不出真假。现在,智能合约遇上了“六耳猕猴”,又会擦出怎样的火花?

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

UENC公链3月中旬智能合约测试网上线:据官方消息,UENC基于UT-2000提案将会销毁原有空投量和测试网激励量,为了更好的增加UENC公链的全球曝光度,将通过UT-2001提案启用原有运营剩余量的4374999枚UENC进行全球品牌推广空投等活动,首期空投将于3月中旬智能合约测试网上线后开启,UT-2001提案细则如下:

374999枚:全球运营团队激励(包含全网KOL)

1000000枚:全球运营推广空投(高频品宣活动使用)

3000000枚:运营规划或销毁(据市场运营状况而定)[2022/3/10 13:49:02]

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

杭州中院:面推进数字法院建设,拓展区块链智能合约应用场景:8月16日消息,杭州中院院党组书记、院长斯金锦今日在2021年“一府两院”工作报告会上向人大报告杭州法院2021年上半年工作情况和下半年工作安排。斯金锦表示,杭州中院上半年全面推进数字法院建设,在推动杭州互联网法院深化改革、迭代升级“凤凰智审”、拓展区块链智能合约应用场景等方面走在全浙江省前列。下半年将敢于创新,全力推进全域数字法院建设。(杭州中院官方公众号)[2021/8/16 22:17:47]

以太坊Solidity 0.4.22版本中引入了关键字constructor,新的构造函数声明形式:constructor() public { },引入的目的是用以替代低版本中将合约名作为构造函数名的语法形式,从而避免开发者笔误造成构造函数命名错误的问题。引入的这个关键字看似平淡无奇,实则意蕴深刻,且听我慢慢道来。

动态 | TRON-IDE编译工具支持开发者完成智能合约的编译及部署工作:据官方最新消息,TRON-IDE编译工具已经可以支持开发者简易快捷的完成智能合约的编译及部署工作。TRON-IDE是一款基于波场TRON公链开发供开发者使用的智能合约编译工具,经过多个版本迭代和不间断的灰度发布,到目前为止,TRON-IDE已经达到面向全量用户发布的标准,可以支持开发者简易快捷的完成智能合约的编译及部署工作。[2019/12/19]

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

现场 | 鲍帅:机器学习技术能极大提升智能合约安全检测引擎效率:金色财经现场报道,今日,2018可信区块链峰会在北京召开。在主题为“区块链安全焦点关注”的区块链安全论坛上,西安好码安全信息科技有限公司CEO鲍帅分析了智能合约与机器学习的相互影响。他指出,当前智能合约发展迅速,如何有效处理海量智能合约的安全成为行业普遍关注的问题,机器学习技术的引入能极大地提升智能合约安全检测引擎效率,在大规模 、易扩展、半监督学习、高价值、高效率、通用方案等方面发挥较大的优势。[2018/10/10]

图 1

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

纽约州试图引入澄清区块链及智能合约法律地位的法案:据ethnews消息,昨天纽约加入越来越多的州,试图澄清区块链和EDCC(又名智能合同)的法律地位,引入了一项名为“修改与区块链技术和智能合同相关的州级技术法”的法案。上周,与此类似的一项法案——参议院第300号法案被提交给了俄亥俄州立法机关的委员会。[2018/5/31]

图 2

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

在过去也曾发生过类似的安全事件,包含着假构造函数的合约被成功发布到主链上,其中比较出名的是“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

建议更换Solidity 0.4.22及以上版本,并使用正确的constructor()语法。如下图所示:

图 7

切记: constructor()前并无function,function constructor() public { }为错误的构造函数形式。

如果要使用低于0.4.22的版本,则一定要着重检查函数名是否和合约名一致。如下图所示:

图 8

在智能合约中因开发者粗心,而造成安全漏洞的事件层出不穷,“千里之堤,溃于蚁穴”,成都链安-安全实验室在此给出如下建议:

1、 开发者在编写智能合约敏感函数(如构造函数、回退函数fallback)时,应严格按照官方要求的代码书写规范,注意不要出现字符错误等情况。

2、 在某些情况下,编译器会对constructor的错误使用发出警告,开发者应予以正确对待,不可认为其只是警告信息而忽略不处理。

3、 在合约正式上线前一定要找专业可信的机构做好合约代码的审计工作。

标签:OWNNERNBSBSPCLOWN币goldminer币背后资金实力nbs币前景BSP价格

fil币价格今日行情热门资讯
产业周刊 | 多省市利用区块链等技术培育壮大新业态

金色周刊是金色财经推出的一档每周区块链行业总结栏目,内容涵盖一周重点新闻、行情与合约数据、矿业信息、项目动态、技术进展等全行业动态。本文是其中的产业周刊,带您一览本周的区块链产业动态.

1900/1/1 0:00:00
IPFS技术与应用研讨论坛(郑州)即将拉开帷幕 邀您逐鹿中原

从无人知晓到渐为人知;从冷门偏技到热门关注,IPFS从2014年诞生至今,已经走过了六个年头。正如它的创建者胡安·贝内特的天才经历一样,IPFS自大热以来,同样充满传奇故事——在实打实的技术开发与虚实结合的概念炒作之间浮浮沉沉,曾被人.

1900/1/1 0:00:00
罚款1850万美元 返还12亿美元 Telegram与SEC和解

自去年10月以来,Telegram和美国证券交易委员会(SEC)就其区块链项目17亿美元的ICO问题一直争执不休,但最终双方就如何解决这起历时8个月的官司达成了一致.

1900/1/1 0:00:00
金色前哨|央行数字货币研究所与滴滴探索出行场景

据北京商报消息,日前,央行数字货币研究所与滴滴出行正式达成战略合作协议,共同研究探索数字人民币在智慧出行领域的场景创新和应用。双方期望通过建立合作关系,促进数字人民币在多元化出行场景中的平台生态建设.

1900/1/1 0:00:00
金色前哨 | 纳斯达克推出“市场服务平台” 微软、R3等多家支持

美国东部时间6月24日,纳斯达克推出市场服务平台。这是一个基于SaaS(Software as Service)的数字资产组件,旨在帮助公司构建一个使用分布式账本技术的金融工具,让客户更好地发行、交易、管理数字资产和通证资产.

1900/1/1 0:00:00
金晚8点丨主流币暴力插针是正常调整 还是反弹结束?

首档行情直播栏目 金晚8点 热点资讯、现货合约,一对一实时解答随时随地掌握后市行情,把握币市掘金机会2020/07/14丨今日主题:《主流币暴力插针是正常调整.

1900/1/1 0:00:00