解读 MetaMask Snaps 的安全格局

metamask 发布于 2023-12-13 阅读 6

本文由Consensys Diligence安全审计员撰写,深入剖析了MetaMask Snaps的安全模型。

这篇博客探讨了 MetaMask Snaps 的信任模型,详细介绍了 Web3 生态系统中常见的安全问题及开发者的最佳实践。

导航 MetaMask Snaps 的安全领域

MetaMask Snaps 是一个开源系统,使用户能够安全地扩展 MetaMask 的功能,提供新的钱包体验。其核心是 Snap 是一个在 MetaMask 内部隔离环境中运行的 JavaScript 程序。

在这篇博客中,我们将探讨 MetaMask Snaps 的安全领域。作为 Consensys Diligence 的区块链安全审计员,我们专注于智能合约安全。Consensys Diligence 是一家区块链安全公司,提供全面的智能合约审计服务,帮助 Web3 项目构建安全的去中心化应用(dapp)。

理解 MetaMask Snap 信任模型

每一位 Snap 开发者都需要理解 MetaMask Snaps 固有的信任模型。这个信任模型划定了不同参与者之间的信任边界。需要记住的关键信息是:最终用户信任 MetaMask,但不信任 dapp

我们在下图中对信任模型进行了形式化总结。该图描述了开发者在开发 Snap 时必须牢记的不同信任边界:

Web3 dapp、用户和 MetaMask 的三大信任边界

首先,用户和 dapp 之间存在信任边界。用户从不信任 dapp。事实上,dapp 可能是恶意的或遭到入侵的。它们可能让用户相信自己正在签署某个给定的有效负载,而实际上用户签署的是其他内容。

其次,MetaMask 及其扩展周围存在信任边界。实际上,虽然用户不信任 dapp,但他们信任 MetaMask。MetaMask 是用户的事实真相来源。在 MetaMask 内部(无论是通过其核心模块还是 Snap)显示和签署的有效负载才是关键所在。

第三,MetaMask 核心模块和 Snap 之间也存在信任边界。实际上,Snap 开发者可以通过 Snaps API 与 MetaMask 的核心模块交互。该 API 实现了一个权限系统,意味着开发者在访问受限的 API 功能之前必须请求权限。但是,拥有适当权限后,Snap 可以执行关键操作,例如访问 MetaMask 的根熵、签署数据或与外部 API 通信。

本质上,MetaMask 生态系统中最终用户的指导原则简单而深刻:最终用户只需信任在 MetaMask 和 MetaMask Snap 上下文(称为信任模块)内发生的信息和交互。

解码 MetaMask Snaps 中的常见问题

MetaMask 信任模型允许进行结构化的审计方法,并帮助审计员识别安全问题。在我们的 Snap 审计中,我们发现了不同类别的问题。我们仍对其他潜在类别感兴趣。因此,我们对 9 家审计公司审计的 40 个 Snap 进行了综合分析。我们创建了一个分类体系,并根据此分类对问题进行了归类。下面我们重点介绍几个有趣的类别以及一些示例。请注意,此列表并非详尽无遗。

用户输入验证:

  1. Markdown 和控制字符注入:这涉及用户输入中通过 Markdown 或控制字符注入不需要的代码或命令的风险。

  2. 用户输入清理和验证:

    • 类型检查/类型混淆和解析问题

    • API 未拒绝无效的 RPC 参数:当 API 未能拒收无效参数(如错误的链 ID、地址校验和或费用结构)时,便会出现此问题。

    • URI 验证不当:例如,在验证 URI 时使用了宽松的正则表达式,可能出现此问题。

用户同意和用户界面问题:

  1. 打破 MetaMask 已建立的 UX 模式:应用程序偏离 MetaMask 已建立的用户体验模式时会出现此问题。

    • 未提示用户进行账户访问:在将任何账户连接到 dapp 之前,MetaMask 始终会提示用户。Snap 开发者应遵循同样的模式。
    • 账户枚举:这是一种隐私问题,应用程序可能在未经适当同意的情况下枚举或列出用户账户。
  2. 未征求用户同意:

    • 签署有效负载时:指应用程序在未经用户明确批准的情况下执行签名相关操作。
    • 未使用密码可见性切换显示私钥:私钥显示时没有使用点击显示组件并附带免责声明文本。例如,如果用户处于公共环境中,这可能会带来问题。
  3. 不透明的 Snap 对话框:缺乏透明度或清晰度的对话框。

    • 缺少信息的交易签署对话框:交易签署对话框中遗漏了关键信息,或者呈现给用户的信息不可读。
    • 费用四舍五入不精确问题:涉及费用计算和显示时的不准确或精度不足。
    • 未显示来源:Snap 未显示操作的来源。这可能会欺骗用户,让他们以为操作是由某个 dapp 发起的,而实际上却来自另一个 dapp。

依赖性问题:

  1. 易受攻击/不受信任的依赖项。
  2. 供应链攻击:依赖项可能通过直接或间接的攻击向量遭到入侵。
  3. 过时的依赖项:使用过时的依赖项可能带来不良的安全影响,因为这些依赖项可能包含漏洞。

权限和授权问题:

  1. 多余的权限:授予过多权限会降低安全性。

  2. 访问低级别权限:例如,不当管理以太坊的 MetaMask 根密钥熵。

  3. 加密材料的泄露:

    • dapp 请求私钥:私钥绝不能离开 MetaMask!
    • 账户管理:在首次连接时,Snap 应在连接任何账户之前提示用户。

我们目前正在完善分析结果并发现新的见解。更多内容即将推出。敬请期待 :)

Snap 开发者的关键要点

请注意,你正在开发一个信任模块!用户信任 MetaMask,但不信任 dapp。用户必须确认每一个操作,并且应该拥有所有可用信息来做出明智决定。密钥绝不能离开 MetaMask。因此,作为 Snap 开发者,你可以:

  1. 请求最小权限: Snap 应仅请求其运行所必需的特定功能或数据的访问权限,以最小化攻击面。
  2. 验证和清理受污染输入: 避免注入攻击或执行不受信任的代码。鉴于 Snap 能够扩展用户钱包的功能,确保所有输入安全无误且不易被利用对于保护钱包完整性和用户资产至关重要。
  3. 管理供应链: 仔细选择和更新依赖项以避免漏洞。

在开发过程中牢记这些原则和潜在常见问题,将使 Snaps 的未来对下一个十亿用户更加安全。

Consensys Diligence 已经帮助区块链生态系统中的众多项目确保其协议准备好发布并能够保护用户。Consensys Diligence 很高兴通过定制审计检查你的 Snap 是否存在这些漏洞及其他漏洞。联系我们获取报价!

Martin Ortner (tintinweb)

Valentin Quelquejay

Martin 和 Valentin,Consensys Diligence 的安全专家,处于 Snap 安全研究的前沿,致力于增强平台的安全性。

订阅 Alpha,将市场阿尔法直接发送到你的收件箱

订阅订阅

  • 原文链接: metamask.io/news/navigat...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~

相关文章

0 条评论