BunnyFinder: Finding Incentive Flaws for Ethereum Consensus
BunnyFinder:探寻以太坊共识机制中的激励机制漏洞
会议:NDSS(Network and Distributed System Security Symposium) 2026
原文链接:https://www.ndss-symposium.org/wp-content/uploads/2026-s281-paper.pdf
一、背景
以太坊于2022年9月升级至权益证明(PoS)共识机制,高度依赖激励机制保障系统稳定:诚实验证节点获得区块奖励、交易手续费及证明奖励,拜占庭验证节点则面临罚没与证明处罚。该机制虽已取得巨大成功(超过99%的验证节点正常运行),但并非完美。
现有问题 :已有多种针对激励机制的攻击被发现(如阶梯攻击、重组攻击等),即便不直接威胁安全性,不合理的激励也会打击诚实节点参与积极性,降低系统稳健性。
核心挑战:发现激励漏洞难度大,主要依赖专家知识与大量人工,原因有二:
- 尚无共识机制在安全定义中纳入激励因素,难以彻底排除漏洞;
- 攻击策略极为复杂(如拜占庭节点勾结、精准控制消息释放时机),穷举所有恶意行为在技术上不可行。
研究问题 :能否在减少人工的前提下,找出以太坊中的激励机制漏洞?
BunnyFinder方法 :受软件测试(故障注入)启发的半自动框架,聚焦设计缺陷(尤其是激励缺陷)。由四大组件构成:策略生成器(SG)、策略执行器(SE)、状态分析器(SA)、策略优化器(SO)。
主要发现 :在Prysm和Teku两种以太坊实现上生成并执行了9,354个攻击实例,识别出10个有用攻击------5个已知重组攻击、3个新激励缺陷攻击、2个Prysm实现缺陷。
以太坊PoS权益证明和激励机制 :

工作流程:
- 该协议以周期为单位运行,每个周期包含32个时隙。在时隙t起始时刻,提议节点viv_ivi生成区块b=(PROPOSE,t,vi,H(head),atts,txs)b = (\text{PROPOSE}, t, v_i, H(\text{head}), \text{atts}, \text{txs})b=(PROPOSE,t,vi,H(head),atts,txs), 其中head为分叉选择规则的输出结果,atts是一组证明消息,txs为交易批次(第1至7行)。
- 时隙t开启满4秒后,所有具备证明资格的节点viv_ivi生成证明消息att=(ATTEST,t,vi,H(head),H(cp1),H(cp2))\text{att} = (\text{ATTEST}, t, v_i, H(\text{head}), H(\text{cp1}), H(\text{cp2}))att=(ATTEST,t,vi,H(head),H(cp1),H(cp2)),并将该证明消息发送给同委员会内所有验证节点。 其中head同样为分叉选择规则输出,cp1与cp2为两个检查点区块(第8至14行)。
- 验证节点viv_ivi收到其他验证节点发来的消息m后,会将m存入自身本地区块树T中(第15至18行),本地区块树仅服务于分叉选择规则。
激励机制The incentive mechanism:
- 以太坊的激励机制包含奖励与惩罚两部分。奖励分为区块奖励、交易手续费以及证明手续费。惩罚分为削减惩罚和证明惩罚。
- 区块奖励block rewards,是每个区块提议者所提议的区块完成最终确认后能够获得的奖励。
- 交易手续费transaction fees,是用户为完成一笔交易额外支付的费用。
- 证明手续费attestation fees,每个证明者在其证明完成最终确认后,能够获得的奖励。
- 削减惩罚slashing condition,惩罚出现双重作证行为的验证者。
- 证明惩罚Attestation penalties,对未完成证明最终确认的证明者进行惩处。
- 证明奖励和证明惩罚都称为证明激励attestation incentives,此项目主要关注证明激励和区块奖励。
二、方法

