防黑客 区块链:如何保护好自己的数字货币?
安全是区块链的“地基”,但是在区块链的江湖里,有最优秀的创业精英,也有最优秀的骗子,基础的确并没有小白们想象的那么牢靠。提出安全隐患得有针对性的解决办法才算圆满,小编在采访众多老韭菜和老师之后,拿到了不少压箱底的干货建议,经过授权后拿出来发表,值得普通投资者拿小本本记下来:
【Binance黑客VIA事件】
2018年在 3 月 7 日深夜(北京时间),有不少用户发现自己币安账户中持有的各种各样的代币、数字货币被市价即时币币交易成了 BTC。据网友反馈,被盗的账号不在少数,不少人还以为是币安系统错误导致的,还试图从币安客服那里得到解释。当他们还没有反应过来的时候,黑客已经开始了他们有组织、有预谋的行动。
黑客启动了所有盗窃的账户的买卖引擎,买卖规则就是卖掉所有山寨币,用市场价全仓购买VIA。而恰好黑客手里持有大量VIA,这样就相当于高价购买了黑客手里的VIA。于是,VIA的K线出现了惊人的振幅:2分钟内爆拉了110倍。从交易量和拉升价格来看,有大约1000个BTC的买单,把VIA的价格从0.000225btc拉到0.025,价格上涨大约110倍。
但是黑客的行动触发了币安的预警系统,黑客没能直接提出高价卖出所得的比特币。于是他们转而以超低价格爆砸比特币现货的订单列表,引起其他交易所期货价格的连锁反应。于是黑客预先埋伏的巨量空单获得巨大收益。黑客的攻击,已经去中心化了。
移动支付的流行是由于阿里和腾讯在安全投入很多看不见的技术支撑一样,在区块链安全上挑战更大、情况更为复杂,目前数字货币及token是目前区块链最主要的应用场景之一,利益激励让目前的区块链成为利益告诉流通的新兴领域。
【数据溢出】
2018年4月22日中午(北京时间),BEC美蜜遭遇黑客的毁灭性攻击,天量BEC从两个地址转出,引发了市场抛售潮。当日,BEC的价值几乎归零。
以太坊区块数据显示,黑客利用以太坊 ERC-20 智能合约中数据溢出的漏洞,在攻击中凭空转出了57,896,044,618,658,100,000,000,000,000,000,000,000,000,000,000,000,000,000,000.792003956564819968 个 BEC。转出数量远远超过了BEC的发行总数70亿枚,市场顿时陷入疯狂抛售,BEC近65亿元人民币的市值也几乎瞬间归零。
而攻击成功的原因,是因为BEC的一段代码忘记使用safeMath方法,导致系统产生了整数溢出漏洞。据PeckShield 团队今日凌晨发布的安全报告,黑客利用 in-the-wild(一种从代码中抓取漏洞的手段)方法,从BEC的程序中抓取到了漏洞,并发动了攻击。利用这个漏洞,黑客可以通过转账的手段生成合约中不存在的代币, 并将这些无中生有的数字货币转入正常账户。这些凭空产生的代币在使用上与真实代币没有差别。
4月25日,SMT爆发了类似的漏洞问题。SMT的智能合约中proxyTransfer函数存在一个经典的整数溢出问题。_fee 和 _value_ 这两个输入参数都能被攻击者控制,如果 _fee + _value 的结果正好为 0(也就是溢出的情况),第206行的检查将会失效。
这意味着攻击者不需要任何Token,就可以向一个地址转入大量的Token(第214行);同时根据第217行的代码,相当数量的手续费也将发送给 msg.sender。
要理解数据溢出的漏洞,首先要理解任何类型的数值都已自己的表达范围,计算机中的整数分为两类:不带符号位的整数(unsigned integer,也称为无符号整数),此类整数一定是正整数;带符号位的整数(signed integer),此类整数可以表示正整数,又可以表示负整数。无符号整数常用于表示地址、索引等正整数,它们可以是8位、16位、32位、64位甚至更多。8个二进制表示的正整数其取值范围是0~255( -1),16位二进制位表示的正整数其取值范围是0~65535( -1),32位二进制位表示的正整数其取值范围是0~ -1。
一个short 型的数值能表示的数值的范围是:-32768~32767,有负数有正数,这种是有符号数的表达范围,无符号数的表达范围是0~65535。你会发现这2种情况下都有65536个数字,这是2的16次方,也就是说short类型的数字是16位比特位表示的。
那么当一种操作,使得操作结果最终超出了类型能够表达的范围,计算机会如何处理呢,如上图所示,65535加1之后变成了0,加2变成了1,这就是所谓的数值反转,所谓的溢出就是超出了数值的表达范围。BEC的数据类型不是无符号的short类型,而是换成了uint256,不管什么类型,但只要是固定长度都有其表达范围,
当cnt 与_value的乘法运算超出了uint256的表达范围,那么amount得到值会远远小于预期的值,就像上面的例子中65535这么大的数字加上1结果变成了0.那么当amount的数值很小,但是cnt和_value很大的时候,签名红色箭头表示的检查就会全部通过,但是,最后转账的时候,不是使用的amount,而是使用的_value,于是造成了可以让黑客攻击的数据溢出漏洞。
如果没有“区块链安全”为交易所、智能合约、数字钱包做好维护的话,区块链美好的数字世界生态图景都将是空中楼阁,区块链安全也是一件不可能有终结的工作,这将是未来新的“道魔较量”!
那么,很多人都很担心,既然区块链存在安全隐患,我们该怎么保护好自己的数字货币呢?
区块链黑客:如何保护好自己的数字货币?干货给大家:
1、平时用户养成良好的使用习惯,多留个心眼,比如选择主流交易平台,从官方渠道下载钱包客户端;备份好自己的钱包文件;设置复杂的密码;在不同的平台使用不同的登录口令;谨慎下载论坛、社群里的文件,不要点击来路不明的链接防止钓鱼软件中招;钱包地址尤其是私钥绝对保密,在访问平台时,反复确认域名以防止进入山寨网站;尽量在私人的局域网和自己电脑或手机设备上网操作,杀毒软件定期清理和更新必不可少等等。
2、个人数字钱包的“私钥”绝对不能外泄,“公钥”是收款地址,就好比自己的门牌号码,而私钥/助记词/keystore等相当于自家的“钥匙”,这三类中任何一项均不要随便泄露给别人,最好是能够离线保存或保存在加密本地存储硬盘或U盘里。
3、市面大多数加密货币钱包是中心化钱包,一旦发生意外,用户资产丢失后难以追回;对于投资者而言,倘若持有大量的数字资产,更适合选用“去中心化钱包”,毕竟大量的资产由自己掌握才最放心。而对于短期的小额投资者而言,中心化的钱包的优势在于,使用体验更加便捷,不过分批存放入不同的钱包更稳。
4、数字货币投资者在转账时要反复确认转币对象和地址,因为钱包地址一般一串很长的字符,最好直接复制,并核对一遍;因而交易是不可逆的,一旦打过去就是别人的了。注意不要因为一些“更低的手续费”、“更多的额度”等承诺而绕过平台担保,进行私下点对点交易,一旦发生很难追回。
5、普通比特币持有者账户可以“币托”服务实现权益转移,当交易所发生不可抗力因素用户失去控制账户能力情况下,可通过“币托”来实现与权益人(家人、朋友等)共同管理账户,实现账户权益的传承。
网友评论