DoS on CKB

问题

CKB 使用了UTXO模型,这意味着Cell验证失败之后手续费会退给原本地址。那么恶意攻击者可以构造一个Type Script, cycle 数量接近 cycle_limit , 并且最后运行失败。 恶意攻击者可以大量发送包含该Type Script的交易来堵死网络,并且这种攻击成本比较低。请问ckb里这种攻击方法怎么防范呢

4 Likes

Script 运行失败,那么该交易会被标记为非法交易;正常节点会将传播非法交易的节点列入黑名单,不再与黑名单的节点连接通信。以这种方式保护网络,避免污染扩散。

当然攻击者可以变换着 ip 来发起攻击,那 ip 本身就是个不小的攻击成本。

1 Like

如果ipv6逐步变多,攻击成本就会降低很多

这是个好问题,基本思路正确,只是实际情况要更为复杂。

首先要注意到P2P网络层的一些细节和全节点的作用。如 @keroro520 所描述的,失败的交易是不会被 full node 转发的,因此要瘫痪整个网络,需要同时连接网络中大部分节点并发起攻击才行。在提交一次无效交易后,攻击节点的链接会被断开,想要重新连接攻击过的节点,要么等待一段时间,要么换IP,而无论是节点接受的inbound链接数量还是ip都是一种有限的资源。断开之后重联这段时间内inbound链接数可能会被占用完。如果持续更换ip, 攻击者需要持续占用大量的ip才行。所以这种攻击的成本并不低。

假设攻击者确实拥有大量的ip。想要使得网络的交易处理停滞,必须用无效交易占用所有全节点的所有链接,这是非常难(如果不是不可能)做到的。如果只能占用部分全节点的部分链接,正常交易依然会被处理,只是网络处理交易的速度(tps)可能会受到一些影响。节点的交易池也有自己的limit参数设置。这些参数是经过精心选择的,保证了即使交易池被接近cycle_limit的交易占满,所需要的处理能力也不会影响其他功能。

这种有层次的防守在实践中被证明是有效的。Bitcoin 同样使用 UTXO,支持 script,也面临同样的攻击,整个网络安全运行至今。

再退一万步,假设真有这样一个特别强大的攻击者出现了,持续用无效交易占用了网络中大多数节点的交易池。此时关键服务的节点管理员可以整理出 invalid tx 的特征(与 Ethereum 交易不同,CKB 交易的确定性和显式依赖会有易于这些特征的确立),例如使用到的 input、特定的 script hash list 或是发起者ip,配置本地节点忽略具有这些特征的交易/链接,保证正常服务的进行。如果情况持续,可以开发更自动化的方法。例如一个最简单的方法是通过运维工具自动同步社区提供的 spam list,避免受到垃圾交易的干扰。每个节点可以自行选择是否要做这样的配置。

所以说,通过 P2P层防卫以及社区可以自发形成的弱共识,这样的攻击很难获得想要的结果。

5 Likes

确实DoS攻击很难长时间影响整个网络。协议设计上没有银弹,但能在实现上做进一层的保护。感谢jan的解答~