(一)概述
BunnyFinder由4个部分组成:策略生成器SG、策略执行器SE、状态分析器SA、策略优化器SO,分2个阶段运行。
- 攻击识别(Attack identification):策略生成器SG生成攻击实例集合,策略执行器SE将这些攻击引入本地部署的以太坊测试网,让一部分验证节点执行这些攻击;状态分析器SA收集日志并分析攻击实例是否揭示了激励缺陷。这三个组件是自动执行的。
- 攻击优化(Attack optimization):发现激励漏洞后,人工核查日志,区分已知类型或全新类型。针对新型攻击,提取通用攻击手段,运行SO算法进行优化,让攻击更易实施或收益更高。优化手段过程中会采用强化学习RL。此项工作需要专业领域知识支撑,无法完全自动化。
难点和解决办法
核心研究难点是从海量攻击实例空间中挖掘有效的攻击策略,并对攻击参数进行微调。拜占庭验证者存在两类恶意行为:顺序操纵 (Order manipulation拜占庭验证者篡改各验证者向其他验证者发送消息的顺序)与内容操纵(篡改消息本身的内容)。恶意行为虽仅两类,但具体攻击场景数量极多:1.攻击者可随意篡改、延迟消息;2.掌控不同比例拜占庭验证节点,掌控节点越多,需篡改的消息队列规模越大,无法穷举所有攻击方案,必须缩减攻击场景范围;3.即便找到存在激励漏洞的攻击,也无法确定其收益最高,微调一下就可能造成更大破坏。为此对策略生成器SG、状态分析器SA、策略优化器SO三大模块进行精心设计。
-
SG:减少攻击实例的空间,为生成有效攻击实例提出几条规则。
- (不得提前发布消息)在以太坊的实现机制中,验证节点不会处理槽位编号高于自身当前本地槽位编号的消息。因此,提前发布消息毫无意义。
- (设置离散延迟时长)离散化设置延迟时长,单个slot的1/3为1个单位,比如4秒。采用该优化方案主要有两点原因:1.每个验证节点会在每个单位时间执行若干操作,比如,每位证明节点attestor会在每个时隙走完4秒后生成对应的证明信息;2.本文采用同步网络假设,所有消息均可准时送达。相较于其他时序模型,该假设的约束条件实际上更为宽松。即若某种攻击在同步网络环境下能够实施,那么在异步网络环境中实施该攻击会更加容易。
- (审慎选取可篡改内容字段)针对性筛选区块与证明数据结构中可供修改的字段,以此保证各类攻击策略能够生效。
采用上述原则后,攻击实例的数量大幅减少。共生成9354个攻击实例,有3121个被认定为激励缺陷。
-
SA:评估攻击实例 ,首先对激励缺陷进行规范定义。完善的激励机制通常需满足:(1)遵守协议的诚实验证节点应当获得奖励;(2)违背协议规范的拜占庭验证节点应当受到惩罚。目前已知的绝大多数研究都聚焦于会触发条件(1)的激励缺陷,因此,还需考量条件(2)是否会被触发,并分析以下可能情形:若诚实验证节点获得的奖励低于其应得份额,拜占庭验证节点的奖励是否也会低于其应得份额,甚至遭受处罚?若诚实验证节点受到处罚,拜占庭验证节点是否会面临更重的处罚?
设fsf_sfs为诚实验证节点的公平分配奖励fair share of rewards。RBR_BRB与RhR_hRh分别代表拜占庭验证节点、诚实验证节点的净收益net payoffs。为正代表获得净奖励;为负代表遭受净惩罚。当Rh<fsR_h < f_sRh<fs时,此次攻击具备实际影响,即诚实验证节点所得收益<其公平分配奖励。我们根据(RB,Rh)(R_B, R_h)(RB,Rh)将各类场景划分如下:
- 场景一:两者均获得奖励。此时仅当诚实验证节点的net payoffs < fair share时,攻击具备实际影响,满足条件:RB>0R_B > 0RB>0、Rh>0R_h > 0Rh>0且Rh<fsR_h < f_sRh<fs。
- 场景二:两者均受到惩罚。此时攻击本身即具备实际影响,原因是诚实验证节点严格遵守协议却仍遭受惩罚,满足条件:RB<0R_B < 0RB<0且Rh<0R_h < 0Rh<0。
- 场景三:拜占庭验证节点获取奖励,诚实验证节点遭受惩罚。此类攻击会对系统稳定性造成严重冲击,攻击者掌控的质押份额会持续增长,最终可能突破33.3%的临界阈值,满足条件:RB>0R_B > 0RB>0且Rh<0R_h < 0Rh<0。
- 场景四:拜占庭验证节点遭受惩罚,诚实验证节点获得奖励。同理,仅当诚实验证节点的奖励低于fair share时,攻击具备实际影响,满足条件:RB<0R_B < 0RB<0、Rh>0R_h > 0Rh>0且Rh<fsR_h < f_sRh<fs。
为量化攻击带来的影响,我们定义拜占庭优势BA=RB−Rh\text{BA} = R_B - R_hBA=RB−Rh。拜占庭优势数值越大,代表攻击者净收益越高、诚实验证节点净收益越低;拜占庭优势越大,攻击效果越强;RB−fsR_B - f_sRB−fs数值越大,则攻击的获利空间越高。
-
SO:用RL优化攻击 ,在识别出缺陷后,需要判断:通过小幅调整攻击策略并微调攻击参数,是否能够找到收益更高的攻击方案。论文采用强化学习(RL)构建攻击优化方案SO。但需要解决的核心难点在于:系统运行过程中验证节点的收益会发生动态变化,因此难以直接确定"收益函数"。为解决该问题,本文选用延迟奖励强化学习模型,并在执行强化学习算法的过程中对验证节点的收益进行仿真模拟。
后续将证明,借助RL-based SO,对两种新发现的攻击策略完成优化,分别是自私挖矿攻击与阶梯式二类攻击。针对阶梯式二类攻击,经过优化后其攻击效果大幅提升。相较于原始攻击方案可获得近乎两倍的收益。除此之外,成功概率也从35.0%提升至97.0%。
(二)框架细节
1. 策略生成器SG
主要的策略包括操纵顺序和内容。
-
顺序操纵,使用消息队列表示每个验证节点应该相互发送的消息,攻击者会任意修改自身消息队列,并决定每条消息发送至其他验证节点的时机。攻击者无法操控诚实验证节点的消息队列;
-
内容操纵,区分几个可生成有效攻击样本的字段。图3详细展示了区块与证明的数据结构:
- Block:slot字段代表slot编号,proposer字段代表区块proposer身份,这两个字段无法篡改。parent字段记录父区块哈希值,该字段能够被篡改,现有多种已知攻击均利用了该手段。transactions字段存储一批交易,与证明激励机制无关。attestation字段包含一组证明极其重要------每个验证节点都会依据该字段,在分叉选择规则中判定区块树各分支的权重。综上,可对区块的parent与attestation字段实施篡改。
- Attestation :head字段为各证明节点主链的哈希值,source与target字段代表两个校验节点。这三类字段均可篡改,多款已知攻击均采用该篡改方式。

