论软件钱包的安全模型 | 账本

论软件钱包的安全模型 | 账本

源节点: 2671485

我们可以区分两种流行的钱包类型:软件钱包和硬件钱包。 它们实现相同的功能,但方式不同。 软件钱包被认为更易于使用:单个程序足以创建、验证和签署交易。 使用软件钱包,无需在软件上创建交易并在硬件设备上进行确认。

两周前, 禁忌故事 公布了针对全球数千人的有针对性的攻击。 该攻击利用 Android 和 iOS 上的漏洞,安装由 NSO 组织开发的间谍软件:Pegasus。 这种恶意软件能够监控设备的整个活动,并泄露个人信息:SMS、WhatsApp 和 Signal 对话、电话等。本文解释了在这些情况下,这种恶意软件如何能够提取所有的信息。软件钱包的秘密,以及手机和台式电脑上的软件钱包之间从安全角度来看的差异。

这篇文章的目的不是很技术性。 为了保持相对简单,将仅讨论基本功能。

保护秘密

加密钱包中存储了什么?

钱包实际上并不存储用户的加密货币:它们仅存储允许访问加密货币和使用它们的能力的秘密,尤其是私钥。 这些私钥大多是ECC(椭圆曲线密码学)私钥,根据区块链的不同曲线。 最常见的曲线是 secp256k1(比特币、以太坊……)、Ed25519(门罗币)或 BLS12-381(以太坊 2)。

这些密钥用于签署交易,更普遍地用于与区块链资产进行交互。

这些密钥的存储取决于钱包的类型:确定性或不确定性。 分层确定性 (HD) 钱包允许从称为种子的单个主密钥创建密钥树(cf BIP44). 这个种子通常来自用户随机生成或选择的 12、18 或 24 个单词的助记序列(参见BIP39). 这些助记符允许限制要存储的密钥数量:它们可以随时从种子重新计算。 HD钱包只存储这个助记词或者种子。

非确定性钱包为每次使用生成一个新密钥,并且必须存储所有这些密钥。 由于备份不兼容,因此无法轻松地将非确定性钱包迁移到另一个钱包。

钱包的主要安全功能在于正确生成、存储和使用这些秘密。 针对不同类型的威胁有不同的安全级别:

  • 防止“邪恶女仆”攻击: 可以临时访问钱包的攻击者不能在钱包内添加后门,从而窃取 PIN 或密码保护机密。
  • 安全加密材料: 钱包生成的密钥和随机数绝不能是可预测的。 此外,在某个时间点生成的秘密(种子除外)的知识不允许预测将来生成的秘密。
  • 休息保护: 如果攻击者获得软件钱包的持久数据,他们一定无法提取密钥。
  • 秘密使用时的保护: 当钱包解锁时,密钥不得被攻击者或恶意软件访问。
五金钱包

硬件钱包的安全模型旨在避免这些安全威胁。 硬件钱包通过设计来防止恶意软件。 它们是独立的设备,可以自行签署交易。 加密材料始终保留在设备内部,绝不会发送到与它们通信的软件应用程序。 通信接口总是很简单,这大大减少了攻击面。 它可以是 USB、Micro SD 或相机 + 屏幕(通过二维码),或低功耗蓝牙。

此外,硬件钱包直接在设备中嵌入了一个屏幕,允许用户在与他的密钥交互时验证他将要执行的操作。 这些对设备的手动检查是针对计算机/移动设备上的恶意软件的非常有效的对策。 如果计算机/移动设备上的恶意软件可以访问秘密(种子或私钥),甚至可以在用户执行交易时交换/修改地址或金额,这对于硬件钱包来说是不可能的。

硬件钱包还旨在防止“邪恶女仆”攻击和具有物理访问权限的攻击者。 根据硬件钱包的不同,它们具有不同级别的安全性,但在所有情况下,它们都旨在抵御这些威胁。 可以找到 Ledger Nano 威胁模型的详细描述 此处.

软件钱包

常规软件钱包通过常规方式保护秘密:运行它们的操作系统的安全机制,有时是基于 PIN 或密码的访问控制。

在下文中,将考虑桌面(Windows、macOS、Linux)钱包和移动钱包。 它们之间的主要区别主要取决于操作系统提供的安全机制。

电脑上的软件钱包

一些流行的钱包,例如 Electrum、Exodus、Atomic 或 Bitcoin core,都在计算机上运行。

在计算机上,操作系统提供的用于将钱包进程与其他进程隔离开来的安全机制是有限的。 大多数应用程序由同一用户运行,并且允许应用程序读取其他应用程序的数据。

这些软件钱包的安全性主要依赖于保护它们的密码的安全性,以及操作系统上没有运行恶意软件这一事实(这很难保证,请参阅最近有关 Pegasus 的新闻)。

