共识层
短距离攻击
主要影响POS机制。攻击示例如下:
- 攻击者购买某个商品或服务
- 商户开始等待网络确认这笔交易
- 此时,攻击者开始在网络中首次宣称,对目前相对最长的不包含这次交易的主链进行奖励
- 当主链足够长时,攻击者开始放出更大的奖励,奖励那些包含此次交易链条中挖矿的矿工
- 六次确认达成后,放弃奖励
- 货物到手,同时放弃攻击者选中的链条
- 只要此次贿赂攻击的成本小于货物或者服务费用,攻击成功
- 相比之下,POW机制中贿赂机制就需要贿赂大多数矿工,成本极高
长距离攻击
攻击依赖于POS中缺乏对算力的约束,此类攻击比较典型的是51%攻击,POW中达到51%的算力比较困难
币龄累积攻击
在最早的Peercoin中,挖矿难度不仅与当前账户余额有关,也与个人持币时间挂钩,部分节点在等待足够长的时间后,有能力利用持币时间的增加来控制整个网络。
预计算攻击
针对POS机制。当POS中某一节点占有了一定量的算力后,就有能力控制Hprev来使自己所在算力范围内有能力计算Hnext
女巫攻击
对等网络基础
- 对等网络上的实体是能够访问本地资源的一块软件,实体通过身份在网络上通告自身
- 对等网络中身份到实体的映射是多对一的,为了冗余、资源共享、可靠性和完整性。
- 许多身份可以对应于相同的本地实体
攻击案例
攻击者通过创建大量的假名标识来破坏对等网络的信誉系统,使用它们获得不成比例的大的影响。如向对等网络呈现多个身份,以便出现并充当多个不同的节点,由此获得对网络不成比例的控制水平,例如影响投票结果
合约层
合约虚拟机
合约虚拟机运行在区块链的各个节点上,接收并部署来自节点的智能合约代码,若虚拟机存在漏洞或者相关的机制不完善,和可能遭受恶意攻击
逃逸漏洞
虚拟机在运行字节码时会提供一个沙盒环境,此类型漏洞会使攻击者退出沙盒环境,执行本不能执行的代码
逻辑漏洞
虚拟机在发现数据或代码不符合规范时,可能会对数据做一些“容错处理”,可能导致出现逻辑问题,如“以太坊短地址攻击”
堆栈溢出漏洞
攻击者可以通过编写恶意代码让虚拟机解释执行,最终导致栈的深度超过虚拟机允许的最大深度,或不断占用系统内存导致内存溢出。此种攻击可引发多种威胁,最严重的是造成命令执行漏洞
资源滥用漏洞
攻击者可以通过在虚拟机上部署恶意代码来消耗系统的网络、存储、计算和内存资源。虚拟机中必须要有防止资源滥用的机制,如以太坊中的'gas'
智能合约
智能合约本质上是一份代码程序,在智能合约应用前,做到以下几点
- 拥有100%测试覆盖率的完整测试套件
- 在自己的测试网上部署
- 在公告测试网上部署大量测试和错误奖励
- 允许各种玩家与合约进行大规模互动
- 在主网上部署测试版以限制风险总额
可重入攻击
当智能合约A调用智能合约B时,智能合约B可以在被调用的函数中写入“使A调用B的代码”(回调),造成可重入攻击:
- 智能合约A向B发起提现请求
- B向A转账,并使用A的回调函数
- A的回调函数操作为“A向B发起提现请求”
- 循环以上步骤直到不满足循环条件
- 提现结束
调用深度攻击
合约虚拟机中,会对智能合约的互相调用的深度设定阀值,超过这个深度会调用失败。攻击者可以通过控制调用深度,来使某些操作无法进行,如转账、余额清零等
交易顺序依赖攻击
智能合约的执行会随着当前交易的处理顺序不同而产生不同的结果。
- 攻击者发布一个解题合约,在合约中给出丰厚的奖励
- 等有人提交正确答案后,攻击者提交一个将奖励额度调低的交易,并将交易费(如gas)值设高
- 验证节点会先执行这笔交易,最终导致答题者奖励降低,攻击者以一个较低的成本买到了正确答案
时间戳依赖攻击
如果智能合约在敏感操作中依赖时间戳,可能会导致执行结果被预测。如:发布一个抽奖合约,抽奖结果由当前区块的时间戳和其他因素组合而来。攻击者可以通过修改时间戳来计算结果
误操作异常攻击
当合约A调用合约B的操作的时候,B的执行可能会失败,退回到未执行前的状态。若A不检查B执行的结果继续往下执行,会导致误操作异常攻击。如:A调用B提现操作,A的余额增加,B的余额减少。如果没有检查B的返回值,可能会导致B的余额没有减少,A的余额却增加了
整数溢出攻击
合约中的整数会有受编程语言限制的最大最小值,在计算、转换等过程中可能会发生整数的上溢或下溢。典型案例:ERC20智能合约漏洞
文章评论