协议千万个,安全第一条。
撰文:Cobo 安全团队
Cobo 安全团队通过整理链上交易过程中常见的风险点,编写了交易安全的执行准则,旨在让用户在交易过程中规避风险,保障资金安全,防范钓鱼攻击。
随着比特币 ETF 的通过,区块链市场开始回暖。币价的回升让行业逐渐恢复了往日的繁荣。与此同时黑客活动也开始活跃起来。Cobo 安全团队观察到近一两个月钓鱼案件发生的频率也有所增加。
近期 Restaking, BTC L2 等新的应用热点开始涌现,链上交易逐渐成为 Web3 用户日常不可或缺的一部分,越来越多的用户资金也在往链上转移。
而与交易所等中心化应用不同,链上应用的账户安全需要通过用户自己保障。安全地进行区块链交易是 Web3 原住民最基本的能力。尽管很多基础设施如浏览器插件钱包,甚至浏览器本身都对针对钓鱼有一定的风险提醒,但用户因不安全交易导致资产损失的事件还是时有发生(如私钥泄露,签名钓鱼等)。
Cobo 安全团队通过整理链上交易过程中常见的风险点,编写了交易安全的执行准则,旨在让用户在交易过程中规避风险,保障资金安全,防范钓鱼攻击。
在开始介绍之前,Cobo 安全团队为大家总结了安全交易的核心准则,如下:
1、拒绝盲签,不理解的交易、消息不签名;
2、不厌其烦,反复验证。
一个完整的 DApp 交易流程包含多个环节:钱包安装、访问 DApp 、连接钱包、消息签名、交易签名、交易后处理。其中每个环节都存在一定的安全风险,下面将依次介绍实际操作中的注意事项。
注:本文主要介绍以太坊及各 EVM 兼容链上的安全交互流程,其他非 EVM 链使用的工具和具体的技术细节可能不同。
钱包安装
目前 DApp 的主流使用方式是使用浏览器插件钱包进行交互。EVM 链使用的主流钱包有 Metamask 和 Rabby 等。
Cobo 安全团队在深度体验后,基于风险提示的角度,推荐使用 Rabby 插件钱包来作为主要的链上交互钱包。其原因在于:相较于 Metamask 钱包,Rabby 钱包提供交易数据解析、交易模拟执行、交易风险预警、授权查询和历史签名数据查询等功能,在针对钓鱼防范上会比 Metamask 钱包具有更大的优势。
安装 Chrome 插件钱包,需要确认从 Chrome 应用商店中下载安装,不要从第三方网站安装钱包,避免安装有后门的钱包软件。
有条件的用户建议联合使用硬件钱包,在私钥保管上可以更大程度地提高整体的安全性。
访问 DApp
网页钓鱼是 Web3 攻击中的常见攻击手法,典型案例是以空投名义诱导用户访问钓鱼 DApp 应用,在用户连接钱包后诱导用户签署代币授权、转账交易或代币授权签名,导致用户资产遭受损失。
因此在访问 DApp 时,用户需要保持警惕,避免进入网页钓鱼的陷阱。
在访问 DApp 前应该确认 DApp 网址的正确性。建议:
在已经打开 DApp 网页之后,也需要对地址栏进行安全检查:
目前市面上主流浏览器插件钱包都已经集成了一定的风险提示功能,如 Metamask/Phantom 等。在访问一些位于黑名单中的风险网址时,浏览器插件钱包甚至 Chrome 浏览器本身都可能会展示强安全提示(见下图)。
连接钱包
进入 DApp 后,可能会自动或在主动点击 Connect 后触发连接钱包的操作。插件钱包会针对当前 DApp 的进行一些检查、信息展示等。
以下是 Rabby 钱包给出的网页审查信息,可用来辅助进行 DApp 真实性的判断。
在连接钱包后,通常在用户没有其他操作时,DApp 不会主动唤起插件钱包。如果网站在登入后 DApp 频繁唤起钱包要求签名消息、签署交易,甚至在拒绝签名后仍会不断弹出签名的情况,那么也很可能是钓鱼网站的情况,需要谨慎处理。
消息签名
在极端情况下,比方说攻击者攻击了协议的官方网站或通过前端劫持等攻击,对页面内容进行了替换。普通用户很难在这种场景下对网站安全性进行甄别。
此时插件钱包的签名是用户保存自身资产的最终屏障。只要拒绝掉恶意签名,就能保障自身资产不受损失。用户在签名任何消息和交易时都应该仔细审查签名内容,拒绝盲签。
从技术上讲,目前以太坊中常见的签名类型有三类:
针对消息签名的风险判别,用户可遵循以下准则:
针对消息签名,这里需要额外注意的是,尽管在浏览器插件钱包中 eth_sign 操作是默认禁止的,但钱包仍可通过 personal_sign 对 hash 类的数据进行签名。这类签名不会导致 permit 授权或发起交易。但个别协议(如一些 AA 钱包)仍可能使用 personal_sign 签名进行鉴权。为避免损失原则上还是不对 16 进制数据进行签名。这类签名效果如下:
交易签名
签名交易要遵循不盲签的原则。目前许多插件钱包会针对待签名消息进行解码并展示相关内容,如下是 Rabby 钱包对一笔 DEX 交易的解析示例:
其中用户可以查看交易的目标地址的一些相关信息,如是否为 EOA 地址、地址余额以及合约部署时间等。用户可以根据这些信息对要签署的交易进行风险判断。例如如果交互的地址为 EOA 地址,或交互的合约部署时间小于 7 天,则可以认为该操作具有较大风险,应充分调查后再进行操作。
对于开源协议,主流的浏览器插件钱包已经支持对交易数据的解析,通过查看 ABI 解码后的交易内容,可以更加清楚地了解当前在进行什么操作。合约调用的函数名可以提供一些其功能的参考:如 approve、swap、transfer、deposit 和 withdraw 等。
Rabby,imToken 钱包还集成了模拟执行功能,用户在交易确认前可以直接看到交易执行结果,通过交易模拟执行,用户可以查看到当前交易会导致的各种资金转移情况。用户应该仔细检查,对于不符合预期执行结果拒绝签名。
对于有一定技术储备的用户,在自动化工具无法顺利解析交易的情况,也可使用一些常见的人工检查方法:
交易后处理
在躲过了钓鱼网页和恶意签名后并不意味着万事大吉,交易后也仍需进行风险管理。
交易后应及时查看交易的上链情况,确认其与签名时预期的状态是否一致。如果发现异常及时进行资产转移、授权解除等止损操作。
ERC20 Approval 授权管理也十分重要。有些案例中用户对某些合约进行了代币授权后,多年后这些合约遭受攻击,攻击者利用了被攻击合约的代币授权额度来窃取用户资金。
为避免此类情况 Cobo 安全团队建议用户遵循以下标准来进行风险防范:
除了上述交易流程中的风险外,合理利用通过某些工具中集成的功能也可以规避一些风险。
在具备了风险意识和做了充足的风险防范的情况下,也仍要进行有效的资金隔离,在极端情况下降低资金的受损程度。Cobo 安全团队推荐大家使用以下方案来进行资金存放:
如果不小心真的发生被钓鱼的情况,可以立即执行以下操作来降低损失:
发放空投是目前项目方用于吸引用户的常见方式,同时也是用户被钓鱼攻击的重灾区。为此,基于上文的安全交易准则,Cobo 安全团队为大家整理了一套用于领取链上空投的安全交互流程:
区块链安全守则的内容很多,有可能不是每次交互都能做到细致的检查,那么是否存在一种好用的浏览器插件来辅助我们做出风险判断呢?
Cobo 安全团队体验了市面上较为主流的交易风险检查插件,并从「钓鱼网页拦截」、「恶意授权地址检查」和「是否开源」三个维度整理成表格,大家可以根据自身情况选择使用,如下:
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。