主页 > imtoken官网下载2.0 > L2BEAT实验“破解”LayerZero:为什么这个跨链协议不安全?

L2BEAT实验“破解”LayerZero:为什么这个跨链协议不安全?

imtoken官网下载2.0 2023-02-19 05:25:30

原文:L2BEAT 团队成员 Krzysztof Urbański 的“绕过第零层:为什么孤立的安全性不安全”

编译:Babywhale, Foresight News

L2BEAT实验“破解”LayerZero:为什么这个跨链协议是不安全的?

L2BEAT实验“破解”LayerZero:为什么这个跨链协议不安全?

自成立以来,L2BEAT 投入了大量精力来分析和理解与第 2 层协议相关的风险。 我们始终以用户和生态系统的最大利益为出发点,尽最大努力做一个公正独立的监督者,不让我们对项目或相关团队的个人喜好影响事实。 这就是为什么即使我们尊重项目团队投入项目的时间和精力,我们也会“发出警报”或指出我们对某些协议的潜在风险的担忧。 尽早进行与安全相关的讨论可以让整个生态系统更好地为潜在风险做好准备,并对任何可疑行为做出更早的反应。

今天我们想讨论跨链应用程序的共享安全模型。 目前有两种安全模型:共享安全和单独应用程序安全。 共享安全就像所有 Rollup 一样。 独立应用程序安全性主要由“omnichain”项目使用,主要使用 LayerZero。 (《跨链通信协议LayerZero生态盘点:如何成为“DeFi乐高”的第0层?)

共享安全与独立安全

L2BEAT实验“破解”LayerZero:为什么这个跨链协议是不安全的?

L2BEAT实验“破解”LayerZero:为什么这个跨链协议不安全?

共享安全是指在给定的基础设施上运行的特定令牌或应用程序,而不是自由选择的安全模型,它们必须遵守基础设施强加的任何安全要求。 例如,Optimistic Rollups 通常强加一个 7 天的最终窗口——在此类 Rollups 上运行的应用程序不能简单地忽略或缩短这个时间段。 这似乎是一个障碍,但它存在是有原因的。 这个期限给用户提供了一个安全保证,无论应用内部的安全策略是什么,都必须遵守这套安全策略,应用可能只会加强而不是削弱Rollups的安全性。

独立安全意味着每个应用程序负责定义其安全性,独立于以任何方式执行此操作的基础架构。 乍一看这似乎是个好主意,毕竟应用程序的开发人员最了解应用程序可能需要的安全措施。 但与此同时,它将评估与每个应用程序安全策略相关的风险的责任转移给了最终用户。 此外,如果应用程序开发人员可以自由选择他们的安全策略,他们可以随时更改它们。 因此,对每个应用程序进行一次风险评估是不够的,每次应用程序的政策发生变化时都应该进行评估。

存在的问题

L2BEAT实验“破解”LayerZero:为什么这个跨链协议是不安全的?

L2BEAT实验“破解”LayerZero:为什么这个跨链协议不安全?

我们认为,每个应用程序都可以自由定义其安全策略的独立安全模型会带来严重的安全问题。 首先,它增加了最终用户的风险,因为他们必须验证他们打算使用的每个应用程序的风险。

独立安全性还增加了使用此模型的应用程序的风险,例如与安全策略更改有关的额外风险 - 如果攻击者要更改应用程序的安全模型,他们还不如简单地禁用它,耗尽金钱或以其他方式进行任何风险攻击. 在应用程序之上没有额外的安全层来防止攻击。

此外,由于安全策略可以随时更改,因此几乎不可能实时监控应用程序并通知用户风险。

L2BEAT实验“破解”LayerZero:为什么这个跨链协议是不安全的?

L2BEAT实验“破解”LayerZero:为什么这个跨链协议不安全?

我们发现它类似于智能合约的可升级性,我们已经在 L2BEAT 上发布了警告。 我们告知用户在其智能合约中具有可升级机制的 Rollups 和跨链桥,以及在每种情况下管理可升级性的确切机制。 这已经相当复杂了,使用单独的安全模型会使数量成倍增加比特币被破解,几乎不可能有效跟踪。

这就是为什么我们认为独立的安全模型本身就是一种安全风险,并且我们假设每个默认使用这种模型的应用程序都应该被认为是有风险的,除非另有证明。

证明存在安全漏洞

我们决定在主网上测试我们的假设。 选择 LayerZero 框架进行实验是因为它是最流行的以安全为中心的独立解决方案之一。 我们部署了一个安全的 omnichain 令牌,然后更新了安全配置以允许恶意令牌提取。 该令牌的代码基于 LayerZero 提供的示例,与实际部署的许多其他 omnichain 令牌和应用程序非常相似或相同。

但在我们深入细节之前,让我们简要了解一下 LayerZero 安全模型是什么样的。

L2BEAT实验“破解”LayerZero:为什么这个跨链协议是不安全的?

L2BEAT实验“破解”LayerZero:为什么这个跨链协议不安全?

正如 LayerZero 在其白皮书中指出的那样,其“无需信任的链间通信”依赖于两个独立的参与者(预言机和中继)共同行动来保护协议。

LayerZero 在其网站上表示,其核心概念是“一个运行 ULN(UltraLightNode)并可以配置链上终端的用户应用程序”。 LayerZero 的链上组件依赖于两个外部链下组件在链之间中继消息——预言机和中继器。

每当任何消息 M 从链 A 发送到链 B 时,都会发生以下两个操作:

LayerZero 假设中继器和预言机是独立、诚实的参与者。 不过,LayerZero也在白皮书中表示,如果不满足这个假设,比如中继器与预言机勾结,“预言机提供的区块头和中继器提供的交易证明都是无效的,但它们仍然匹配。”

LayerZero 声称“LayerZero 的设计消除了合谋的可能性”。 但事实上,这种说法是不正确的(我们在下面的实验中证明了这一点),因为每个用户应用程序都可以定义自己的中继器和预言机。 LayerZero 不通过设计保证这些组件是独立的并且不能串通,而是由用户应用程序提供这些保证。 如果应用程序选择破坏它们,LayerZero 没有机制来阻止它。

此外,默认情况下,所有用户应用程序都可以随时更改中继器和预言机,从而完全重新定义安全假设。 因此,仅检查一次给定应用程序的安全性是不够的,因为它可能在检查后随时更改,正如我们将在实验中展示的那样。

实验设计

对于我们的实验,我们决定创建一个简单的全链代币 CarpetMoon,同时在以太坊和 Optimism 上运行,并使用 LayerZero 在两条链之间进行通信。

我们的令牌最初使用 LayerZero 提供的默认安全模型比特币被破解,使其与大多数(可能不是全部)当前部署的 LayerZero 应用程序相同。 因此,它通常与使用 LayerZero 的任何其他令牌一样安全。

首先,我们在以太坊和 Optimism 上部署我们的代币合约:

然后我们设置路由,以便 LayerZero 知道哪个合约对应于两条链上的哪个合约。

该令牌已部署,它看起来与使用 LayerZero 的所有其他 omnichain 令牌完全一样,具有默认配置且没有任何可疑之处。

L2BEAT实验“破解”LayerZero:为什么这个跨链协议是不安全的?

L2BEAT实验“破解”LayerZero:为什么这个跨链协议不安全?

我们在以太坊上向我们的“测试用户”Alice 提供了 10 亿个 CarpetMoon 代币。

L2BEAT实验“破解”LayerZero:为什么这个跨链协议是不安全的?

L2BEAT实验“破解”LayerZero:为什么这个跨链协议不安全?

现在 Alice 使用 LayerZero 将这些代币交叉链接到 Optimism。

我们将代币锁定在以太坊上的托管合约中:。

包含交易的消息正在通过 LayerZero 传递给 Optimism:。

L2BEAT实验“破解”LayerZero:为什么这个跨链协议是不安全的?

L2BEAT实验“破解”LayerZero:为什么这个跨链协议不安全?

跨链代币正在 Optimism 上铸造,Alice 现在在 Optimism 上拥有 10 亿个 MoonCarpet 代币:。

一切都按预期进行,爱丽丝将她的代币交叉链化,并在以太坊的托管合约中看到 10 亿个 MoonCarpet 代币,在她的 Optimism 账户中看到 10 亿个 MoonCarpet 代币。 但为了确保一切正常,她将一半的代币转回以太坊。

L2BEAT实验“破解”LayerZero:为什么这个跨链协议是不安全的?

L2BEAT实验“破解”LayerZero:为什么这个跨链协议不安全?

我们从 Optimism 上的 5 亿代币销毁交易开始:。

有关交易的信息被传递到以太坊:。

正如预期的那样,5 亿个 MoonCarpet 代币从托管合约返回到 Alice 的地址: 。

到目前为止,一切正常并且完全按照假设进行。 Alice 已经检查过她可以将代币从以太坊跨链到 Optimism 并返回,她没有理由担心她的 MoonCarpet 代币。

但是假设它自己有问题——例如,我们代币背后的团队有问题,坏人 Bob 获得了我们应用程序的 LayerZero 配置的访问权限。

L2BEAT实验“破解”LayerZero:为什么这个跨链协议是不安全的?

L2BEAT实验“破解”LayerZero:为什么这个跨链协议不安全?

这样,Bob 就可以将 oracle 和 repeater 从默认组件更改为由他控制的组件。

需要注意的是,这是为每个使用 LayerZero 的应用程序提供的机制,植根于 LayerZero 的架构,它不是任何形式的后门,而是一种标准机制。

所以 Bob 将 oracle 更改为他控制下的 EOA: 。

中继器也已更改: .

现在发生了一些奇怪的事情。 由于 oracle 和中继现在都在 Bob 的完全控制之下,他能够窃取 Alice 的代币。 即使没有对 Optimism 采取任何行动(MoonCarpet 代币仍在 Alice 的钱包中),Bob 还是能够说服以太坊上的 MoonCarpet 智能合约(使用 LayerZero 机制)他销毁了另一条链上的代币并且他可以提取 MoonCarpet 代币在以太坊上。

L2BEAT实验“破解”LayerZero:为什么这个跨链协议是不安全的?

L2BEAT实验“破解”LayerZero:为什么这个跨链协议不安全?

首先,他使用由他控制的预言机更新以太坊的区块哈希: 。

L2BEAT实验“破解”LayerZero:为什么这个跨链协议是不安全的?

L2BEAT实验“破解”LayerZero:为什么这个跨链协议不安全?

现在他可以从托管合约中提取剩余的代币: 。

L2BEAT实验“破解”LayerZero:为什么这个跨链协议是不安全的?

L2BEAT实验“破解”LayerZero:为什么这个跨链协议不安全?

实验结果

爱丽丝甚至不知道错误发生的原因和时间。 突然之间,她在 Optimism 上的 MoonCarpet 代币不再得到以太坊代币的支持。

智能合约不可升级且无法按预期运行。 唯一可疑的活动是预言机和中继的变化,但这是 LayerZero 内置的正常机制,所以 Alice 甚至不知道这种变化是有意还是无意。 即使爱丽丝知道这个变化,也为时已晚——攻击者可能会在她做出反应之前耗尽资金。

LayerZero 对此也无能为力——这些是他们机制的有效实现,他们无法控制。 理论上,应用程序本身可以防止自己更改预言机和中继器,但据我们所知,已部署的应用程序都没有这样做。

我们做了这个实验来测试是否有人注意到它,但正如我们所料,没有人注意到。 有效监控所有使用 LayerZero 构建的应用程序以检查其安全策略的更改并在发生这种情况时提醒用户几乎是不可能的。

即使有人能够及时发现预言机和中继发生变化并构成安全风险,也为时已晚。 由于新的预言机和中继器现在可以自由选择传递哪些消息或简单地禁用链间通信,因此用户通常无能为力。 我们的实验清楚地表明,即使 Alice 注意到应用程序配置发生了变化,她也不能用她的跨链代币做太多事情——新的预言机和中继不再接受原始通信链消息,因此消息不会被返回到以太坊。

综上所述

L2BEAT实验“破解”LayerZero:为什么这个跨链协议是不安全的?

L2BEAT实验“破解”LayerZero:为什么这个跨链协议不安全?

正如我们所见,即使我们的代币是使用 LayerZero 构建的并按预期使用其机制,我们仍能够从代币的托管中窃取资金。 当然,这是应用程序(在我们的例子中是 CarpetMoon 令牌)的错误,而不是 LayerZero 本身的错误,但这证明 LayerZero 本身不提供任何安全保证。

当 LayerZero 描述他们关于预言机和中继器的安全模型时,他们假设应用程序所有者(或拥有私钥的人)不会做任何不合理的事情。 但在对抗环境中,这个假设是不正确的。 此外,它要求用户将应用程序开发人员视为可信赖的第三方。

因此在实践中,人们不能对使用 LayerZero 构建的应用程序的安全性做出任何假设——在证明并非如此之前,每个应用程序都应被视为有风险的。

实际上,整个故事始于一个 PR,我们计划在 L2BEAT 网站上包含所有 omnichain 代币——我们很难弄清楚如何评估它们的风险。 在分析风险时,我们想到了实验的想法。

如果它在 L2BEAT 上线,结果将是我们必须在使用 LayerZero 构建的每个应用程序之上放置警报,警告可能存在的安全风险。 但我们想就安全模型展开更广泛的讨论,因为我们认为独立安全是一种应该避免的模式,尤其是在我们的领域。

我们相信,随着像 LayerZero 这样的独立安全模型变得越来越流行,将会有越来越多的项目滥用它们,造成很多破坏,并给整个行业增加不确定性。