比特币钱包破解:我要你钱包里的一切

 

0x01 Introduction

比特币钱包是私钥和公钥的集合,通过它们可以成功完成资金转移。换句话说,比特币钱包是恶意行为者获得对个人比特币控制权的单点故障或攻击媒介。曾有几起引人注目的事件,其中比特币钱包遭到破坏,造成的损失达数百万美元。比特币钱包中唯一的安全形式是为每个比特币钱包提供的密钥。

此实现的缺点来自存储在比特币钱包中的私钥。如果恶意行为者可以访问该比特币钱包,则他们可以使用该私钥来控制该用户的比特币。比特币基础设施使用私钥作为认证关联比特币地址拥有的任何比特币所有权的方式。如果私钥丢失,所有所有权也将丢失。

本文研究了两种流行的比特币热钱包,即:Multibit HD和Electrum。每种钱包都有设计缺陷,并可以对这两个钱包中存储的比特币的未授权访问,受密码漏洞利用( password exploit )和恢复钱包漏洞利用(restore wallet exploit )的威胁。研究结果表明,可以通过离线暴力破解密码尝试访问Multibit HD和Electrum钱包。一旦找到密码就有可能恢复其中包含所有比特币的钱包。

研究设置包括三个阶段,其中前两个阶段用于实验设置,而第三阶段则主要从终端用户角度进行。三个阶段设置如下:

 

0x02 Bitcoin wallet

比特币钱包与银行账户或网络钱包非常相似。它使软件可以创建一对密钥:一个私钥和一个公钥。密钥生成是该过程的重要组成部分。对于用户而言,它应该很容易记住,但其他人很难正确猜到。公钥将被生成为一个地址,并用于区块链平台。但是,如果要公开地址,那么攻击者将可以暴破来简单猜测私钥,监视未使用的事务输出缓存(UTXO缓存)中是否有匹配的地址。因此,将资金存入类似地址的帐户存在风险。

为了避免发生此类盗窃,一种选择是使用安全私钥生成器,该生成器生成的密钥可能具有最大的随机数,并且具有较高的熵。许多生成钱包的软件(例如比特币)都使用此系统。这些钱包保留了仅对用户“可见”的密钥副本。这些钱包还允许用户通过生成新密钥并将其保存在钱包中的安全位置来备份其密钥。对于用户来说,安全备份自己的钱包并定期更换钥匙以最大程度地减少盗窃的可能性显然至关重要。比特币钱包和实体钱包之间存在许多差异,如下:

A、控制

实物钱包是有形物品,可以被单个人窃取,使用或拥有。它不能被复制或不需要保护性密码即可访问。另一方面,比特币钱包可以轻松地复制,并且使用它的用户可以识别其所有权。它具有保护性通用密钥,并且钱包的所有权属于拥有该保护性密钥的人,在这种情况下,该密钥为私钥。复制钱包会发生比特币欺诈,从而有效地“窃取”钱包。
B、可用性

由于有形性,一个实体钱包只能一次由一个人使用,因为一次只能存在一个钱包。相比之下,比特币钱包可以具有各种副本,并且可以从多个独特的设备进行访问。私钥和签名要求可以轻松转移到相应的驱动器,但是使用可能需要这些设备之间的协作。这使得比特币钱包易于访问,并且促进了比实体钱包更多类型的钱包。

C、仅收款

“仅收款”钱包也被称为“仅可查看”钱包,其中的资金只能收款而不能用。在不信任用户或需要监视钱包的情况下,向用户提供保护密钥(也称为公共密钥)的副本。仅当使用钥匙时,才能访问仅可查看钱包。

 

0x03 Phase 1

此阶段包括准备测试环境以及安装和配置必要的工具。为了准备测试环境,在实验中创建了一个新的Windows 7虚拟机(VM), VM已配置有4 GB RAM和500 Gb磁盘大小。还在虚拟机上增加了网络功能,以便可以利用另一个虚拟机的计算能力,第二个VM具有与第一个相同的配置。

下一步是安装和设置钱包(Multibit HD v0.4.1)。创建钱包时,应拍摄钱包单词和日期戳的屏幕快照,执行该步骤以将最终结果与初始钱包单词进行比较。接下来安装了Cheat Engine,这是一个开源内存扫描器/ hex编辑器/调试器。该工具使可以搜索用户使用多种选项输入的值,以及查找和排序设备的内存,下表为使用工具:

 

0x04 Phase 2

第二阶段是设置和创建用于破解钱包单词的软件包。在实验中执行了作弊引擎软件,在作弊引擎中选择了“值类型”作为字符串,并扫描了Multibit HD钱包单词中的随机关键字。浏览关键字结果的存储位置后可以看到其他几个英语词典单词。使用作弊引擎从Multibit HD提取了总共2053个字典单词。下图显示了在内存分析中发现的字典单词,这些单词被收集并编译到数据库中,称其为字典数据库。