例子:以事前重组攻击(ex-ante reorg attack)为例,攻击中仅需1名proposer为拜占庭节点,但所有拜占庭验证节点都会篡改并延迟其证明信息。该攻击同时需要篡改顺序与内容两类操作,所有拜占庭证明节点均执行同一套攻击策略。相关攻击策略汇总于图4。图6a汇总了未发起攻击时验证节点的消息队列情况,图6b汇总了发起攻击后的消息队列情况。图5所示图例适用于图6及后续所有附图。



在实现时,定义了一种基于JSON格式的策略规范格式(SSF),SSF在每个slot中定义3要素:slot代表执行攻击操作的时隙,actions则记录各类攻击策略,用于明确每条消息需要延迟的具体时长,以及针对拜占庭验证节点需修改的消息内容。该策略规范格式文件包含两类JSON模板,分别用于时序调整与内容篡改。程序会根据具体攻击策略填充对应模板。单个SSF文件包含1个周期内全部时隙对应的攻击策略。

2. 策略执行器SE
SE主要包含两大组件:攻击调度器(AS)与拜占庭模拟器(BS)。攻击调度器包含两个子组件:策略转换器(ST)和指令分发器(ID)。ST会依据策略规范格式(SSF),解析对应的攻击策略,转换为以太坊实现代码库中可执行的代码。ID与BS交互,在攻击执行过程中向其下发进一步操作指令。BS会在自身客户端中预设一组注入点,运行时从ID获取对应指令,在各注入点执行指令,并将执行结果广播至网络。此外还搭建了策略池用于存储可执行代码,从而能够依据指令发起各类复杂攻击策略。
示例:攻击注入流程如下:①当拜占庭节点(BS)的探测点被触发时(触发位置为.BlockBeforeBroadcast),该探测点向指令调度器(ID)发送请求,同时将拜占庭模拟器的当前线程置为挂起状态。②指令调度器ID收到后续指令后,先解析请求,再检索策略池,判断是否需要为BlockBeforeBroadcast执行本地指令,存在两种结果:
- 无需执行本地指令时,指令调度器直接向拜占庭节点返回远程空指令CMD_NULL;
- 检索到对应本地指令时,指令调度器执行该本地指令(例如delayWithDuration),随后向BS下发远程指令。
指令执行完毕后,③BS接收来自ID的指令.④BS执行远程指令,恢复此前挂起的线程。
3. 攻击优化器SO