大多数时候,种子存储在受密码保护的加密容器中。对于恶意软件或远程管理工具,直接攻击包括检索此加密容器并将其发送给攻击者。 然后密码可以被暴力破解或通过使用 键盘记录.

在攻击者仅设法访问加密容器的情况下(攻击者找到包含钱包的 USB 密钥,或在计算机上安装恶意软件,但受害者从未打开他的钱包应用程序),攻击者必须暴力破解密码。

大多数密码是 . 网络上泄露了数十亿个密码,许多人倾向于将密码重复用于多种服务。 现成的工具允许您检索加密货币钱包的密码,例如 比特币恢复 or hashcat. 密码可能很复杂,但每个钱包背后都有真钱,因此攻击者会毫不犹豫地投入资源来破解此类密码。

确保密码安全的两个基本安全原则是使用密码管理器,以及永远不要为不同目的重复使用您的密码。

软件钱包最令人担忧的威胁是专用的恶意软件和窃取程序,它们是专门为耗尽您的资金而开发的。 此类恶意软件,例如 KPOT 或 电鼠,甚至不必暴力破解你的密码:他们可以在你输入密码时直接捕获它,解密钱包配置数据,并泄露种子。

这是为本文开发的玩具应用程序,它以 Electrum 钱包为目标(尽管它可能是另一个软件钱包)。 它模拟恶意软件,在受害者输入用户密码时窃取用户密码。 然后使用密码解密钱包数据,并显示种子:

如您所见,即使密码很复杂,应用程序也能够检索它,因为它直接在内存中嗅探它。

这个例子与最近的非常相似 .SCR 恶意软件 用于窃取加密货币的活动。 犯罪分子使用社会工程技术诱骗用户下载恶意屏幕保护程序。 这个屏幕保护程序实际上是在窃取计算机受害者的信息,包括钱包和加密货币交换信息。

总结在计算机上运行的软件钱包:

  • 在大多数情况下,在计算机上运行的软件钱包使用密码来保护用户的种子。
  • 对这些钱包文件的访问控制主要依赖于计算机的安全性。 实际上,很难保护计算机免受恶意软件的侵害,并且随着加密货币成为主流,针对钱包的攻击将变得越来越复杂。
  • 使用这样的软件钱包来保护数字资产并不是一个好主意。 任何专门的恶意软件都能够获取钱包文件并离线查找密码,或者通过键盘记录器获取密码。
智能手机上的软件钱包

Android 和 iOS 智能手机默认提供桌面操作系统上未广泛使用的安全功能。

移动操作系统提供应用程序和用户数据保护。 特别是,应用沙箱对所有应用都是强制性的。 例如,在 Windows 上情况并非如此:默认情况下,任何应用程序都可以访问用户数据。

因此,恶意应用无法从其他应用读取数据,除非:

  • 它在该应用程序上发现了一个漏洞。
  • 或者它设法提升权限,例如通过利用内核漏洞允许它获得对系统的 root 访问权限。

不幸的是,这样的攻击是存在的。 它们在过时版本的 Android 和 iOS 以及第三方代码通常不太安全的旧版或廉价设备上要容易得多。

在最新的操作系统上,这些攻击更难,但并非遥不可及。 例如,Ian Beer 展示了一个 令人印象深刻的零点击攻击 13.5 年 2020 月在 iOS XNUMX 上。Guang Gong 展示了一个 利用链 在 2020 年 XNUMX 月远程 root 各种基于 Qualcomm 的 Android 设备。而且,两周前, 禁忌故事 公布了 NSO Group 使用漏洞利用链来针对使用 0-day 漏洞的最新 iOS 和 Android 设备。

不太老练的攻击者可以利用本地漏洞从恶意应用程序中提取钱包数据。 Zerodium pay 等漏洞经纪商 高达$ 200,000 在 Android 和 iOS 上获得 root 权限,但远程攻击高达 1,500,000 美元。

我们研究了几个 Android/iOS 钱包。 它们的安全性取决于应用程序本身,但也取决于底层操作系统的安全功能。 当然,当操作系统的安全性被打败时,应用程序就不再安全了

常用的保护种子的方法有两种:

  • 密码保护 – 钱包数据受用户输入的密码保护。 设计与桌面钱包相同。 实际上,数据比从计算机中提取更难,因为从恶意应用程序中检索应用程序数据在技术上更加困难,原因如上所述。 然而,一旦数据被盗,找回密码实际上更容易:在手机上输入复杂的密码非常繁琐,因此用户倾向于选择更简单的密码。 此外,移动设备上的密钥派生机制(用于从密码创建密钥)通常更容易破解,因为出于性能原因它们通常更轻量级。
  • Coinomi 和 Metamask 是此类钱包的例子。

