回首Delegatecall漏洞下的Parity多重签名合约(回首过往是成语吗)

admin2年前签约新闻143

事件回顾:

2017年7月19日,Parity Multisig 电子钱包合约被爆出漏洞,攻击者从三个高安全的多重签名合约中窃取到超过15万以太坊(约3000万美元)。

首先我们先来简单了解一下Parity 钱包:

这个钱包的特点有几个:

第一个是它因为是重新写的代码,所以跑起来更快,占用系统的资源更少。

第二个特点是它的同步功能做得更好,所以其他钱包很久不能同步的的时候,它还是能够很快同步。

第三个特点,它虽然是一个全节点钱包,但是它把那些很早的区块只留下了区块头,其他内容删减了,所以同步好的区块的大小也就几个G,而如果是用以太坊的官方全节点钱包,光区块大概就得有40个G。

第四个特点,这个对ICO特别有用,就是它能够设置定时发送交易,能够在到达某个区块数的时候自动发送转账交易。

这个钱包不好的地方在于它对发送代币的支持不太好。不过这个问题可以通过把它的地址导入 imToken 来实现代币的方便发送。

二、漏洞缘由:

delegatecall的含义:

.delegatecall(...) returns (bool):issue low-level DELEGATECALL, returns false on failure, forwards all available gas, adjustable。 call与delegatecall的功能类似,区别仅在于后者仅使用给定地址的代码,其它信息则使用当前合约(如存储,余额等等),函数的设计目的是为了使用存储在另一个合约的库代码。

所以开发者在提供这样的库时,就要如何安排存储来达到这样的目的。

注意delegatecall是危险函数,他可以完全操作当前合约的状态。

黑客通过 delegatecall 调用 initWallet 函数, initWallet 没有检查以防止攻击者在合同初始化后调用到 initMultiowned ,可以将Parity Wallet库合约变为常规多sig钱包并成为它的所有者。意思就是漏洞使得黑客能通过 library 库函数,让自己成为多个 Parity 钱包的新主人,然后调用转账函数把钱转走。

访问控制问题在所有程序中都很常见,而不仅仅是智能合约。

事实上,人们经常通过其公共或外部功能访问合约的功能。

尽管不安全的可视性设置会给攻击者直接访问合约的私有价值或逻辑的方式,但访问控制旁路有时更加微妙。

这些漏洞可能发生在合约使用已弃用tx.origin的验证调用者时,长时间处理大型授权逻辑require并delegatecall在代理库或代理合约中鲁莽使用。

三、具体分析:

1、 initWallet 函数可以改变合约的 owner 。

2、 代码里使用了 delegatecall() 函数,导致所有 public 函数对所有人可见。包括 initWallet 函数。而且 initWallet 函数也没有作任何防护措施。

3、 攻击者先获取owner权限,将调用函数的指令放在Data中。

4、 然后执行execute获取所有 funds:

四、防范方法

1、谨慎使用 delegatecall() 函数。

2、明确函数可见性,默认情况下为public类型,为防止外部调用函数被内部调用应使用 external。

3、加强权限控制。敏感函数应设置 onlyOwner 等修饰器。

相关文章

对比e签宝、法大大、契约锁、上上签价格,盘点哪个性价比高?(e签宝价格)

本篇为电子签名SaaS选型指南(9) 同类SaaS产品对比的重要评估因素包括公司实力、市场份额、产品评价、产品性价比等,同类产品的对比可以帮助用户选择合适的SaaS产品。...

电子签约是如何实现的?电子签约系统有哪些优势?(电子签约有效吗)

电子签约是如何实现的?电子签约系统有哪些优势? 目前,电子签约在企业管理中被用的几率越来越高,随着合同管理、电子签名和合同保障的逐渐完善,很多企业感受到了电子信息时代给他们带来的高工...

庆贺三彩家与伯乐集团商业物业数字化升级顺利签约(三彩家董事长是谁)

9月28日,三彩家有限公司与伯乐集团数字化物业项目签约仪式在西安伯乐集团总部举行。三彩家有限公司董事长兼CEO文宁、副总裁费欣伟、CMO唐思琪、物业SaaS总经理武鹏以及伯乐集团董事长吴杰、...

苹果企业签名的流程和优点(苹果企业签名有什么用)

苹果企业签名的流程和优点(苹果企业签名有什么用)

苹果企业签名是一项用于在企业级 iOS 应用程序中分发和安装应用程序的技术。通过苹果企业签名,企业可以将其自己开发或私有的应用程序分发给其员工、合作伙伴或客户,而无需通过 App Store...

签署电子合同,如何进行实名认证(电子合同怎么电子签名)

签署电子合同,如何进行实名认证(电子合同怎么电子签名)

纸质合同签署过程中,企业常常因无法核实签署人身份以及印章真假,导致出现冒签、伪造、萝卜章的风险,引发法律纠纷。因此,签署主体认证对于合同签署来说是非常重要的,而电子合同签署方式有效...

好消息!社保费上省ETS系统啦!(ets社保费为什么从个人银行卡扣)

好消息!社保费上省ETS系统啦!(ets社保费为什么从个人银行卡扣)

新增 新增两种社保费扣费三方协议签约方式: 增 电子税务局网签授权划缴税(费)款协议 增 微信公众号网签授权划缴税(费)款协议 一 电...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。