论文将研究问题形式化为延迟奖励强化学习任务(delayed-reward reinforcement learning task),并采用PPO算法训练actor-critic模型,奖励函数为诚实验证节点获得的奖励与其fair share之间的差值。在以太坊权益证明(PoS)协议中,验证节点的奖励会随时间变化,且仅当若干区块完成最终确认后才能确定。即时反馈会产生误导,甚至起到反作用,因此无法在每一步计算奖励。因此选用actor-critic框架:其中actor网络学习动作选择策略,critic网络预估状态价值,以支撑基于优势函数的学习。此外还在网络结构中增设循环记忆模块(长短期记忆网络LSTM),建立动作与未来才可观测结果之间的关联。LSTM能够保存多slot攻击序列的时序上下文信息,追踪proposer职责、链权重以及证明进度。PPO算法通过约束策略更新幅度、保障高效学习,进一步提升训练过程的稳定性。
在此系统中,Agent为掌控所有拜占庭验证节点的对手。环境则模拟最简以太坊2.0区块链系统,实现与验证节点奖励相关的核心组件。具体而言,重点研究两大模块:Hybrid LMD-GHOST分叉选择规则与Casper FFG确定性工具。从概念层面来说,环境代表由所有诚实验证节点构成的以太坊2.0网络,并规定区块提议、证明发送以及奖励计算的相关规则。
我们对以太坊权益证明协议的运行流程进行抽象处理,以实现与RL框架的融合。首先,将以太坊中的slot概念映射为RL中的时间步step。该协议不再基于时间驱动,而是基于动作驱动,每一个RL step对应一个完整slot。在每一步,环境从agent收到一个动作,更新链的内部状态,并根据上文给出的规范计算输出结果。其次,针对对环境进行攻击定制化修改。通过这些改动,我们能够重点分析调整后的攻击策略如何优化输出结果。
状态与动作空间依据各攻击实例进行定义。总之,SO算法能够提升自私挖矿攻击与阶梯式二代攻击的成功率,减少所需的质押筹码,并提升收益。
BunnyFinder可适配采用提案-投票propose-vote机制的其他区块链。具体而言,只需重新定义攻击空间即可调整SG模块,而SE模块仅需更新注入节点;这类修改需要额外的工程开发工作量。SA模块与SO模块不依赖特定区块链,通用性更强。
三、结果
(一)实验设置
- 硬件环境:AWS EC2,最多3个c5.4xlarge实例(每个16 vCPU + 32GB内存)
- 测试网络:本地部署Ethereum 2.0测试网,含beacon节点、execution节点、validator节点三层架构,部分beacon节点被修改为拜占庭节点
- 实验实现:Prysm和Teku两种以太坊实现
- 优化措施:将slot时间从12秒缩短至3秒,单次实验时间从19分钟降至4.8分钟,不影响结果正确性
- 代码开源:https://doi.org/10.5281/zenodo.17042549
(二)评估与验证流程
- 攻击实例生成与执行:SG生成9,354个攻击实例,SE执行全部实例,实验持续约145小时
- 激励缺陷识别 :收集执行日志,通过SQL查询提取验证节点激励数据,按四类Metric分类。在9,354个实例中,3,121个被认定为激励缺陷(占比约33.4%)
- 人工分析:每个Metric类别中选取前20%最有利可图的实例,人工分析攻击策略。相似策略归为同类,每类选最优策略应用RL优化后重新评估。共人工评估300个实例,识别出3个新激励缺陷
激励缺陷分布(Table II):
| 编号 | Metric类别 | 数量 | 占比 | 攻击示例 |
|---|---|---|---|---|
| 1 | Metric-I | 2,586 | 82.86% | 自私挖矿攻击 |
| 2 | Metric-III | 2 | 0.64% | 阶梯攻击-II |
| 3 | Metric-II | 466 | 17.07% | 惨胜攻击 |
| 4 | Metric-IV | 67 | --- | --- |
(三)实验结果
1. 复现5个已知重组攻击
成功复现以下已知攻击(部分在Deneb升级后已缓解,在旧版本上复现):
| 攻击名称 | 缺陷类型 | 策略 | 诚实节点 | 拜占庭节点 | 实现版本 |
|---|---|---|---|---|---|
| 事前重组攻击 | I | 区块, head | 奖励减少 | 获奖 | Prysm 5.2.0; Teku 25.6.0 |
| 三明治重组攻击 | I | 区块, head, 修改parent | 奖励减少 | 获奖 | Prysm 5.2.0; Teku 25.6.0 |
| 未实现证明攻击 | III | parent | 受罚 | 获奖 | Prysm 4.0.5 |
| 证明扣留攻击 | III | 区块, head | 受罚 | 获奖 | Prysm 4.0.5 |
| 阶梯攻击 | III | 区块, source, h, target, 证明 | 受罚 | 获奖 | Prysm 4.0.5 |
2. 发现3个新激励缺陷攻击
(1)自私挖矿攻击 --- 以太坊PoS首个已知自私挖矿攻击
- 攻击机制:拜占庭验证者扣留区块,在最优时机释放,使延迟区块积累更大"权重"(更多证明),在HLMD-GHOST分叉选择规则下替换诚实节点的区块
- 影响:拜占庭与诚实节点均获奖,但诚实节点奖励低于公平份额(Metric-I)
- 最低质押要求 :仅需控制**13.4%**的质押份额即可获利(β>2/15\beta > 2/15β>2/15)
- RL优化后:成功率近100%,质押需求降低超过20%
- 缓解状态 :已在Prysm v4.0.6中通过REORG_PARENT_WEIGHT_THRESHOLD参数修复
(2)阶梯攻击-II --- 阶梯攻击的变体 - 攻击机制:需要两个连续epoch的第一个slot的proposer为拜占庭节点;对手延迟slot 0的区块4秒,使诚实节点证明的target不同;所有拜占庭证明永久延迟;在epoch末尾释放包含拜占庭证明的区块实现justification
- 影响:诚实节点受罚而拜占庭节点仍获奖(Metric-III)
- 质押要求:33.3%质押份额,攻击概率1/9
- 与阶梯攻击区别:不能连续发起,但若对手控制33%质押并在每次可发起时发起,所有诚实节点将在对应epoch受罚
- 缓解状态 :以太坊对阶梯攻击的缓解方案无法完全消除此变体;目前未被修复
(3)惨胜攻击 --- 双方均受罚但诚实节点损失更大 - 攻击机制:拜占庭验证者永久延迟所有证明,降低参与率;诚实节点奖励低于公平份额甚至受罚,拜占庭节点也受罚
- 基础版本:诚实节点约获公平份额67%,拜占庭损失率约180%(不够有效)
- 最有效实例:拜占庭损失5.1%激励,诚实节点损失19.9%
- RL优化后:有效攻击比例从60.78%提升至70.78%
- 缓解状态:未被修复
RL优化效果对比(Table III,以阶梯攻击-II为例):
| 策略 | 诚实节点收益 | 拜占庭收益 | 拜占庭优势(BA) | 成功率(ASR) |
|---|---|---|---|---|
| 默认策略 | -48.1 | -34.7 | 13.4 | 35.0% |
| RL优化策略 | -56.1 | -28.9 | 27.2 | 97.0% |
- BA Rate ≈ 2.03(收益翻倍),成功率从35%提升至97%
- 诚实节点奖励最多比默认策略低30%
- 对手成本从46.1%降至40.1%(降低13%)
3. 发现2个Prysm实现缺陷
(1)同步模块死锁
- 触发条件:发起阶梯攻击-II时,所有诚实节点认为自己落后,查询同步模块,但无节点能完成同步
- 根因:同步模块的实现漏洞(仅Prysm/Golang实现存在,Teku因同步模块实现方式不同不受影响)
- 状态:已确认,未修复
(2)日志错误 - 表现:reorg日志在不存在的重组发生时被触发,产生虚假重组日志
- 影响:不影响协议正确性,但影响状态分析器组件,可能增加开发者维护复杂度
- 状态:已确认并修复
4. 漏洞披露状态
所有发现均已通过公开渠道、会议和邮件向以太坊基金会披露并获得确认:
| 漏洞 | 已报告 | 已确认 | 已修复 | 披露渠道 |
|---|---|---|---|---|
| 自私挖矿 | ✓ | ✓ | ✓ | 社区网站 |
| 阶梯攻击-II | ✓ | ✓ | ✗ | 社区网站 |
| 惨胜攻击 | ✓ | ✓ | ✗ | 会议报告 |
| 同步模块问题 | ✓ | ✓ | ✗ | 社区网站 |
| 日志错误 | ✓ | ✓ | ✓ | 会议、邮件 |
5. 总结
BunnyFinder框架通过模拟9,354个攻击实例,其中32.9%属于激励缺陷,成功覆盖5个已知攻击并发现3个新攻击和2个实现缺陷。新攻击均已验证并报告,部分已被以太坊基金会确认并促成协议版本更新。
