币灵灵财经
首页 > 币圈新闻 > 文章正文

Sui最新漏洞“仓鼠轮” 技术细节与深入分析

币灵灵财经 2024-11-25 18:31 1035

Sui最新漏洞“仓鼠轮” 技术细节与深入分析

发现该漏洞后,CertiK通过Sui的漏洞赏金计划向Sui进行了报告。Sui也第一时间进行了有效回应,确认了该漏洞的严重性,并在主网启动前积极采取了相应措施对问题进行了修复。除了修复此特定的漏洞外,Sui还实施了预防性的缓解措施,以减少该漏洞可能造成的潜在损害。

验证器在Sui中的关键作用

Sui最新漏洞“仓鼠轮” 技术细节与深入分析

Move链上的恶意载荷威胁

Sui链在原始Move虚拟机之上提供了一套新的存储模型与接口,因此Sui有一个定制版的Move虚拟机。为了支持新的存储原语,Sui进一步针对不可信载荷的安全验证引入了一系列额外的、定制的检查手段,如对象安全及全局存储访问等功能。这些定制检查手段契合了Sui的独特功能,因此我们将这些定制检查称为Sui验证器。

Sui最新漏洞“仓鼠轮” 技术细节与深入分析

Sui对载荷的检查顺序

除了结构层面的检查之外,验证器的静态检查仍需要更复杂的分析手段,以确保不可信载荷在语义层面的强健性。

Sui最新漏洞“仓鼠轮” 技术细节与深入分析

Move 抽象解释器的工作流程

Sui IDLeak验证器:

Sui最新漏洞“仓鼠轮” 技术细节与深入分析

IDLeak验证器,也被称为id_leak_verifier,与抽象解释器协同工作进行分析。它有着自己独特的AbstractDomain,被称为AbstractState。每个AbstractState由多个局部变量对应的AbstractValue组成。通过AbstractValue来监督每个局部变量的状态,以此来追踪一个ID变量是否是全新的。

Sui IDLeak验证器状态维护不一致问题

IDLeak验证器通过实现AbstractState::join函数与Move抽象解释器集成。这个函数在状态管理,特别是在合并和更新状态值方面中起着不可或缺的作用。

Sui最新漏洞“仓鼠轮” 技术细节与深入分析

Sui最新漏洞“仓鼠轮” 技术细节与深入分析

Sui最新漏洞“仓鼠轮” 技术细节与深入分析

示例:状态连接的不连贯性

Sui最新漏洞“仓鼠轮” 技术细节与深入分析

恶意CFG+状态,可导致IDLeak验证器内部死循环

通过利用这个漏洞,验证节点如仓鼠在轮上无休止地奔跑一样无限循环,无法处理新的交易。因此我们将这种独特的攻击类型称为“仓鼠轮”攻击。

“仓鼠轮”攻击可以有效地使Sui验证器陷入停顿,进而导致整个Sui网络瘫痪。

Sui最新漏洞“仓鼠轮” 技术细节与深入分析

“仓鼠轮”攻击在Sui网络中的持续性危害

Sui的漏洞赏金计划对漏洞等级的评定有着严格的规定,主要依据对整个网络的危害程度进行评定。满足“严重(critical)”评级的漏洞必须使整个网络关停并有效阻碍新交易确认,同时需要硬分叉来修复问题;如果漏洞只能使部分网络节点拒绝服务,至多被评定为 “中危(medium)”或“高危(high)”漏洞。

CertiK Skyfall团队发现的“仓鼠轮”漏洞可以使整个Sui网络关停,同时需要官方发布新版本进行升级修复。基于对该漏洞的危害程度,Sui 最终被将其评定为“严重”等级。为了进一步理解“仓鼠轮”攻击造成的严重性影响原因,我们有必要了解Sui后端系统的复杂架构,特别是链上交易发布或升级的整个过程。

Sui最新漏洞“仓鼠轮” 技术细节与深入分析

在Sui中提交交易的交互概述

Sui的解决方法

Sui最新漏洞“仓鼠轮” 技术细节与深入分析

除了修复这个特定的漏洞外,Sui还部署了缓解措施,以减少未来验证器漏洞的影响。根据Sui在bug报告中的回复,缓解措施涉及一个叫做Denylist的功能。

“然而,验证器有一个节点配置文件,允许他们暂时拒绝某些类别的交易。这个配置可以用来暂时禁止处理发布和软件包升级。由于这个bug是在签署发布或软件包升级tx之前运行Sui验证器时发生的,而拒绝列表将停止验证器的运行并将恶意tx丢弃,暂时拒绝列表这些tx类型是一个100%有效的缓解措施(尽管它将暂时中断试图发布或升级代码的人的服务)。

顺便提一下,我们有这个TX拒绝列表配置文件已经有一段时间了,但我们也为证书添加了一个类似的机制,作为你之前报告的 “验证器死循环 ”漏洞的后续缓解手段。有了这个机制,我们将对这种攻击有更大的灵活性:我们将使用证书拒绝名单配置来使验证器忘记坏的证书(打破死循环),并使用TX拒绝名单配置来禁止发布/升级,从而防止创建新的恶意攻击交易。谢谢你让我们思考这个问题!

验证器在签署交易之前有有限的 "ticks"(与gas不同)用于字节码验证,如果在交易中发布的所有字节码不能在这么多ticks中得到验证,验证器将拒绝签署该交易,防止它在网络上执行。以前,计量只适用于一组选定的复杂验证器通过。为了应对这个问题,我们将计量扩展到每个验证器,以保证验证器在每个tick的验证过程中所执行的工作有一个约束。我们还修复了ID泄漏验证器中的潜在无限循环错误。“

--来自Sui开发者关于漏洞修复的说明

Sui最新漏洞“仓鼠轮” 技术细节与深入分析