火星链 火星链
Ctrl+D收藏火星链
首页 > BNB价格 > 正文

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

作者:

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

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

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

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

Cardano生态DEXMinswap已迁移智能合约:金色财经消息,Cardano生态去中心化交易所Minswap发推称,现已迁移智能合约,用户的LP和挖矿头寸会在接下来的24小时内逐步显示。3月23日,Minswap表示,检测到一个问题,DEX处于维护模式,已采取保护措施,正在重写、测试和部署修复程序,目前用户资金是安全的。[2022/3/24 14:16:03]

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

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

Project Galaxy宣布集成波卡生态智能合约平台Clover Finance钱包:3月8日消息,NFT 基础设施服务商 Project Galaxy 宣布集成波卡生态智能合约平台 Clover Finance 钱包。用户在 Project Galaxy 页面现可通过 Clover 钱包登录。Clover Finance 生态用户可由此简单、安全的进入 Project Galaxy NFT 空间。[2022/3/8 13:44:31]

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

工信部陈晓华:智能合约的合理运用将促进数字人民币业务模式创新:工信部工业互联网区块链重大项目评审专家、中国移动通信联合会区块链专业委员会主任委员兼首席数字经济学家陈晓华表示,智能合约的合理运用将大大促进数字人民币业务模式的创新。数字人民币通过智能合约具有可编程性,使数字人民币在合规的前提下,根据交易双方商定的条件、灵活用于多种环境和关系。越来越多的城商行、农商行等中小银行加速入局数字人民币应用试点,将为数字人民币试点推进提供更多的测试场景,将促使各地区数字人民币的发行与清算效率进一步优化。(证券日报)[2021/9/1 22:50:55]

图 1

天气信息提供商AccuWeather通过运行Chainlink节点将天气数据带入智能合约:金色财经报道,天气信息提供商AccuWeather周三宣布,正在启动一个Chainlink节点,以将其天气API直接放置在基于区块链的智能合约上。AccuWeather API包括天气信息,例如温度、降水、风速和自然灾害分类。该气象公司称,AccuWeather驱动的智能合约的一些可能用途包括NFT。[2021/8/5 1:35:23]

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

动态 | 支付初创公司Wyre收购比特币智能合约开发商:Crypto支付初创公司Wyre收购了风险投资支持的比特币智能合约开发公司Hedgy的100%股权。该公司联合创始人兼首席运营官约阿尼斯?贾纳罗斯(Ioannis Giannaros)在接受CoinDesk采访时表示,这笔交易将帮助Wyre拓宽其为crypto初创公司提供的服务范围。Wyre通过使用比特币、ethereum、litecoin等加密货币进行跨境支付来结算交易。[2018/9/7]

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

标签:OWNNERBSPNBSOwndatagoldminer币在哪个交易交易是跑路币吗BSPTnbs币发行量

BNB价格热门资讯
7.18早间行情:行情震荡反弹暂消除进一步的下行风险

昨晚行情整体又进行了一波几十个点的小反弹,震荡区间也稍微上移了一个阶段,且试探过前期压力转支撑的位置并确认有效,整体依然可以看作是区间大一些的震荡,但确实暂时缓解了进一步的下行风险.

1900/1/1 0:00:00
BSP:Defi为什么这么火?风险点又有哪些?

一、市场解读Defi今年很火,但火归火,炒归炒,我要问一句,为什么会这么火呢,背后的逻辑是什么?可能不见得有太多人说出个一二三来,很可能翻来覆去就一句话:兄弟,赚钱啊~数字货币诞生之初.

1900/1/1 0:00:00
DEX:去中心化交易所DEX:牛市的助推器?

要想推动牛市,DEX会扮演越来越重要的角色。虽然Compound、Maker以及Synthetix在目前DeFi的市值位居前列,但DEX有希望后来居上.

1900/1/1 0:00:00
POS:ETH 2.0 的通胀率有望下降至 1.58%

ETH 2.0 作为以太坊网络的重大升级,不仅共识协议由之前的 PoW 转换为 PoS,并且还有一个重大的改变,那就是 ETH 的全网通胀率.

1900/1/1 0:00:00
POOL:7.12午间行情:待资金入场再跟随比较稳妥

比特币在9470美金附近遇阻回落到了9126美金,这个回撤幅度不大,但速度很快,似乎是主力在震仓,在4小时MA83线获得支撑后,连带着有一次回踩动作,目前价格已经到了9250美金上方.

1900/1/1 0:00:00
BANK:LBCoin真容亮相预售 立陶宛央行将于23日正式发行数字收藏币

据悉,立陶宛央行立陶宛银行(The Bank of Lithuania)将于7月23日发行其基于区块链的数字收藏币LBCoin.

1900/1/1 0:00:00