在Kraken Security Labs,我们试图在坏人之前发现对加密用户的攻击。
CoolBitX CoolWallet S是信用卡大小的钱包,可通过蓝牙与手机应用程序(Android和iOS)配对。
我们最近发现CoolWallet S Android应用程序以纯文本形式存储了钱包的PIN,配对密码和硬件种子。 此漏洞意味着,如果手机因物理盗窃或恶意软件而受到威胁,攻击者可以轻松获取清空配对的硬件钱包所需的一切 。
您的种子在功能上与私钥相同。如果攻击者获得了您的种子,他们可以将其输入任何其他软件或硬件钱包中,从而完全控制您的资金。
此外,硬件钱包依赖于配对电话的安全保护。如果攻击者同时获得了您的手机和钱包,则他们可以解锁您的钱包并将其与另一部手机配对,或者通过按一下按钮直接从设备中汇款。
其他制造商要求在钱包上输入单独的PIN作为额外的安全保护层,但CoolWallet S则不需要。
发现后,Kraken安全实验室于1月2日向CoolWallet S团队负责地披露了此次攻击的全部详细信息,他们已经发布了修复程序,以防止该应用泄露种子,配对密码和App Lock PIN。您可以在 https://www.coolwallet.io/our-response-to-kraken-security-labs上 查看CoolWallet S团队的回复 。
您可以采取以下其他步骤来保护自己:
- 更新您的CoolBitX Crypto Android应用程序
- 验证您使用的是最新版本(截至撰写本文时为1.11.592)。
- 请勿将配对的手机随身携带或存放CoolWallet S
- 应用程序更新不会改变您的钱包安全性最终取决于手机的事实。请遵循 已配对电话上的安全性最佳做法 ,包括使用强密码并保持操作系统最新。
- 始终在CoolWallet S上生成种子
- 向用户提供了在其钱包或手机上生成种子的选项。 CoolWallet S团队修复了在手机上生成种子时发现的问题,但我们仍然认为您应该始终在钱包上生成种子。
- 打开应用锁并显示目标地址
- 该应用程序默认情况下不会启用这些安全功能,但是我们认为它们对于保护您的加密货币是必不可少的。
CoolBitX CoolWallet S是一个独特的硬件加密货币钱包,利用了独特的信用卡形式。它还具有用于加密货币的EAL 5+安全元素。
但是,尽管具有广泛的安全功能和CoolBitX安全元素的认证级别,但仍发现了几个主要的基本体系结构弱点。尽管集成了EAL5 +认证的安全元件,但无法在硬件钱包本身上执行PIN验证。而是在主机(即CoolBitX移动应用程序)上执行PIN验证。
我们在Android应用程序中发现了几个关键漏洞,这些漏洞通常允许种子提取。虽然可以修补这些漏洞,但无需在设备上输入安全的PIN,但它的安全性仅与用户的移动电话一样。
无效的“应用锁定”CoolBitX应用程序具有可选的应用程序锁定功能,该功能为应用程序实现了额外的身份验证。这要求用户输入PIN才能访问应用程序。应用锁功能不对应用程序存储的机密信息进行加密,并且有多种方法可以绕过此应用锁。
PIN的明文存储绕过应用锁的一种方法就是简单地恢复用于应用锁的PIN。 PIN以明文形式存储在应用程序的共享首选项中。可以物理访问电话或设备上安装的恶意应用程序的攻击者因此能够恢复PIN。
包含明文PIN的XML文件的内容
PIN已记录到系统日志中启动应用程序时,在输入PIN之前,明文PIN会记录到Android系统日志中,并且可以使用标准的Android调试工具以明文形式检索。
此功能包含在Android调试中的“ logcat”命令中。在较旧的Android版本上,应用程序也可以请求READ_LOG权限,这也可能允许恶意应用程序检索锁定代码。
在用户与“应用锁定”屏幕进行交互期间,该应用无法设置FLAG_SECURE标志。结果,能够记录屏幕或截屏的恶意应用程序可能会记录用户输入PIN的行为。
由于在用户与UI交互时,按钮的按下会在屏幕上突出显示,因此屏幕记录会显示用户的PIN。例如,MediaProjection API提供了足够的功能来记录PIN,并且最终的屏幕记录将包含输入的PIN。
直接执行“主要活动”该应用无法阻止用户完全绕过应用锁定。可以直接在Android应用中执行主要活动,该活动通常在成功输入PIN后执行。这可以通过另一个(恶意应用程序)或使用adb CLI工具来完成:
我开始-n com.coolbitx.cwsapp / com.cwsapp.view.MainActivity
未保护的种子当前的CoolWallet S固件和智能手机应用程序支持两种生成种子的方法。第一种方法在硬件钱包上生成种子。或者,用户可以选择在智能手机应用程序中生成种子。
种子设置不使用“安全活动”但是,Android应用程序在执行活动时未设置FLAG_SECURE标志。结果,可以通过执行屏幕记录的应用程序或ADB(即使用adb shell screencap -p /sdcard/screen.png)来捕获种子。
“种子生成”将种子两次记录到系统日志中在设备上生成种子时,种子会两次记录到Android日志中。可以使用logcat从adb CLI界面中恢复。
配对密码用于在智能手机和CoolWallet S之间进行身份验证。配对密码是一个8位数字密码,在智能手机和CoolWallet S之间共享。
要将完全配置的CoolWallet S与另一部智能手机配对,仅需要配对密码。
能够物理访问CoolWallet S和配对密码的攻击者可以随后将CoolWallet S与另一个智能手机配对,从而可以在不知道用户PIN的情况下访问CoolWallet S上存储的所有资金。
“配对密码”未使用FLAG_SECURE显示智能手机应用程序和钱包之间的配对密码的活动不使用FLAG_SECURE标志,这意味着恶意应用程序可以通过屏幕录像来恢复配对密码。
配对密码已记录到系统日志中在设备上生成种子时,种子会两次记录到Android日志中。可以使用logcat从adb CLI界面中恢复。
明文配对密码已记录到Android日志
内存中未受保护的秘密由智能手机应用程序生成的任何秘密数据(即种子或PIN)都保留在内存中。智能手机应用程序不会从内存中清除敏感数据。
结果,敏感数据可能会被智能手机应用程序泄漏到另一个恶意智能手机应用程序或从已植根的设备中恢复。
无需身份验证即可签署交易无需PIN或密码即可确认和签署交易。要使用CoolWallet S签署交易,只需访问CoolWallet和已配对的智能手机即可。访问控制的唯一形式是上述的应用锁。无需其他身份验证即可确认交易。 用户只需按下钱包上的按钮即可确认交易。
这特别成问题,因为供应商建议用户可以使用信用卡将CoolWallet S携带在钱包中。这意味着CoolWallet S的用户可能会随身携带CoolWallet S及其智能手机。
完整交易明细不会显示在钱包上此外, 默认情况下 , 目标地址不显示在钱包屏幕上。在CoolWallet S上确认交易后,仅显示金额和货币。这使得用户无法验证交易的接收者。设置中提供了“显示完整地址”选项,但是默认情况下它处于关闭状态。
如果激活了该选项,则该地址将以自定义字母显示,从而使得验证地址既繁琐又容易出错。在实践中,验证地址非常繁琐且困难,以至于交易经常超时。此外,自定义字母不区分大小写,这意味着设备无法准确显示某些地址格式。