在下面的视频中,我们展示了为本文开发的另一个玩具应用程序。 它是一种伪装成假比特币代码小部件的恶意软件。 恶意软件利用未修补设备上的已知漏洞获取设备的根访问权限,并将加密的种子泄露到远程服务器。 然后服务器暴力破解密码来解密种子。

此方法不特定于钱包。 它可以(或多或少)轻松适应任何受密码保护的钱包。 这是他与 Coinbase 钱包相同的例子:

[嵌入的内容]

  • 基于 Android Keystore(或 iOS Keychain)的安全性 – 在这种情况下,钱包数据使用存储在 Android Keystore (iOS Keychain) 中的加密密钥进行加密。 这些服务最初旨在安全地存储加密密钥,许多应用程序使用它们来生成一个密钥,该密钥将加密所有敏感的用户数据。使用密钥库的应用程序实现以下机制:
    • 该应用程序要求密钥库为给定的标识符生成加密密钥。 Keystore 生成密钥并安全地存储它。
    • 当应用程序想要加密或解密一个 blob 时,它会将 blob 连同密钥标识符一起发送到 Keystore。
    • 最后,密钥库检查应用程序是否真的有权使用此密钥,然后将输出数据发送回应用程序。

使用此模型,应用程序无法知道密钥的值,但可以使用它。 还可以将其他访问控制与密钥相关联:例如,密钥访问可以以用户身份验证为条件(请求 PIN 码或解锁图案).

与基于密码的保护相比,此机制可以提供额外的安全性。 事实上,在最近的手机上,密钥库由可信执行环境 (TEE) 或有时是安全元素提供支持。

这意味着具有 root 权限的攻击者将无法从密钥库中提取加密密钥。 然而,他们将能够使用 Keystore 作为解密 oracle,并加密或解密他们想要的任何数据。

Keystore 提供加密,但也提供签名服务。 那么,钱包能否保护其加密密钥,使其难以提取? 很遗憾,答案是否定的: 软件钱包不使用 Keystore 来签署交易及 私钥始终由应用程序以明文形式操作.

原因很简单:KeyStore 和 KeyChain 提供通用签名和加密服务,但不支持加密货币中使用的密码学。 例如,KeyStore 实施 ECDSA 签名,但仅在 FIPS 186-4(P-224、P-256、P-384 和 P-521)中定义的 NIST 曲线上实施。 比特币使用另一条曲线, secp256k1,尚不支持。

总而言之,Keystore 和 Keychain 是很好的保护服务 秘密和私钥. 它们可以通过加密敏感数据来提供一定的安全性:某些类别的漏洞(例如,任意文件读取)将通过 Keystore 加密来解决。 但是,如果根权限升级不足以从硬件支持的密钥库中提取密钥值,则足以解密敏感数据。 能够检测该应用程序的攻击者能够检索其秘密。

总结一下手机钱包:

  • 与在计算机上运行的软件钱包相比,iOS/Android 提供的应用程序之间的隔离机制提高了安全性。 攻击者首先需要提升权限才能访问应用程序数据。 这在过时的设备上是可行的。 熟练的攻击者(Ian Beer 仅用了 6 个月就做到了,但是……是 Ian Beer)也可以在最近打过补丁的设备上做到这一点。
  • 密钥保护服务(KeyStore、KeyChain)可以添加额外的安全层来保护静态秘密。 尽管如此,由于它们不支持加密货币应用程序的加密算法,因此仍然可以提取密钥。
  • 在所有情况下,具有根访问权限的攻击者可以在使用时检索静止的种子,或者利用用户的权限使用软件钱包作为 oracle 来清空钱包。

这是针对 Blockchain.com 钱包的玩具间谍软件的最后一个示例(尽管这可以同样轻松地在许多其他钱包上执行)。 它是远程安装的,并监控钱包。 一旦用户使用他的指纹进行身份验证,加密密钥就会被解锁,钱包数据就会被解密。 间谍软件检测应用程序以检索此加密密钥。 然后它将密钥和钱包数据泄露到远程服务器:

[嵌入的内容]

结论

总之,软件钱包具有不同级别的安全性。 但是,他们的威胁模型不包括恶意软件在具有特权升级的操作系统上运行的情况。 这是设计使然:钱包应用程序不能比它运行的操作系统更安全。

  • 与在计算机上运行的软件钱包相比,iOS/Android 提供的应用程序之间的隔离机制提高了安全性。 攻击者首先需要提升权限才能访问应用程序数据。
  • 密钥保护服务(KeyStore、KeyChain)可以添加额外的安全层来保护静态秘密。 然而,由于它们不支持加密货币应用程序的加密算法,因此必须直接从应用程序中操作密钥,因此它们提供的保护有限。
  • 在所有情况下,具有 root 访问权限的攻击者可以在使用时检索静止的种子,或者利用用户的权限使用软件钱包作为 oracle 来清空钱包。

时间戳记:

更多来自 莱杰