区块链常见漏洞万字总结【Web3从业者必备】
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
网络层
P2P
女巫攻击
- 严重性高
- 描述
攻击者可以通过将某个恶意节点伪装成多个虚拟节点创建大量假身份来攻击区块链系统。可造成 DoS 或 DDoS 等攻击。 - 建议
增加节点的最大连接数限制单个IP地址的主机数。 - 参考
利用分布式矿工行为监测防止区块链女巫攻击
日蚀攻击
-
严重性高
-
描述
攻击者切断了受害者与外界网络间的所有传入和传出的连接将受害者与网络中的其他节点隔离开来。 -
建议
增加节点的最大连接数限制单个IP地址的主机数。
窃听攻击
-
严重性低
-
描述
攻击者被动监听网络通信以窃取节点身份标识、路由表等敏感数据。攻击者可以利用这些信息来破坏网络中的节点或路由的可用性。 -
建议
使用加密协议例如 TLS加密通信。 -
参考
RLPx 传输协议
拒绝服务攻击
-
严重性中
-
描述
攻击者通过发送大量的请求使受害系统资源耗尽服务暂时中断或停止导致正常用户无法使用网络服务。 -
建议
- 增加不同区域的节点数量。
- 避免畸形数据导致软件崩溃。
- 限制内存大小。
BGP 劫持攻击
- 严重性低
- 描述
BGP 劫持有时称为前缀劫持、路由劫持或 IP 劫持是指通过一个自治系统错误宣称 IP 为其所有使得使用边界网关协议维护的互联网路由表的路由器错误地将用户发送的数据传送给非数据传送目的地。 - 建议
增加不同区域的节点数量。 - 参考
BGP 劫持
劫持比特币对加密货币的路由攻击
KlaySwap 加密用户在 BGP 劫持后损失资金
异形攻击
- 严重性低
- 描述
异形攻击漏洞最早由慢雾团队发现又称地址池污染是指诱使同类链的节点互相侵入和污染的一种攻击手法漏洞的主要原因是同类链系统在通信协议上没有对不同链的节点做识别。 - 建议
为P2P连接协议添加网络标识如以太坊中的 chain ID比特币中的 Magic。 - 参考
来自P2P协议的异攻击形漏洞的公链
时间劫持
- 严重性高
- 描述
时间劫持是比特币时间戳处理中的一个理论漏洞。攻击者在网络添加多个具有异常时间戳的虚假节点并强制其他节点接受替代区块链。 - 建议
通过限制可接受的时间范围或使用节点的系统时间来防止时间劫持攻击。
RPC
窃听攻击
- 严重性低
- 描述
攻击者被动监听网络通信以窃取节点身份标识、路由表等敏感数据。攻击者可以利用这些信息来破坏网络中的节点或路由的可用性。 - 建议
使用加密协议例如 HTTPS加密通信。
拒绝服务攻击
- 严重性中
- 描述
节点因接收到畸形格式参数请求而崩溃。 - 建议
- 防止格式错误的参数导致软件崩溃。
- 限制内存大小。
以太坊黑色情人节漏洞
- 严重性低
- 描述
以太坊黑色情人节漏洞最早由慢雾团队发现。当节点解锁其钱包时黑客可以通过远程 RPC 请求窃取加密货币。 - 建议
- 禁用 RPC 接口的外部请求。
- 禁用公共节点的钱包功能。
- 参考
以太坊生态发现的一起级代币盗窃大案
HTTP 输入攻击
- 严重性低
- 描述
包括XSS/模板注入/第三方组件漏洞/HTTP参数污染/SQL注入/XXE注入/反序列化漏洞/SSRF/代码注入/本地文件包含/远程文件包含/命令注入/缓冲区溢出/ 格式化字符串等 - 建议
进行渗透测试。 - 参考
SlowMist Exchange 安全审核计划
跨域钓鱼攻击
- 严重性低
- 描述
黑客诱骗受害者打开恶意网页通过跨域请求连接到加密钱包的RPC端口然后窃取加密资产。 - 建议
禁止RPC允许跨域访问。
分类帐层
共识
长程攻击
- 严重性高
- 描述
长程攻击是攻击者从创世区块分叉链新链与主链部分或完全不同。当攻击者制造的分叉变得比主链更长时则攻击成功。长程攻击分为三种简单攻击、变节攻击和权益流损。
在某种意义上PoS 中的长程攻击与 PoW 协议的自私挖矿攻击类似因为两种情况下的攻击者都在试图添加保密区块。不过由于 PoW 对计算量的要求自私挖矿攻击无法从创世区块开始所以造成的影响是有限的。这两种攻击都分叉了主链并尝试在伪造的区块中包含不同的交易。 - 建议
等到交易被足够的区块确认后交易所或接收方再支付。 - 参考
长程攻击调查权益证明协议
贿赂攻击
- 严重性高
- 描述
贿赂攻击也被称为 短程攻击 。攻击者通过向验证者或矿工支付大于等于区块奖励的金额贿赂验证者或矿工来产生特定的区块或分叉。这样一来攻击者可以将任意交易放入区块并让不诚实的节点通过区块验证。
一种被称为P+epsilon 攻击的贿赂攻击表明可以在无需支付费用的情况下贿赂用户因为系统会将贿赂奖励给不诚实的节点使该分叉成为主链。
攻击者在贿赂攻击中面临着一个严重的问题如果恶意分叉由于某种原因被还原攻击者无法继续贿赂不诚实的节点停止在该分叉上工作攻击者将不得不支付巨额贿赂因为随着恶意铸造的区块累积需要的贿赂金额也在增长。在 PoS 系统中这类攻击是可行的。 - 建议
在这两种情况下PoS 通过强制惩罚或释放攻击者者来解决这个问题。 - 参考
长程攻击调查权益证明协议
竞争攻击
- 严重性高
- 描述
竞争攻击指攻击者创建两个冲突的交易。如果第一笔交易被发送给受害者受害者没有等待交易确认就接受了付款并执行承诺例如发送产品等。同时另一笔冲突的交易被广播到网络最终使第一笔交易无效。 - 建议
交易被足够的区块确认后交易所或接收方再支付。 - 参考
区块链攻击向量
活性冻结攻击
- 严重性高
- 描述
活性冻结攻击是 PoS 协议中拒绝服务攻击的一种形式。在这种攻击中部分或全部验证者停止产生区块从而阻止新区快的验证和产生。对验证者的活跃度进行评估减少活跃度小的验证者的权益能确保即使大多数验证者处于离线状态或执行活性冻结攻击也不会危害网络的可用性。 - 建议
在无法评估活跃度的情况下社区将能够决定链下治理并移除不活跃的验证者。在这种情况下即使存在漏洞利用条件试图进行攻击的验证者也会考虑攻击是否划算。 - 参考
长程攻击调查权益证明协议
审查攻击
- 严重性高
- 描述
区块链中的审查是一个棘手的问题有许多相关的讨论。根据不同区块链的性质它可能区块链的特性也可能带来危害。由于验证者可以控制哪些交易将被添加到一个区块中这使他们可以将某些地址列入黑名单即不打包在黑名单中的地址。在验证者执行审查的情况下由于时间限制某些交易可能会延迟或失效。一旦执行进行审查的验证者数量增加区块链的抗审查性可能受到挑战。 - 建议
对验证者的活跃度要求可以确保交易的最终过程并消除对区块链的审查。除此之外还可以惩罚未按照协议预定的顺序创建区块的节点。另一个更有效的解决方案是利用零知识简洁非交互式知识论证(zk-SNARKs)它可以可用于隐藏交易发送者的身份。 - 参考
长程攻击调查权益证明协议
芬尼攻击
- 严重性高
- 描述
将一个交易预挖到一个块中并且在该块被放入到网络之前发送了一个相同的交易从而使该交易在区块发布后失效。 - 建议
等到交易被足够的区块确认后交易所或接收方再支付。 - 参考
区块链攻击向量
Vector76 攻击
- 严重性高
- 描述
Vector76 是竞争攻击和芬尼攻击的组合。
恶意矿工创建两个节点其中一个仅连接到交换节点另一个连接到区块链网络中的正常节点。之后矿工创建两笔交易一笔高价值一笔低价值。然后攻击者从交易所服务中预挖并扣留具有高价值交易的区块。某个区块发布后攻击者迅速将预挖区块直接发送到交易所节点试图使交易所与一些矿工一起将预挖区块视为主链并确认此交易。
交易所服务确认高价值交易后攻击者向主网发送低价值交易最终拒绝高价值交易。最终攻击者的交易所账户被记入了高价值交易的金额。尽管这种类型的攻击有可能成功但并不常见因为它需要交易所钱包在一次确认后就接受付款以及一个将交易发到交易所的节点。 - 建议
等到交易被足够的区块确认后交易所或接收方再支付。 - 参考
区块链攻击向量
替代历史攻击
- 严重性高
- 描述
也称为区块链重组攻击。
如果黑客拥有大量的计算能力在区块被多次确认后也能完成重组攻击。在这种情况下恶意用户将发送交易同时在分叉链上发送另一个同样价值的交易。即使接收方等到若干区块确认后并认为交易有效此时攻击者放出更长的分叉链并取回代币从而导致接收方损失代币。 - 建议
等到交易被足够的区块确认后交易所或接收方再支付。 - 参考
区块链攻击向量
51% 攻击
-
严重性高
-
描述
也称为多数攻击。
在 PoW 系统中在特定时间范围内控制大部分算力的攻击者可以完全控制区块链。例如拥有超过 51% 算力的攻击者可以分叉主链并在他的分叉上开始挖矿。该分叉可以逐渐超越主链并取代它。
在 PoS 协议中这种攻击仍然可行但影响略有不同。当一个验证者或一群合伙的验证者拥有超过 34%的权益这种攻击就可能发生。 -
建议
等到交易被足够的区块确认后交易所或接收方再支付。 -
参考
长程攻击调查权益证明协议
权力压迫攻击
-
严重性高
-
描述
也称为预计算攻击。
攻击者在获得记账权的时候利用自己手中的权利实施一些计算或者一些操作让系统的随机数产生偏斜来增加自己下一次获得记账权的可能。 -
建议
等到交易被足够的区块确认后交易所或接收方再支付。 -
参考
长程攻击调查权益证明协议
币龄累积攻击
- 严重性高
- 描述
在早期版本的 Peercoin 协议中用户质押的时间越长其权重就会越多没有任何时间限制。如果有足够的时间攻击者将积累大量权重这使他们能够接管网络。 - 建议
在去中心化系统较稳定后取消币龄系统。 - 参考
长程攻击调查权益证明协议
自私挖矿攻击
-
严重性高
-
描述
在自私挖矿攻击也称为区块扣留中攻击者在自己的区块链分叉中挖掘区块并且不将它们发布到网络。当攻击者计算出一定数量的区块再将它们发布到网络中并尝试替代主链。这种攻击可以做到通过浪费诚实节点的计算资源来破坏网络增加恶意节点挖矿的奖励。 -
建议
削减恶意攻击者的奖励及权益。 -
参考
长程攻击调查权益证明协议
区块双产
-
严重性高
-
描述
攻击者在某个区块高度上生产多个区块这可能是长程攻击或短程攻击的前兆。 -
建议
惩罚恶意攻击者。
加密
密码学攻击
- 严重性高
- 描述
常见攻击方法分析攻击/实施攻击/统计攻击/暴力破解/频率分析/已知明文攻击/选择密文攻击/选择明文攻击/中途相遇攻击/中间人攻击/生日攻击/重放攻击/碰撞攻击 - 建议
不要使用未知的加密库。
私钥预测
- 严重性高
- 描述
如果密钥的生成依赖于随机数生成而该随机数生成器可预测则密钥可能被窃取。 - 建议
使用密码学安全伪随机数生成器 (CSPRNG) 或密码学伪随机数生成器 (CPRNG)。 - 参考
密码安全的伪随机数生成器
长度扩展攻击
- 严重性低
- 描述
对于部分摘要算法若已知Hash(message1)
和length(message1)
则可以直接计算出由攻击者控制的message2
和对应的Hash(message1 ‖ message2)
。无需知道message1
的内容。 - 建议
像 MD5、SHA-1 和大多数基于 Merkle-Damgård 结构的 SHA-2 算法很容易受到这种攻击使用时需要注意。 - 参考
长度扩展攻击
交易
重放攻击
- 严重性高
- 描述
也称为双花攻击。
双花是区块链技术从一开始就试图解决的问题之一。攻击者尝试将相同的货币花费至少两次所以叫做双花。
在现实中这种攻击是不可能的。因为无法从一个供应商那里购买资源然后将完全相同的钞票支付给另一个供应商。
而在区块链中可以通过在不同的分叉中利用冲突的交易来实现。攻击者尝试执行交易等待商家批准然后将其还原并在另一个分叉的交易中花费相同的货币。 - 建议
- 检查 UTXO 是否已经被花费过
- 使用 nonce 来防止事务重放。
交易延展性攻击
- 严重性高
- 描述
交易延展性攻击允许攻击者做到在任意交易被比特币网络确认之前篡改该交易的TXID。此更改使该攻击者可以假装交易没有发生以实施对交易所的攻击例如双重存款或双重提款。
签名延展性
延展性的第一种形式是在签名本身。每个签名都可以表示为一个八字节的 DER 编码 ASN.1 但 OpenSSL 不强制执行该操作只要签名没有严重格式错误该签名就会被接受。
另一种方法为由于使用椭圆曲线签名算法根据其特点对于某个消息的 ECDSA 签名(r,s)
签名(r, -s (mod N))
也是该消息的有效签名。
ScriptSig 延展性
比特币中使用的签名算法在创建签名时不签署任何 scriptSig 。虽然对整个 scriptSig 进行签名是不可能的但可以添加额外的数据将指令放到堆栈中并且在所需的签名和公钥之前。所以攻击者可以添加OP_DROP
指令从而做到在scriptPubKey被执行前离开堆栈。 - 建议
检查签名库是否具有延展性。 - 参考
Transaction_Malleability
bip-0066-严格 DER 签名
eip-2-Homestead 硬分叉变更
交易时间锁攻击
- 严重性低
- 描述
在转账时通过指定代币在某个区块高度后才能被使用造成代币接收者无法使用代币。 - 建议
接收代币时检查交易是否有时间锁定。 - 参考
XMR转账锁
假充值攻击
- 严重性高
- 描述
发起特殊结构的交易以进行虚假转账但交易所以为是真实充值。 - 建议
- 检查事务事件日志中的所有字段。
- 等到交易被足够的区块确认后交易所或接收方再确认支付。
- 参考
USDT假充值
EOS假充值
XRP 虚假充值
ETH假充值
BTC RBF虚假充值
UTXO 多重签名假充值
Rug Pull
- 严重性高
- 描述
Rug Pull在加密货币行业中专指项目开发人员放弃项目并拿走投资者的资金。Rug Pull通常发生在去中心化金融 (DeFi) 项目中尤其是在去中心化交易所 (DEX) 上。例如攻击者创建一种代币并将其上架到 DEX 上然后将其与以太坊等具有高价值的加密货币组建交易对受害者用以太坊换取恶意代币后攻击者撤出流动性拿走用户的以太坊。 - 推荐
检查开发团队是否放弃了项目的所有权即不再具有撤出全部流动性无限增发代币等较高权限。
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |