你本可以发现Nomad黑客攻击

  • zellic
  • 发布于 2022-11-16 13:57
  • 阅读 10

本文探讨了Nomad桥的漏洞及其被黑的原因,强调了未审计代码带来的安全风险,并介绍了一项新工具——审计覆盖追踪器,该工具旨在提供DeFi协议代码的审计状态信息,从而帮助开发者和用户避免类似的安全问题。

在2022年8月,Nomad代币桥被攻击↗,损失达1.9亿美元。值得注意的是,任何人都可以相对容易地找到脆弱的代码。这是因为该脆弱代码未经审计。

我们构建了一个工具,称为审计覆盖-追踪器↗,该工具追踪最大的DeFi协议中哪些代码经过审计,哪些未经审计。在这篇博客文章中,我们将探讨如何在几个月前发现Nomad桥的漏洞。

引言

在目前的Rekt-排行榜↗前20名黑客攻击中,有20起中有15起未经审计(包括Nomad)。虽然审计不是确保智能合约安全的完美或完整解决方案,但它们依然是宝贵的防线。未经审计的代码比经过审计的代码更容易包含错误或安全漏洞。这是因为在审计中,范围内的代码由一组专注于发现漏洞的安全专业人员进行审核。当攻击者寻找漏洞时,他们喜欢从无人关注的地方入手——即未经审计的代码。

在Nomad的案例中,该桥在2022年6月被Quantstamp↗审计。根据Quantstamp的说法,导致黑客攻击的有缺陷代码是在审计开始之后↗引入的。换句话说,最终部署的智能合约代码与经过审计的代码有所不同!而正是在这个后期引入的代码中存在一个致命的漏洞。

这个问题,或称为审计漂移,是Web3安全行业中一个众所周知的问题。然而,就我们所知,目前没有人跟踪流行的DeFi和Web3协议的链上审计漂移!有数十亿美元的资金锁定在可能未经审计的代码中。这对社区构成了严重且持续的安全风险。

为了解决这个问题,我们开发了一个审计覆盖-追踪器↗,已向公众开放供社区使用。我们还分析了几个流行的大型DeFi应用程序的审计漂移,并将它们添加到追踪器中。我们邀请社区查看结果并分享反馈。

在追踪器上,你还可以建议额外的-项目↗进行跟踪。目前,此功能处于测试阶段,提交的内容将手动审核以确保准确性。根据社区的兴趣,我们未来可能会自动化此提交过程。

现在,让我们看看这个审计追踪器是如何被用来提前发现Nomad漏洞的!

案例研究:Nomad攻击

在这个案例研究中,我们将展示如何通过我们的审计追踪器找出用于攻击Nomad的脆弱代码。但首先,让我们回顾一下Nomad攻击的事实。

这个攻击相对简单。大多数攻击交易仅由一次对process()函数的调用组成。让我们看看这个函数:

function process(bytes memory _message) public returns (bool _success) {
    bytes29 _m = _message.ref(0);
    require(_m.destination() == localDomain, "!destination");
    bytes32 _messageHash = _m.keccak();
    require(acceptableRoot(messages[_messageHash]), "!proven");
    require(entered == 1, "!reentrant");
    entered = 0;
    messages[_messageHash] = LEGACY_STATUS_PROCESSED;
    IMessageRecipient(_m.recipientAddress()).handle(_m.origin(), _m.nonce(), _m.sender(), _m.body().clone());
    emit Process(_messageHash, true, "");
    entered = 1;
    return true;
}

在Nomad桥中,这个函数负责执行跨链消息。这个函数的安全性至关重要。桥中的每条消息都通过这个函数流动。它不仅必须接受有效消息,还必须拒绝无效消息。它还必须阻止“重放”攻击,即有效消息被重复发送和使用。

process中,我们可以看到acceptableRoot函数是主要负责检查消息是否有效(“证明”)的函数。acceptableRoot函数通过内部数据库检查消息是否有效。该数据库本质上是使用Merkle树存储的,并且树由离线更新器通过函数updateprove来更新新消息。

通过审计覆盖-追踪器↗,我们可以深入到Replica.sol中,这里包含了所有这四个函数。比较链上代码与审计代码,我们可以看到Replica.sol中的链上代码只有18.6%经过审计!请记住,这些代码对于桥的安全运作至关重要。相比之下,LayerZero的Stargate桥除了非常简单的本地eth路由器包装合约,基本上是100%经过审计的。这本可以立刻引起警觉。

进一步调查Replica.sol的审计差异,我们可以看到在关键的process函数中存在重大**差异**:

acceptableRootprove函数的也进行了显著更改:

对跨链桥中关键函数进行如此大规模的更改可能本可以是另一个警告!此外,在黑客攻击后,相对快速↗地确定了用于攻击Nomad的漏洞。通过快速识别和定位未经审计的代码,安全研究人员可能会在黑客之前发现这个漏洞。至少,这些警示信号可能是建议远离的警告,这可能会保护用户资金免受损失。

结论

回想过去,总是容易的。在一次攻击发生后,容易指责未经审计的代码。但在过去两年中,我们看到许多攻击源于未经审计的代码。为了使Web3实现大众普及,我们必须从错误中学习。我们需要系统地避免这些类型的攻击伤害用户。

在未来,我们相信在经过审计的代码上放置额外的眼睛将防止可怕的攻击发生。我们希望我们的审计覆盖追踪器能成为社区开展工作的有用工具。

当然,追踪器在目前的形式下并非完美。我们正在尽全力确保准确性,并且我们欢迎建议和反馈。尽管如此,我们相信它提供的信息对开发人员、用户和白帽子非常有用。通过吸引人们关注潜在不安全的代码,我们希望社区能够在黑客之前发现、报告和修复安全漏洞。

关于我们

Zellic↗是一家由黑客创立、为黑客服务的智能合约审计公司。我们的安全研究人员在从财富500强到DeFi巨头等最有价值的目标中发现了漏洞。无论你是在开发还是部署智能合约,Zellic经验丰富的团队都能帮助你防止被黑客攻击。

联系我们↗,进行比其他机构更好的审计。

  • 原文链接: zellic.io/blog/audit-dri...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
zellic
zellic
Security reviews and research that keep winners winning. https://www.zellic.io/