随着越来越的人参与到区块链这个行业中来,为行业注入新活力的同时也由于相关知识的薄弱以及安全意识的匮乏,给了攻击者更多的可乘之机。面对频频爆发的安全事件,慢雾特推出区块链安全入门笔记系列,向大家介绍区块链安全相关名词,让新手们更快适应区块链危机四伏的安全攻防世界!
系列回顾:
区块链安全入门笔记(一) | 慢雾科普
区块链安全入门笔记(二) | 慢雾科普
区块链安全入门笔记(三) | 慢雾科普
区块链安全入门笔记(四) | 慢雾科普
区块链安全入门笔记(五) | 慢雾科普
智能合约 Smart Contract
智能合约(Smart Contract)并不是一个新的概念,早在 1995 年就由跨领域法律学者 Nick Szabo 提出:智能合约是一套以数字形式定义的承诺(Promises),包括合约参与方可以在上面执行这些承诺的协议。在区块链领域中,智能合约本质可以说是一段运行在区块链网络中的代码,它以计算机指令的方式实现了传统合约的自动化处理,完成用户所赋予的业务逻辑。随着区块链智能合约数量的与日俱增,随之暴露出来的安全问题也越来越多,攻击者常能利用漏洞入侵系统对智能合约用户造成巨大损失,据 SlowMist Hacked 统计,截止目前仅 ETH、EOS、TRON 三条链上因智能合约被攻击而导致的损失就高达 $126,883,725.92,具有相同攻击特征的手法更是呈现出多次得手且跨公链的趋势,接下来我们将为大家介绍近年来一些常见的智能合约攻击手法。
交易回滚攻击 Roll Back Attack
交易回滚攻击(Roll Back Attack),故名思义,指的是能对交易的状态进行回滚。回滚具体是什么意思呢?回滚具体指的是将已经发生的状态恢复成它未发生时候的样子。那么,交易回滚的意思就是将已经发生的交易变成未发生的状态。即攻击者本来已经发生了支付动作,但是通过某些手段,让转账流程发生错误,从而回滚整个交易流程,达到交易回滚的目的,这种攻击手法多发于区块链上的的智能合约游戏当中,当用户的下注动作和合约的开奖动作在一个交易内的时候,即内联交易。攻击者就可以通过交易发生时检测智能合约的某些状态,获知开奖信息,根据开奖信息选择是否对下注交易进行回滚。该攻击手法早期常用于 EOS DApp 上,后逐步向波场等其他公链蔓延,截止目前,已有 12 个 DApp 遭遇攻击,慢雾安全团队建议开发者们不要将用户的下注与开奖放在同一个交易内,防止攻击者通过检测智能合约中的开奖状态实现交易回滚攻击。
交易排挤攻击 Transaction Congestion Attack
交易排挤攻击(Transaction Congestion Attack)是针对 EOS 上的使用 defer 进行开奖的游戏合约的一种攻击手法,攻击者可以通过某些手段,在游戏合约的 defer 开奖交易前发送大量的 defer 交易,恶意侵占区块内的 CPU 资源,使得智能合约内本应在指定区块内执行的 defer 开奖交易因资源不足无法执行,只能去到下一个区块才执行。由于很多 EOS 上的游戏智能合约使用区块信息作为智能合约本身的随机数,同一个 defer 开奖交易在不同区块内的执行结果是不一样的。通过这样的方式,攻击者在获知无法中奖的时候,就通过发送大量的 defer 交易,强行让智能合约重新开奖,从而达到攻击目的。该攻击手法最早在黑客 loveforlover 向 EOS.WIN 发起攻击时被发现,随后相同的攻击手法多次得手,据 SlowMist Hacked 统计仅 2019 年就有 22 个竞猜类 DApp 因此损失了大量资金,慢雾安全团队建议智能合约开发者对在不同区块内执行结果不同的关键的操作不要采用 defer 交易的方式,降低合约被攻击的风险。
随机数攻击 Random Number Attack
随机数攻击(Random Number Attack),就是针对智能合约的随机数生成算法进行攻击,预测智能合约的随机数。目前区块链上很多游戏都是采用的链上信息(如区块时间,未来区块哈希等)作为游戏合约的随机数源,也称随机数种子。使用这种随机数种子生成的随机数被称为伪随机数。伪随机数不是真的随机数,存在被预测的可能。当使用可被预测的随机数种子生成随机数的时候,一旦随机数生成的算法被攻击者猜测到或通过逆向等其他方式拿到,攻击者就可以根据随机数的生成算法预测游戏即将出现的随机数,实现随机数预测,达到攻击目的。2018 年 11 月 11 日,攻击者向 EOS.WIN 发起连续随机数攻击,共获利 20,000 枚 EOS,在此慢雾安全团队建议智能合约开发者使用安全的随机数源作为合约随机数,如通过使用链下的随机数种子生成随机数的方式上传至链上,降低合约被攻击的风险。