慢雾:警惕 Web3 钱包 WalletConnect 钓鱼风险
WalletConnect 钓鱼风险介绍
2023 年 1 月 30 日,慢雾安全团队发现 Web3 钱包上关于 WalletConnect 使用不当可能存在被钓鱼的安全风险问题。这个问题存在于使用移动端钱包 App 内置的 DApp Browser + WalletConnect 的场景下。
我们发现,部分 Web3 钱包在提供 WalletConnect 支持的时候,没有对 WalletConnect 的交易弹窗要在哪个区域弹出进行限制,因此会在钱包的任意界面弹出签名请求。
当用户离开 DApp Browser 界面切换到钱包其他界面如示例中的 Wallet、Discover 等界面,由于钱包为了不影响用户体验和避免重复授权,此时 Wallet Connect 的连接是没有断开的,但是此时用户却可能因为恶意 DApp 突然发起的签名请求弹窗而误操作导致被钓鱼转移走资产。
动态演示 GIF 如下图:
攻击者利用恶意 DApp 钓鱼网站引导用户使用 WalletConnect 与钓鱼页面连接后,然后定时不间断发送恶意的签名请求(如 eth_sign 这种盲签、授权签名、针对特殊智能合约协议的交易签名等,后面以 eth_sign 作为举例)。用户识别到 eth_sign 可能不安全拒绝签名后,由于 WalletConnect 采用 wss 的方式进行连接,如果用户没有及时关闭连接,钓鱼页面会不断的发起构造恶意的 eth_sign 签名弹窗请求,用户在使用钱包的时候有很大的可能会错误的点击签署按钮,导致用户的资产被盗。
这个安全问题的核心是用户切换 DApp Browser 界面到其他界面后,是否应继续自动弹窗响应来自 DApp Browser 界面的请求,尤其是敏感操作请求。因为跨界面后盲目弹窗响应很容易导致用户的误操作。
这里面涉及到一个安全原则:WalletConnect 连接后,钱包在检测到用户切换 DApp Browser 界面到其他界面后,应该对来自 DApp Browser 的弹窗请求不进行处理。
另外需要注意的是,虽然移动端钱包 App + PC 浏览器的 WalletConnect 连接场景也存在同样的问题,但是用户在这种场景下或许不那么容易误操作。
WalletConnect 连接后界面切换的处理情况
慢雾安全团队抽取市面热门搜索和下载量比较大的 20 个 Crypto Wallet App 进行测试:
根据上表测试结果,我们发现:
1. 部分热门钱包 App 如 MetaMask、Enjin Wallet、Trust Wallet、SafePal Wallet 及 iToken Wallet 等,在 WalletConnect 连接后切换到其他界面时,会自动响应 DApp 的请求,并弹出签名窗口。
2. 大部分测试的钱包 App 在切换界面后,对 DApp 的请求不会做出响应,也不会弹出提示窗口。
3. 少数钱包 App 在测试环境下无法使用 WalletConnect 与 DApp 连接,如 Coinbase Wallet 和 MEW Crypto Wallet 等。钱包的 DApp 中不是很适配 WalletConnect 接口。
4. 部分钱包 App 如 Exodus Wallet 和 Edge Wallet 在连接测试环境下未找到相关的 DApp 进行测试,无法判断其切换界面后的响应情况。
WalletConnect 钓鱼风险的发现和后续
慢雾安全团队最初在 Trust Wallet 上发现这个问题,并通过 Bugcrowd 漏洞提交平台向他们提交了这个问题,我们获得了 Trust Wallet 的感谢,他们表示将在下一个版本修复这个安全风险。
特别的是,如果钱包对 eth_sign 这种低级签名函数(盲签)没有任何风险提醒,eth_sign 这是一种非常危险的低级签名,大大加剧了 WalletConnect 这个问题钓鱼的风险。
不过如果只是禁用了 eth_sign 也不是完全没有风险(本文仅是拿 eth_sign 举例说明),我们还是呼吁更多的钱包开始禁用它。以用户数量最多的 MetaMask 钱包为例,其插件端已经在 2023 年 2 月 10 号发布的 V10.25.0 版本默认禁用 eth_sign,而移动端也在 2023 年 3 月 1 号发布的版本号为 6.11 开始默认不支持 eth_sign,用户需要到设置里手动打开才能使用它。
(Refer: https://github.com/MetaMask/metamask-extension/pull/17308)
(Refer: https://github.com/MetaMask/metamask-mobile/pull/5848)
不过值得一提的是,MetaMask 6.11 版本之后添加了对 DApp 进行 URI 请求的校验,但是这个校验在 DApp 使用 WalletConnect 进行交互的时候,同样会进行弹窗警告,不过这个警告存在被无限制弹窗导致 DoS 的风险。
总结与建议
对个人用户来说,风险主要在 “域名、签名” 两个核心点,WalletConnect 这种钓鱼方式早已被很多恶意网站用于钓鱼攻击,使用时务必保持高度警惕。
对钱包项目方来说,首先是需要进行全面的安全审计,重点提升用户交互安全部分,加强所见即所签机制,减少用户被钓鱼风险,如:
-
钓鱼网站提醒:通过生态或者社区的力量汇聚各类钓鱼网站,并在用户与这些钓鱼网站交互的时候对风险进行醒目地提醒和告警。
-
签名的识别和提醒:识别并提醒 eth_sign、personal_sign、signTypedData 这类签名的请求,并重点提醒 eth_sign 盲签的风险。
-
所见即所签:钱包中可以对合约调用进行详尽解析机制,避免 Approve 钓鱼,让用户知道 DApp 交易构造时的详细内容。
-
预执行机制:通过交易预执行机制可以帮助用户了解到交易广播执行后的效果,有助于用户对交易执行进行预判。
-
尾号相同的诈骗提醒:在展示地址的时候醒目的提醒用户检查完整的目标地址,避免尾号相同的诈骗问题。设置白名单地址机制,用户可以将常用的地址加入到白名单中,避免类似尾号相同的攻击。
-
在交易显示上,可以增加对小额或者无价值代币交易的隐藏功能,避免尾号钓鱼。
-
AML 合规提醒:在转账的时候通过 AML 机制提醒用户转账的目标地址是否会触发 AML 的规则。
请持续关注慢雾安全团队,更多的钓鱼安全风险分析与告警正在路上。
慢雾科技作为一家行业领先的区块链安全公司,在安全审计方面深耕多年,安全审计不仅让用户安心,更是降低攻击发生的手段之一。其次,各家机构由于数据孤岛,难以关联识别出跨机构的洗钱团伙,给反洗钱工作带来巨大挑战。而作为项目方,及时拉黑阻断恶意地址的资金转移也是重中之重。MistTrack 反洗钱追踪系统积累了 2 亿多个地址标签,能够识别全球主流交易平台的各类钱包地址,包含 1 千多个地址实体、超 10 万个威胁情报数据和超 9 千万个风险地址,如有需要可联系我们接入 API。最后希望各方共同努力,一起让区块链生态更美好。