文章

零转账攻击原理与防御

概念

  • 零转账(Zero Transfer):在以太坊上向某地址发起金额为 0 的转账/事件记录。

    • 原生 ETH:value = 0 的交易可执行,但不产生余额变化。

    • ERC-20:transfer(to, 0)transferFrom(from, to, 0) 通常被允许,并会触发 Transfer(..., 0) 事件。

    • ERC-1155:可出现数量为 0 的 TransferSingle/Batch 事件(依实现)。

  • 骗术本质:利用“0 金额但真实上链”的事件在钱包/区块浏览器里制造“来自权威地址”的错觉,继而通过钓鱼链接与授权引导完成真实盗取。

常见攻击手法

  • 刷记录制造信任

    • 向你地址发 0 代币转账,事件里显示“来自某知名项目/地址”,骗取信任。

    • 使用与官方地址极度相似的地址前后缀、头像、名称,干扰你在历史记录中复制地址。

  • 诱导授权/签名

    • 假冒空投/白名单/补贴页面,引导你“Claim/领取”,实为让你签 approve/increaseAllowance/permit 或 NFT 的 setApprovalForAll

    • 诱导“无 gas/离线签名”,实为授权搬走你的代币/NFT。

  • 伪造或混淆事件元数据

    • 非标准合约在 Transfer 事件里写入混淆性名称/符号/Logo,放大“官方感”。

防御总体原则

  • 最小惊扰:不屏蔽真实链上数据,但对“0 金额/可疑事件”进行降噪与明确风险提示。

  • 可解释:任何拦截、标注或降权都有“为什么”的解释与可撤销开关。

  • 最小授权:产品与 SDK 默认鼓励/强制用户和 DApp 采用最小授权。


一、数据与事件层

1) 事件标准化与增强解码

  • 严格区分资产类型与来源

    • ETH 转账 vs ERC-20 Transfer vs ERC-1155 TransferSingle/Batch

    • 明确标注事件“数量为 0”与“余额未改变”。

  • 异常事件检测

    • 标记非标准/可疑合约事件,如伪造 Transfer 事件、非标准 symbol()/name()decimals 异常。

    • 针对 ERC-1155 数量为 0 的事件打风险标签:zero-amountspam-likely

2) 可信元数据源

  • 多源校验

    • 代币元数据(Logo、Name、Symbol、Decimals)优先采用官方清单(Tokenlists)、链上验证合约、社区审计数据,避免单点。

  • 合约信誉评分

    • 聚合黑名单/钓鱼情报(ScamSniffer、Chainabuse、Etherscan labels)。

    • 引入启发式评分特征:短生命合约、批量向大量地址发送 0 事件、与已知钓鱼域名同现等。

3) 反“刷记录”策略

  • 低权重索引

    • 日志索引中将 value=0 的代币转账事件单独分区或打低权重,不影响查询性能但便于 UI 层筛选。

  • 聚合去重

    • 对同一合约多次 0 事件进行合并显示(如“近 24 小时 12 条 0 金额事件”)。


二、可视化

1) 明确的 0 金额标识与降噪

  • 显著的“0 金额/未变更余额”徽标:如灰色、斜体、信息淡化。

  • 垃圾/可疑视图开关:默认“折叠显示零金额事件”,用户可展开;支持设置白名单/黑名单。

  • 不合并到“收到资产”通知:避免和真实入账混淆;单独的“系统消息/活动”流。

2) 名称与 Logo 防伪

  • 强制展示地址缩写与链 ID:任何带 Logo/名称的展示旁都显示 0xAbc...1234 @ chainId

  • 相似度提醒

    • 当历史中出现多个前后缀近似地址(如 Levenshtein 距离很小)时,加“相似地址提醒”。

  • 禁止从“零金额事件”直接复制收款地址

    • 从 0 事件条目复制地址时弹出确认或改为复制合约地址而非“发送者地址”。

3) 通知与引导

  • 风险提示模板

    • 在 0 金额事件旁展示提示:”该记录不代表你获得可用资产,谨防钓鱼与授权陷阱“。

  • 一键屏蔽

    • 支持对某合约/地址/代币“隐藏所有 0 金额事件”。

  • 官方来源校验徽章

    • 若地址在官方清单/ENS 反向解析且通过验证,显示“已验证”徽章;否则保持中性或显示“未验证”。


三、授权与签名层的强防护

1) 高风险方法拦截与细粒度展示

  • 对以下方法弹出红色风险窗,并用通俗语言解释结果和影响:

    • ERC20.approve, increaseAllowance

    • Permit/Permit2 签名(EIP-2612、Permit2)

    • setApprovalForAll(ERC-721/1155)

    • transferFrom 由第三方发起的大额/全部转移

  • 强制最小授权

    • 将“无限额授权”按钮放在二级操作;默认建议“仅本次/精确额度/短时授权”。

    • 对超阈值授权需再次交互确认(双击确认或硬件签名)。

 


四、风控与策略引擎

1) 规则与启发式

  • 零金额行为关联

    • 若某地址先向用户发起 0 金额事件,随后在外部页面请求用户进行高风险授权,触发“联动风险提示”。

  • 节流与冷却

    • 对短时间内来自同合约的多次 0 事件,自动折叠与静默化。

  • 地址画像

    • 记录“可疑联系度”:是否与已知恶意地址交互、是否频繁批量 0 事件、是否使用混淆 ENS。

许可协议:  CC BY 4.0