此阶段的下一步是创建攻击者程序包。本文中选择的钱包是一个托管在用户个人计算机上的桌面应用程序,在创建时,钱包建议使用12种子密码。用户可以使用生成的密码或12种子密码来访问资金。后者是来自在钱包应用程序中加密的2100个词典单词中12/24个单词的组合。经过多方面的考虑和可能性的尝试,破解钱包的可用选项是识别字典并尝试所有可能的组合。

上面确定的解决方案涉及以下步骤:

•提取字典

•创建字典文件的组合

•检查正确的密码

要实现上述三个步骤,选择破解密码的过程是离线暴破攻击,这是一个反复试验的模型,非常耗时。它涉及尝试序列中所有可能的字符组合以破解加密网关。所需时间随复述中涉及的字符或单词的数量而变化。反向暴破(即当知道密码并应标识用户时)相对而言需要更少的时间来成功,但这不适用于本实验。

使用从钱包应用程序中提取的2100个单词集(以下称为“数据集”)作为软件包的输入,以生成可用于离线暴破攻击的字典文件。巨大的数据集需要在服务器上维护一个标准的stanalone数据库。

 

0x05 Phase 3

由于研究中的两个钱包都没有可用于存储密码的内置存储或云存储,因此排除了使用shell或批处理过程一次尝试破解具有多个条目的应用程序的可能性。换句话说,如果人们正在使用可用于存储密码的内置存储或云存储来检查比特币钱包,则使用自动脚本破解应用程序可能会更容易。

另外,正在研究的两个钱包都不是基于Web的应用程序,因此不可能使用面向对象的编程语言与Web元素进行交互。因此,选择了能够与桌面应用程序进行交互的应用程序,并创建了25行触发器以从提取的数据集中创建可能的组合。花费的时间比任何传统的密码破解方法都要多,但是台式机工具上具有BIP 32加密的安全钱包排除了许多其他更简单的选择。

也可以利用多台计算机或虚拟机(VM)加快攻击速度,这是本文中的方法。具体来说将独立服务器与在主机上并行运行的VM层配合使用,同时尝试破解钱包。使用的Java代码段生成的整个字典可以有效地在VM上平均分配,并且可以同时对钱包进行离线暴破。在尝试访问钱包的过程中,将保存可能成为任何钱包(不仅是当前钱包)真正组合的组合,以利于将来在其他钱包上进行暴力破解。

如前所述,随着所涉及的VM的增加,获得12单词的种子所需的时间减少。因此,主机和VM的配置得以改善,所涉及的内核数量,处理器时钟,RAM(分配的堆)数量增加了一倍。在实施升级以增强性能之前的主要考虑因素是对存储容量和存储速度的要求,可以通过更高的硬件规格(例如RAM芯片,硬盘驱动器(HDD)和处理器)来获得存储容量和存储速度。例如:

•内存容量:内存模块具有的更多千兆字节(GB),一个模块可以一次打开更多的程序。

•内存速度:RAM从处理器接收请求然后读取或写入数据所花费的时间。

如果在攻击过程中一个内存用完了,则可以将另一张磁盘用作替换(即交换)。更多的RAM内存意味着更多的指令可以放入该内存,因此,可以立即加载更大的程序。通过实施上述选项,发现可提高约80%。

 

0x06 Attack Result of MultiBit HD

在软件包中使用生成的字典文件作为攻击的输入,并且能够成功识别给定12个单词(种子)的多个组合。这会触发“next”按钮指示将钱包标记为组合的可能性。不过,由于该组合尚未在钱包应用程序附近(网络)的可用资源中分配给某个钱包,因此无法用于检索密码,随着提供给应用程序的组合数量的增加,已识别的有效组合的百分比逐渐降低。

为MultiBit HD识别的有效组合还可以用于在安装钱包的设备损坏或丢失的情况下恢复钱包。此功能需要种子以及在生成钱包时提供的日期时间戳,这意味着在暴破攻击实施时生成的有效组合和时间戳。下图显示了Multibit HD桌面钱包应用程序的结果。

 

0x07 Attack Result of Electrum

Electrum没有提供允许仅使用有效组合来还原钱包的时间戳功能,并且如果尚未将钱包分配给用户,则恢复过程将导致一个空的钱包。换句话说如果已将其分配给用户,则攻击者可以获得对钱包中所存储货币的未授权访问,这是在实验中设法实现的目标。

从上图中可以看出,对于给定的12单词词种子,给定的字典有效的组合数量在1.01%和10%之间。从结果中可以明显看出,为数据集生成有效组合数量(10的倍数)的函数与数量成反比,该函数趋向于> 1%。因此可以说明以合理的计算能力来利用此漏洞,能够获取对钱包的未授权访问。

 

0x08 Conclusion

在本文中研究了两个流行的比特币钱包Multibit和Electrum,并揭示了以前未知的安全漏洞。恶意行为者可能利用这些漏洞来访问这些钱包中的任何一个,并声明其中的比特币所有权。虽然此研究的结果仅限于这两个比特币钱包,但该研究的未来扩展包括设计更有效的软件,该软件能够在不同的操作系统上对更广泛的比特币钱包进行在线和离线暴破攻击(例如Android和iOS)。

(完)