区块链:区块链安全入门笔记(七)

随着越来越的人参与到区块链这个行业中来,为行业注入新活力的同时也由于相关知识的薄弱以及安全意识的匮乏,给了攻击者更多的可乘之机。面对频频爆发的安全事件,慢雾特推出区块链安全入门笔记系列,向大家介绍区块链安全相关名词,让新手们更快适应区块链危机四伏的安全攻防世界!系列回顾:区块链安全入门笔记(二)|慢雾科普区块链安全入门笔记(三)|慢雾科普区块链安全入门笔记(四)|慢雾科普区块链安全入门笔记(五)|慢雾科普区块链安全入门笔记(六)|慢雾科普hard_fail状态攻击hard_failAttack

hard_fail是什么呢?简单来说就是出现错误但是没有使用错误处理器(errorhandler)处理错误,比方说使用onerror捕获处理,如果说没有onerror捕获,就会hard_fail。EOS上的交易状态记录分为executed,soft_fail,hard_fail,delayed和expired这5种状态,通常在链上大部分人观察到的交易,都是executed的,或者delayed的,而没有失败的交易,这就导致大部分开发者误以为EOS链上没有失败的交易记录,从而忽略了对交易状态的检查。攻击者利用这个细节,针对链上游戏或交易所进行攻击,构造执行状态为hard_fail的交易,链上游戏或交易所进行假充值攻击,从而获利。该攻击手法最早由慢雾安全团队于2019年3月10日一款EOSDApp上捕获,帐号名为fortherest12的攻击者通过hard_fail状态攻击手法攻击了EOS游戏Vegastown。随后,相同攻击手法频频发生,慢雾安全团队在此提醒交易所和EOSDApp游戏开发者在处理转账交易的时候需要严格校验交易状态,确保交易执行状态为executed。详细细节可参考:EOS假充值(hard_fail状态攻击)红色预警细节披露与修复方案重放攻击ReplayAttack重放攻击(ReplayAttack),是针对区块链上的交易信息进行重放,一般来说,区块链为了保证不可篡改和防止双花攻击的发生,会对交易进行各种验证,包括交易的时间戳,nonce,交易id等,但是随着各种去中心化交易所的兴起,在智能合约中验证用户交易的场景越来越多。这种场景一般是需要用户对某一条消息进行签名后上传给智能合约,然后在合约内部进行验签。但由于用户的签名信息是会上链的,也就是说每个人都能拿到用户的签名信息,当在合约中校验用户签名的时候,如果被签名的消息不存在随着交易次数变化的变量,如时间戳,nonce等,攻击者就可以拿着用户的签名,伪造用户发起交易,从而获利。这是一种最早出现于DApp生态初期的攻击形态,由于开发者设计的开奖随机算法存在严重缺陷,使得攻击者可利用合约漏洞重复开奖,属于开发者较为容易忽略的错误。因此,开发者们在链上进行验签操作的时候,需要对被签名消息加上各种可变因子,防止攻击者对链上签名进行重放,造成资产损失。更多详情可参考:以太坊智能合约重放攻击细节剖析重入攻击ReentrancyAttack

重入攻击(ReentrancyAttack)首次出现于以太坊,对应的真实攻击为TheDAO攻击,此次攻击还导致了原来的以太坊分叉成以太经典(ETC)和现在的以太坊(ETH)。由于项目方采用的转账模型为先给用户发送转账然后才对用户的余额状态进行修改,导致恶意用户可以构造恶意合约,在接受转账的同时再次调用项目方的转账函数。利用这样的方法,导致用户的余额状态一直没有被改变,却能一直提取项目方资金,最终导致项目方资金被耗光。慢雾安全团队在此提醒智能合约开发者在进行智能合约开发时,在处理转账等关键操作的时候,如果智能合约中存储了用户的资金状态,要先对资金状态进行修改,然后再进行实际的资金转账,避免重入攻击。假充值攻击FalseTop-up

假充值攻击(FalseTop-up),分为针对智能合约的假充值攻击和对交易所的假充值攻击。在假充值攻击中,无论是智能合约还是交易所本身,都没有收到真实的Token,但是用户又确实得到了真实的充值记录,在这种情况下,用户就可以在没有真正充值的情况下从智能合约或交易所中用假资产或不存在的资产窃取真实资产。1.智能合约假充值攻击

针对智能合约的假充值主要是假币的假充值,这种攻击手法多发于EOS和波场上,由于EOS上代币都是采用合约的方式进行发行的,EOS链的系统代币同样也是使用这种方式发行,同时,任何人也可以发行名为EOS的代币。只是发行的合约帐号不一样,系统代币的发行合约为"eosio.token",而其他人发行的代币来源于其他合约帐号。当合约内没有校验EOS代币的来源合约的时候,攻击者就能通过充值攻击者自己发布的EOS代币,对合约进行假充值攻击。而波场上的假充值攻击主要是TRC10代币的假充值攻击,由于每一个TRC10都有一个特定的tokenid进行识别,当合约内没有对tokenid进行校验的时候,任何人都可以以1024个TRX发行一个TRC10代币对合约进行假充值。2.交易所假充值攻击

针对交易所的假充值攻击分为假币攻击和交易状态失败的假充值攻击。以EOS和以太坊为例。针对EOS可以使用名为EOS的假币的方式对交易所进行假充值攻击,如果交易所没有严格校验EOS的来源合约为"eosio.token",攻击就会发生。同时,区别于EOS,由于以太坊上会保留交易失败的记录,针对ERC20Token,如果交易所没有校验交易的状态,就能通过失败的交易对交易所进行ERC20假充值。除此之外,hard_fail状态攻击也是属于假充值攻击的一种。慢雾安全团队在此建议交易所和智能合约开发者在处理转账的时候要充分校验交易的状态,如果是EOS或波场上的交易,在处理充值时还要同时校验来源合约是否是"eosio.token"或tokenid是否为指定的tokenid。更多几大币种假充值问题可参考:1、USDT假充值:USDT虚假转账安全?险分析|2345新科技研究院区块链实验室2、以太坊代币假充值:以太坊代币“假充值”漏洞细节披露及修复方案3、XRP假充值:PartialPayments-XRPLedgerDevPortal4、EOS假充值:EOS假充值(hard_fail状态攻击)红色预警细节披露与修复方案

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

链链资讯

[0:0ms0-6:919ms