探索MetaMask Snaps的安全格局

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

本文由Consensys Diligence的安全专家撰写,深入探讨MetaMask Snaps的信任模型和安全最佳实践。文章指出,在MetaMask生态中,用户信任MetaMask但不信任dapp,Snaps作为信任模块必须遵循这一原则。作者基于对40个Snaps的审计分析,将常见安全问题分为用户输入验证、用户同意与UI、依赖问题、权限与授权等类别,并给出具体案例。最后为开发者提出建议:请求最小权限、验证和净化用户输入、管理供应链依赖,以构建更安全的Snaps。

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

探索 MetaMask Snaps 的安全格局

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

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

理解 MetaMask Snap 信任模型

每个 Snaps 开发者都需要理解 MetaMask Snaps 固有的信任模型。该信任模型界定了不同参与者之间的信任边界。需要记住的关键信息是:最终用户信任 MetaMask,但不信任去中心化应用

我们在下图中整理并总结了该信任模型。此图展示了开发者在开发 Snaps 时必须牢记的不同信任边界:

web3 去中心化应用、用户和 MetaMask 的三个主要信任边界

首先,用户与去中心化应用之间存在信任边界。用户从不信任去中心化应用。事实上,去中心化应用可能怀有恶意,也可能被攻破。它们可能让用户以为自己正在签署某个特定的载荷,而实际上用户签署的是别的内容。

其次,MetaMask 及其扩展周围存在信任边界。虽然用户不信任去中心化应用,但他们信任 MetaMask。MetaMask 是用户的真相来源。在 MetaMask 内部(无论是通过其核心模块还是 Snaps)显示和签署的载荷才是真正重要的。

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

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

解读 MetaMask Snaps 中的常见问题

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

用户输入验证:

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

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

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

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

    • 不正确的 URI 验证:例如,在验证 URI 时使用宽松的正则表达式可能导致此问题。

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

  1. 打破 MetaMask 既定的用户体验模式:当应用程序偏离 MetaMask 既定的用户体验模式时,会出现此问题。

    • 未提示用户授予账户访问权限:MetaMask 在将任何账户连接到去中心化应用之前总是会提示用户。Snaps 开发者应遵循相同的模式。

    • 账户枚举:一种隐私问题,即应用程序可能在未经适当同意的情况下枚举或列出用户账户。

  2. 未征求用户同意:

    • 签署载荷时:指应用程序在未经用户明确批准的情况下执行签名相关操作。

    • 未使用密码可见性切换显示私钥:私钥在显示时没有使用点击显示组件并附带免责声明文本。例如,如果用户处于公共环境中,这可能带来问题。

  3. 不透明的 Snap 对话框:缺乏透明度或清晰度的对话框。

    • 缺少信息的交易签署对话框:在交易签署对话框中遗漏了关键信息,或呈现给用户的信息不可读。

    • 费用舍入不精确问题:涉及费用计算和显示中的不准确或缺乏精度。

    • 未显示来源:Snap 未显示操作的来源。这可能会欺骗用户,使其认为该操作是由某个去中心化应用发起的,而实际上它来自另一个去中心化应用。

依赖项问题:

  1. 存在漏洞或不可信的依赖项。

  2. 供应链攻击:依赖项可能通过直接或间接的攻击向量被攻破。

  3. 过时的依赖项:依赖过时的依赖项可能产生严重的安全隐患,因为这些依赖项可能包含漏洞。

权限与授权问题:

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

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

  3. 加密材料的泄露:

    • 去中心化应用请求私钥:私钥绝不能离开 MetaMask!

    • 账户管理:在首次连接时,Snap 应在连接任何账户之前提示用户。

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

Snap 开发者关键要点

请意识到你正在开发一个信任模块!用户信任 MetaMask,但不信任去中心化应用。用户必须确认每个操作,并且他们应获得所有可用信息以做出明智的决定。密钥绝不能离开 MetaMask。因此,作为 Snaps 开发者,你可以:

  1. 请求最小权限: Snaps 应仅请求其操作所需的具体功能或数据,以最小化攻击面。

  2. 验证并清理受污染输入: 避免注入攻击或执行不可信代码。鉴于 Snap 能够扩展用户钱包的功能,确保所有输入安全且无漏洞对于保护钱包完整性和用户资产至关重要。

  3. 管理供应链: 仔细选择并更新依赖项以避免漏洞。

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

Consensys Diligence 已帮助区块链生态系统中广泛的项目确保其协议准备就绪、可以上线,并构建为保护用户。Consensys Diligence 很高兴通过定制审计检查你的 Snap 是否存在这些漏洞及更多漏洞。联系我们获取报价!

Martin Ortner (tintinweb)

Valentin Quelquejay

Martin 和 Valentin 是 Consensys Diligence 的安全专家,处于 Snap 安全研究的前沿,勤勉地致力于提升平台的安全性。

订阅 Alpha,获取市场阿尔法信息直接发送到你的收件箱

电子邮件地址*

表单名称

了解我们的隐私实践,请参阅隐私声明

reCAPTCHA

Recaptcha 需要验证。

受到 reCAPTCHA 保护

订阅 订阅

了解我们的隐私实践,请参阅隐私声明

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

相关文章

0 条评论