区块链钱包漏洞可窃取加密货币

华盟原创文章投稿奖励计划

区块链钱包漏洞可窃取加密货币

文章来源:嘶吼专业版

Check Point研究人员在Everscale区块链钱包中发现安全漏洞,可以窃取用户加密货币。

 Ever Surf

Ever Surf是一个跨平台的消息应用,一个区块链浏览器,也是Everscale区块链的加密货币钱包。使用React Native开发框架编写,同时上传到了Google Play Market和Apple Store应用市场。同时,还有一个可运行在任意平台的Ever Surf web版本。

区块链钱包漏洞可窃取加密货币

图1 Ever Surf web版

 漏洞分析

Surf钱包中用于对交易进行签名的密钥只保存在用户设备上。所有对区块链的操作都是在客户端来实现的。因此,与其他非托管钱包类似,无需注册过程。

用户首次运行应用时,会被建议创建一个新的钱包。Surf会生成一个seed词组和公私钥对。此外,用户会被要求创建一个6位数字的PIN码:

区块链钱包漏洞可窃取加密货币

图2 Ever Surf中的PIN码设置

然后该PIN码被用于登入应用和确认交易。Surf有应对暴力破解PIN码的保护机制:

区块链钱包漏洞可窃取加密货币

图3 Ever Surf 预防暴力破解PIN码

即使没有这类保护机制,创建的密钥和seed 词组都保存在浏览器的本地存储中。本地存储是使用localstorage特征从JS访问的key-value存储,比如:

// Store value on the browser beyond the duration of the sessionlocalStorage.setItem('key', 'value');// Retrieve value (persists even after closing and re-opening the browser)alert(localStorage.getItem('key'));

Surf以下面的格式将密钥和seed 词组保存在本地存储的“surf.ton.wallet” key中:

区块链钱包漏洞可窃取加密货币

图4 保存在浏览器localStorage中的加密的钱包数据

本地存储在web浏览器中并不是受保护的。比如,在Firefox中本地存储以非加密的SQLite数据库的形式存储:

MozillaFirefoxProfiles{profile_name}webappstore.sqlite

Chrome 将local storage以非加密的levelDB数据库的形式存储:

GoogleChromeUser DataDefaultLocal Storageleveldb

也就是可以通过物理或恶意软件访问用户计算机的用户就可以获得这些数据。

此外,本地存储还可以被浏览器扩展访问,然后浏览器扩展可以泄露保存的数据。研究人员创建了一个简单的Chrome web扩展实现了该功能:

alert(localStorage.getItem("surf.ton.wallet"));

安装该扩展后,打开Surf网站后,就可以看到包含加密的keystone的消息:

区块链钱包漏洞可窃取加密货币

图5 使用浏览器扩展从localStorage中提取加密的钱包数据

因为控制用户钱包的数据是保存在用户计算机上的,因此对用户资金的唯一保护就是强加密。

 Keystore加密

Surf应用会在用户输入正确PIN码后加密seed词语并向用户显示:

区块链钱包漏洞可窃取加密货币

图6 Surf要求用户输入PIN码

研究人员分析发现askForPassword函数会被调用,并接收加密的keystore。

区块链钱包漏洞可窃取加密货币

图7 负责取回seed词语的函数

askForPassword函数会调用validatePassword 函数来执行PIN码验证。

区块链钱包漏洞可窃取加密货币

图8 askForPassword函数读取和验证PIN码

最重要的动作是PIN码验证。通过调用deriveKeyFromPasswordAndSalt 函数,Surf会生成派生密钥,用于解密keystore。然后在isDerivedKeyCorrect 函数中使用nacl_secret_box_open执行解密过程:

区块链钱包漏洞可窃取加密货币

图9   Surf使用nacl_secret_box_open解密密钥

在deriveKeyFromPasswordAndSalt函数中,Surf会使用使用Scrypt密钥派生函数从PIN码中派生出解密密钥:

区块链钱包漏洞可窃取加密货币

图10 – Surf 派生keystore解密密钥

 攻击场景

Checkpoint研究人员重新实现了nodeJS的密钥派生和keystore解密,并对PIN码执行了暴力破解攻击。在4核Intel i7处理器上每秒钟可以破解95个密码。虽然效率不高,但是足以对6位PIN码发起攻击了。在最坏情况下,检查10^6个可能的表中只需要175分钟。

研究人员在测试中,在Surf中创建了一个新的密钥,并从浏览器的本地存储上复制出了keystore:

{    "encSeed": {        "encStr":"6rjkbh88WXkrJWl4os3cjRzvZkQGlnV39U3YvLYUrM7yzf6h79XxXX/VziNde2bkPeSnJZ11Yi4T8CFgPJMyI1W+EN0Yzw+FDdtTq5gaKHjk5nF60CSHZ4qKXObIQ7zBbped",        "nonce":"2Tdr9FFP0RcpjecwcS8XtcC5M2/FRY+I"    }}

攻击过程只花费了38分钟。最后成功获得了派生密钥,并解密了seed词组,可以用于恢复另一个设备上的密钥。

区块链钱包漏洞可窃取加密货币

图11 PIN码暴力破解结果

 漏洞修复

Checkpoint研究人员将该漏洞提交给了 Ever Surf 开发者,开发团队通过发布桌面版的方式修复了该漏洞。目前,该web版本只用于开发用途。账户的seed词组不在Ever Surf web版中使用。

参考及来源:https://research.checkpoint.com/2022/check-point-research-detects-vulnerability-in-the-everscale-blockchain-wallet-preventing-cryptocurrency-theft/

如侵权请私聊删文

区块链钱包漏洞可窃取加密货币

本文来源嘶吼专业版,经授权后由华盟君发布,观点不代表华盟网的立场,转载请联系原作者。