虚拟币钱包平台安全防护解决方案

匆匆过客 提交于 2019-12-18 14:28:36

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

区块链是目前比较火热的话题,纵身而出的虚拟币也越来越多,比特币,以太坊,瑞波币,莱特币,狗狗币,门罗币都是基于区块链而生的虚拟货币,在监管以及匿名,安全方面受到众多人的喜欢,很多虚拟币交易平台,以及交易所网站也越来越多,国内像火币网,币安,比特儿,币行网,可赢可乐都是目前较火的交易所。

目前我们SINE安全在对虚拟货币进行安全检测以及安全分析,关于2018年以太坊被爆出的合约漏洞,我们来详细的跟大家介绍一下,首先查看之前的以太坊代码,对其仔细的人工检查发现该以太坊漏洞主要是程序员在设计代码的时候,对合约安全进行判断出了差错,导致攻击者利用绕过判断进行攻击。

我们看下合约代码:截图如下

从上面的合约代码看出,代码的主要功能是对转币的函数,以及虚拟币账户的余额,用户授权操作,以及提币操作函数的,在整个代码中使用判断来进行约束以太坊币的交易状态,从第188行里还看到使用了一些场外交易中的外币功能,使用该函数可以将外币统一起来提币到钱包地址进行转账操作。那漏洞是怎样发生的呢?该如何安全防范?我们接下来继续讲:

上面提到的函数是用户在转币的过程中,对传入的参数值没有进行金额的大小限制,不管多少金额都可以转到用户的钱包中去,如果转币的金额达到5以上就会自动的对虚拟币金额进行设置,有一套以太坊自己的算法,将自身钱包余额加上这个金额就等于目前钱包的所有金额,漏洞的发生也在这里。

转账使用的是token机制,每个用户的token值都不一样,我们侧重的看下转账功能函数,由于转账函数处理算法中出现安全问题才导致了漏洞的发生。看如下图:

上面的图片代码主要功能是转账,转币,我们看下代码里写的判断条件,当转币人自身的金额大于转币的金额的时候,参数值会为1,并有个附加条件就是要满足这个balances的值为0.能满足这个条件的只有溢出参数了。我们来测试看下图:

达到这个条件就是 转币人的余额要小于转币的金额。每次转币都会导致账户多出很多币来,针对于这种以太坊漏洞合约的程序员真应该好好的检查反省自己的代码逻辑判断问题,由于判断条件写的太过于疏忽才导致该虚拟币漏洞的发生,很容易被攻击者用来入侵,转币等危险的操作。

关于虚拟币交易平台安全防护方面,建议程序员在设计代码过程中,多次的测试,在上线之前找专业的网站安全公司进行安全渗透测试,对漏洞测试,漏洞挖掘,多层面的找漏洞,直到没问题,再投入到平台当中去,使整个虚拟货币更加的安全规范化,国内也就SINE安全,绿盟,启明星辰等安全公司比较专业一些。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!