Cobo安全团队:区块链安全交易指南
原文作者:Cobo Global
Cobo 安全团队通过整理链上交易过程中常见的风险点,编写了交易安全的执行准则,旨在让用户在交易过程中规避风险,保障资金安全,防范钓鱼攻击。
随着比特币?ETF?的通过,区块链市场开始回暖。币价的回升让行业逐渐恢复了往日的繁荣。与此同时黑客活动也开始活跃起来。Cobo 安全团队观察到近一两个月钓鱼案件发生的频率也有所增加。
近期 Restaking, BTC L2 等新的应用热点开始涌现,链上交易逐渐成为 Web3 用户日常不可或缺的一部分,越来越多的用户资金也在往链上转移。
而与交易所等中心化应用不同,链上应用的账户安全需要通过用户自己保障。安全地进行区块链交易是 Web3 原住民最基本的能力。尽管很多基础设施如浏览器插件钱包,甚至浏览器本身都对针对钓鱼有一定的风险提醒,但用户因不安全交易导致资产损失的事件还是时有发生(如私钥泄露,签名钓鱼等)。
Cobo 安全团队通过整理链上交易过程中常见的风险点,编写了交易安全的执行准则,旨在让用户在交易过程中规避风险,保障资金安全,防范钓鱼攻击。
在开始介绍之前,Cobo 安全团队为大家总结了安全交易的核心准则,如下:
1、拒绝盲签,不理解的交易、消息不签名;
2、不厌其烦,反复验证。
钱包安装目前 DApp 的主流使用方式是使用浏览器插件钱包进行交互。EVM 链使用的主流钱包有 Metamask 和 Rabby ?等。
Cobo 安全团队在深度体验后,基于风险提示的角度,推荐使用 Rabby 插件钱包来作为主要的链上交互钱包。其原因在于:相较于 Metamask 钱包,Rabby 钱包提供交易数据解析、交易模拟执行、交易风险预警、授权查询和历史签名数据查询等功能,在针对钓鱼防范上会比 Metamask 钱包具有更大的优势。
安装 Chrome 插件钱包,需要确认从 Chrome 应用商店中下载安装,不要从第三方网站安装钱包,避免安装有后门的钱包软件。
有条件的用户建议联合使用硬件钱包,在私钥保管上可以更大程度地提高整体的安全性。
尽量不要从 Google 搜索关键字第一名直接进行访问,钓鱼攻击者可通过购买广告位使自己的钓鱼网站搜索排名置顶,因此第一名不一定是官方网站。
避免直接点击 x.com 及各类社交软件中其他用户的评论、消息中发布的网址,这类网址很可能是钓鱼链接。
反复确认 DApp 网址正确性后进行访问,可根据 DefiLlama 等 DApp 市场、项目方官方 X 账号、Google 搜索结果多方校对。
确认安全的网站添加过浏览器收藏夹中,后续直接从收藏夹中访问。
在已经打开 DApp 网页之后,也需要对地址栏进行安全检查:
目前市面上主流浏览器插件钱包都已经集成了一定的风险提示功能,如 Metamask/Phantom?等。在访问一些位于黑名单中的风险网址时,浏览器插件钱包甚至 Chrome 浏览器本身都可能会展示强安全提示(见下图)。?
在连接钱包后,通常在用户没有其他操作时,DApp 不会主动唤起插件钱包。如果网站在登入后 DApp 频繁唤起钱包要求签名消息、签署交易,甚至在拒绝签名后仍会不断弹出签名的情况,那么也很可能是钓鱼网站的情况,需要谨慎处理。
哈希签名 eth_sign:针对某个数据的原始 hash 进行签名。hash 的原始数据可能是消息甚至以太坊交易。
消息签名 personal_sign:针对数据明文进行签名,在用户登录验证或许可协议确认时最为常见。
结构化数据签名 eth_signTypedData(EIP-712):针对 DeFi 协议中使用的数据对象的签名,常见的如 ERC?20 Permit 授权签名、NFT 挂单签名等。
针对消息签名的风险判别,用户可遵循以下准则:
针对消息签名,这里需要额外注意的是,尽管在浏览器插件钱包中 eth_sign 操作是默认禁止的,但钱包仍可通过 personal_sign 对 hash 类的数据进行签名。这类签名不会导致 permit 授权或发起交易。但个别协议(如一些 AA 钱包)仍可能使用 personal_sign 签名进行鉴权。为避免损失原则上还是不对 16 进制数据进行签名。这类签名效果如下:
其中用户可以查看交易的目标地址的一些相关信息,如是否为 EOA?地址、地址余额以及合约部署时间等。用户可以根据这些信息对要签署的交易进行风险判断。例如如果交互的地址为 EOA 地址,或交互的合约部署时间小于 7 天,则可以认为该操作具有较大风险,应充分调查后再进行操作。
对于开源协议,主流的浏览器插件钱包已经支持对交易数据的解析,通过查看 ABI 解码后的交易内容,可以更加清楚地了解当前在进行什么操作。合约调用的函数名可以提供一些其功能的参考:如?approve、swap、transfer、deposit?和?withdraw?等。
Rabby,imToken 钱包还集成了模拟执行功能,用户在交易确认前可以直接看到交易执行结果,通过交易模拟执行,用户可以查看到当前交易会导致的各种资金转移情况。用户应该仔细检查,对于不符合预期执行结果拒绝签名。
对于有一定技术储备的用户,在自动化工具无法顺利解析交易的情况,也可使用一些常见的人工检查方法:
最小化授权。当进行代币授权时,应根据交易的需求有限量的授权相应的代币数量。如某次交易需要授权 100 USDT,则本次授权数量即限制为 100 USDT,而不要使用默认的无限授权。
及时撤销不需要的代币授权。通过 Rabby 钱包的 Approval 功能或者登录?revoke.cash?查询对应的地址的授权情况,撤销较长时间没有交互的协议的授权,防止协议后续存在漏洞导致利用用户的授权额度造成资产损失。
某些钱包内置钱包导入功能(如 Rabby)。可以通过导入其他移动端钱包的地址,在进行交易时可以进行强制的二次确认(需要唤醒钱包、扫码和输入密码确认)来减缓钓鱼风险。同时享有移动端钱包的交易安全检查(白名单、模拟执行和钓鱼提示等)
某些钱包支持导入的观察者钱包(如 Rabby,OneKey,TokenPocket,imToken 等),通过观察者钱包进入一些陌生的网站。仍会正常唤起消息签名或发起交易的页面,此时可仔细查看待签名内容。同时因为没有私钥,不必担心误操作确认的情况。
通过 Rabby 钱包的 Approvals 功能查询地址的授权情况,及时撤销高危授权。Tips: Rabby 在该功能中使用了多个维度(历史授权链接总金额/24?h 取消授权数量/授权时间/授权资产数量)来对授权风险进行评判,可以更有效帮助用户识别授权风险。
误操作签名后,通过 Rabby 钱包的 Signature Record 功能及时检查自己签名过的交易和文本数据,及时排查授权风险。
在具备了风险意识和做了充足的风险防范的情况下,也仍要进行有效的资金隔离,在极端情况下降低资金的受损程度。Cobo 安全团队推荐大家使用以下方案来进行资金存放:
如果不小心真的发生被钓鱼的情况,可以立即执行以下操作来降低损失:
先使用 Rabby 观察者钱包测试一遍交互流程,确认无代币授权、代币转账类交易。
领取空投过程中不进行 Permit 类消息签名。不进行 Approve 合约调用。
尽量使用「小号」领取空投。
领空投交易查看模拟执行结果,确认无代币转出。