编辑:铅笔盒
据EOS.CYBEX孵化项目链安科技消息,其研发的面向区块链形式化验证平台VaaS发现,如果合约开发者不够仔细,则基于EOS区块链的代币合约也同样可能存在BEC代币合约类似的整数溢出漏洞。
眼下Beauty Chain 美蜜/BEC代币被盗事件,由于一行代码的安全漏洞引发其市值一夜归零。该漏洞,由于合约开发者经验不足导致合约代码中的bathTransfer函数出现了整型溢出的漏洞,使黑客利用该漏洞盗走
57,896,044,618,658,100,000,000,000,000,000,000,000,000,000,000,000,000,000,000.792003956564819968 个BEC代币。
针对此漏洞,成都链安科技通过其研发的VaaS形式化验证平台对EOS区块链平台的智能合约进行了整型溢出漏洞检查和安全验证,发现基于EOS平台开发类似智能合约同样可能出现整型溢出漏洞。下面以EOS代币合约为例对该类型漏洞进行描述,该实例中设计并实现了一个向多人转账的智能合约核心函数transfer,其源代码如图1所示:
图1 transfer函数源码,同时向4个人转账
假设攻击者调用该合约的transfer函数同时向4个人进行转账操作,并将balance参数的值设为2的63次方,函数调用过程如图2所示,
图2 黑客调用transfer函数同时向4人转账
接着,查询以上地址余额可发现,被转账人(tester)的余额(100)没有减少,而接收者(tester1、tester2、tester3、tester4)的账户余额由于amount变量的溢出产生了非常大的数目(2的63次方),如图3所示,
漏洞分析:balance是uint64数据类型,当取值为2的63次方时,由于小于uint64可取值的最大值,于是绕过了对balance的溢出边界检查;但是,当amount=balance*4计算时,amount便发生了溢出,使其值等于0,由于amount此时绕过了被减数大于减数的检查,从而实现不消耗被转账人的balance的情况下,让转账人的balance获取非常大的值(2的63此方)。
为此,成都链安科技提示基于EOS的智能合约开发者,在开发智能合约的时候,应警觉整数溢出漏洞可能带来的严重后果,对于每一步运算操作均进行边界检查。
针对此类问题,我们提出如下四种解决方案:
1. 在智能合约部署前,通过VaaS平台进行安全性和功能正确性的形式化验证,事先预防这类问题的发生;目前VaaS平台已经支持以太坊,EOS,Fabric等主流区块链平台智能合约的形式化验证,提供了高度自动化的智能合约漏洞检查,安全性、功能正确性的形式化验证。
2. 我们正在针对EOS,以太坊等平台开发安全的智能合约开发模板,规范智能合约的开发,提高合约安全性,同时降低合约开发门槛和难度;
3. 向社区提供经过VaaS平台验证的合约核心模块,用户通过调用这些模块开发自己的智能合约,以减少合约安全漏洞和逻辑漏洞的发生。如,我们正在基于EOS开发经过VaaS平台形式化验证的安全运算模块(如类似太坊SafeMath模块),以防止运算中导致的溢出和零除等漏洞。后续,我们将继续为EOS、以太坊等多个社区开发更多的合约功能模块,供合约开发者使用。
4. 建议合约开发者使用EOS区块链平台提供的智能合约编程Math
API接口则可防止该类型溢出漏洞。如,合约开发者可将uint类型的数据,先转换成doule类型的数据,然后再使用EOS区块链平台提供的Math API中的double_add、double_mult等函数进行运算,最后将计算结果再转换成uint类型数据输出。通过我们的实验和测试,发现该函数在进行大数相乘出现溢出的时候,会返回较大的值,无溢出出现,于是可以有效避免上述整型溢出的漏洞。但是VaaS同时也检测出,Math API接口没有对负数情况进行检查,如果double运算的结果为负数,在将其强制转换成uint类型时,将同时返回一个错误的较大的数值,针对此问题开发者需谨慎使用。
VaaS平台将为建立安全的EOS社区不断贡献自己的力量。
欢迎大家关注我们的微信公众号,或者给我们发邮件:
vaas@lianantech.com
本文仅代表作者个人观点,不代表区块链铅笔的立场,不构成投资建议,内容仅供参考。
3分钟了解什么是区块链?(中文动画)|(英文动画教程)
3分钟了解比特币挖矿和区块链共识机制?(中文动画)|(英文动画教程)
关注本公众号后,进入公众号
回复关键词可以查阅资料,以下是部分关键词
回复 WEF ,查看《WEF:世界经济论坛认为区块链是互联网金融行业的未来报告》
回复 智能合约 ,查看《巴克莱银行报告》
回复 moody ,查看《穆迪120个区块链项目报告》
回复 SWIFT ,查看SWIFT《区块链对证券交易全流程产生的影响及潜力》报告
回复 论文11 ,查看论文《可扩展的去中心区块链》
回复 埃森哲2 ,查看埃森哲《区块链每年可以为投资银行节省120亿美元》报告
回复 联合国报告 ,查看联合国报告《数字货币和区块链技术在构建社会和可信金融之间扮演的角色》
回复 用户特性 ,查看普林斯顿大学首本比特币教科书初稿《比特币用户的特性(Characteristics of Bitcoin Users)》
回复 普林斯顿 ,查看普林斯顿大学首本比特币教科书初稿《比特币和数字货币技术(Bitcoin and Cryptocurrency Technologies)》
回复 IMF,查看国际货币基金组织报告《Virtual Currencies and Beyond: Initial Considerations》
回复 DTCC ,查看美国存管信托清算公司报告《DTCC: 拥抱分布式》
回复 广发 ,查看报告《科技前沿报告:区块链:正快速走进公众和政策视野》
回复 川财1 ,查看报告《川财证券:区块链技术调研报告之一:具有颠覆所有行业的可能性》
回复 川财2 ,查看报告《川财证券:区块链技术调研报告之二:区块链技术进化论-区块链技术的国内实践和展望》
回复 桑坦德 ,查看桑坦德银行报告《The Fintech 2.0 Paper: rebooting financial services》
回复 拜占庭 ,查看《拜占庭将军问题详解》
回复 论文1 ,查看论文《比特币闪电网络:可扩展的离线即时支付》
回复 论文2 ,查看论文《比特币骨干协议》
回复 论文3 ,查看论文《数字货币是否应该进入Barbados央行国际储备货币组合中》
回复 帮助 ,查看本公众号全部关键词列表