首页 > 热点新闻 > SharkTeam:Move语言安全性分析及合约审计要点之函数恶意初始化
SharkTeam:Move语言安全性分析及合约审计要点之函数恶意初始化
广告 广告
摘要:2021年8月10日,去中心化年金协议Punk Protocol遭遇黑客攻击,造成890万美元损失

SharkTeam在此前的“十大智能合约安全性威胁”系列课程中,依据历史时间所发生的智能合约安全事件,梳理总结在智能合约领域里出现比较多、危害最大的一个前10大漏洞。这种漏洞以前一般出现在了Solidity智能合约中,那对于Move智能合约而言,是否会存有同样的危害呢? 

SharkTeam【Move语言安全性分析及合同财务审计关键点】系列课程将带大家逐渐深层次,基本内容管理权限漏洞、再入漏洞、逻辑性校检漏洞、函数公式故意复位、返回进攻、控制预言机、合同更新漏洞、三明治进攻、中间人攻击、提议进攻。此章具体内容【函数公式故意复位】。

1.Solidity合同复位

在Solidity智能合约中,完成合同的复位主要有两种方式:

(1)对象方法,即便用constructor完成对合同的复位。

对象会到合同布署后自动完成,不用额外独立启用,节约一笔买卖费用。

对象和合同布署关联,只有对关联布署的合同开展复位,针对单独合同的现象,有非常大的优点;针对好几个合同协同部署和复位,对象的形式就欠缺协调能力,乃至,在一些特殊场景下也会产生不正确或漏洞,例如根据代理可更新合同。在根据代理可更新合同中,逻辑性合同应用对象复位初始条件,只有复位逻辑性合同里的初始条件,针对代理商合同里的全局性初始条件失效,由于根据代理商合同浏览的初始条件实际上是代理商合同里的初始条件。

(2)自定复位函数公式方法,即自定initialize函数对合同开展复位。

应用自定复位函数公式initialize完成合同复位,必须在合同布署结束后独立进行一笔买卖来启用initialize函数。复位函数是对全局性状态下的第一次设定,务必需要由指定账户启用实行,而且实行复位一次。但initialize函数和普通的函数公式从未有过不同之处,并无法像constructor一样只有实行一次,而且在布署合同时实行。因而,initialize函数需要一些额外限定才能保证其安全系数。假如initialize函数能够数次启用,则有可能存有漏洞,乃至威胁到数字货币安全性,例如Punk Protocol安全事件。

2.Punk Protocol安全事件

2021年8月10日,区块链技术分红保险协议书 Punk Protocol遭受黑客入侵,导致 890 万美金损害,之后精英团队又找回 495 万美金。进攻主要原因是投资建议上存在比较严重漏洞, CompoundModel 编码中缺乏复位函数的修饰符问题,能够被反复复位。

 

3.Move合同复位

Move生态项目仍是Solidity绿色生态中的这些种类,包含货币、NFT、DEX等,投资模型同样,仅仅达到的知识是Move。因而,Move合同更加需要复位函数公式,复位合同全局性自变量,特别是网络资源。Move合同并没有对象,而是要自定复位函数公式,类似Solidity中自定复位函数公式。

从安全性角度考虑,Solidity合同复位函数公式必须要有调用者和启用频次限制。Move合同复位更加需要这种限定,例如新创建一种AToken:

 

在其中的cntialize是复位函数公式,必须在合同布署后启用,由于该函数的可视性申明为public(script),因而也可以用cmd启用。该复位函数中依次启用了Token中的register_token函数及其Account中的deposit_to_self函数。

(1)Token::register_token函数

 

该函数公式完成了AToken的申请注册,其精密度为9,并将AToken的锻造和消毁管理权限给与account。

留意到编码标明的assert句子,该肯定应该是进行启用账户account的校检,一定要AToken的详细地址,即合同布署者详细地址。这类似Solidity中复位函数的调用者管理权限校检(如onlyOwner查验)。要是没有这一条句子,任意一个帐户都能够对AToken开展复位从而得到锻造和清理的管理权限,这会导致AToken的最大权限泄漏,该货币将也会变得一文不值。

另一方面,确保复位函数公式仅会被启用一次,Move语言存储资源的唯一性就可以确保这一点。

 

在register_token函数规范和标准中,也有对锻造水平、消毁能力及货币信息内容3存储资源检查,即确保在函数公式实行前这3种网络资源不会有,在函数公式实行结束后这3种才也会存在。资源唯一性确保了这一函数公式很容易被实行一次。这一点比Solidity要安全性,终究Solidity合同必须额外限定,如应用Openzeppelin里的Initializer。

(2)Account::deposit_to_self函数

 

该函数公式将AToken导入到account账户Balance中,其信用额度为0。在标准中理解了必备条件,包含account账户Balance里没有AToken。那应该确保了这一函数公式很容易被实行一次。

这儿并没对account的管理权限做校检,由于一切帐户都应得到许可将AToken导入到其Balance中。

4.汇总

启用之上2个函数公式实现了AToken的复位。从全部复位环节中,我们不难发现,Move的复位函数公式一样规定:

(1)只有指定有权限帐户才可以启用,例如这儿的货币详细地址,同时又是货币合同布署详细地址

(2)复位函数公式很容易被启用一次。Move里的复位函数公式一般是对资源复位结构,资源唯一性及其Move规范化的应用要比Solidity方便快捷快速地确保做到这一点。这更为显出了Move语言的安全特性。

5.填补

合同布署及其复位全过程,如下所示:

(1)使用mpm release指令编译程序控制模块

 

(2)开启Admin帐户,随后使用dev deploy指令布署合同

 

(3)使用account execute-function指令启用initialize函数开展合同复位

 

(4)复位后Admin帐户详细信息

 

在balances中增强了AToken,其额度为0。

About Us

SharkTeam的企业愿景是全方位维护Web3全球的安全性。精英团队由来自全国各地的资深的安全性专业人员高级科学研究人员构成,熟练区块链和智能合约的最底层基础理论,提供专业的智能合约财务审计、链上剖析、应急处置等工作。已经与区块链生态体系每个领域的关键所在参加者,如Polkadot、Moonbeam、polygon、OKC、Huobi Global、imToken、ChainIDE等创建合作关系关联。

 

Twitter:https://twitter.com/sharkteamorg 

Discord:https://discord.gg/jGH9xXCjDZ  

Telegram:https://t.me/sharkteamorg 

大量区块链安全咨询和分析,点击进入连接查询

D查下|链上风险性审查https://m.chainaegis.com

转载:驼鸟区块链

免责声明:世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。