Skip to content
Go back

地址用错了,钱就没了:USENIX Security '26 实证研究揭开区块链地址滥用的 5.7 亿美元黑洞

Edit page

TL;DR

USENIX Security 2026 的一项大规模实证研究,首次把”地址用错了”从一句用户失误的感慨,变成了一个可度量、可武器化的攻击面。研究团队从 GitHub 和 Stack Exchange 挖出 1030 万个候选地址和 1630 万个泄露私钥,在以太坊和 BNB Chain 上扫描 57.6 亿笔交易,锁定 65,340 个高风险地址实例,关联损失约 12.7 万 ETH + 1.77 万 BNB,超过 5.7 亿美元,检测精确率 99.11%。论文还揭露了两种此前未公开的攻击手法:一是攻击者在测试网”钓鱼式”部署热门合约地址,等用户在主网误用后再用确定性地址派生部署恶意合约收割(469 个恶意合约,卷走 3446 ETH + 431 BNB);二是利用 EIP-7702 把私钥泄露的 EOA 委托给恶意合约,实现”到账即被盗”的自动化收割(1.7 万余个地址被 99 个恶意合约控制)。

论文信息卡

  • 📄 论文:Lost in Blockchain Address Misuse: Hidden Cross-Platform Risks and Their Security Impact
  • 👥 作者:Zhenzhe Shao(中山大学 / 浙江大学区块链与数据安全全国重点实验室)、Jiashuo Zhang(北京大学)、Zihao Li(电子科技大学 / 香港理工大学)、Daoyuan Wu(岭南大学)等,通讯作者 Jiachi Chen(浙江大学)
  • 🏛 会议:USENIX Security 2026
  • 🔗 原文:https://baolingfeng.github.io/papers/sec26cycle1-final911.pdf

背景

在以太坊这类账户模型链上,地址是用户与链交互的唯一界面,分为两类:由私钥控制的外部账户(EOA),和由代码控制的合约账户(CA)。论文指出了一个长期被忽视的技术细节:当一笔携带函数调用数据的交易被发往一个没有代码的地址时,EVM 不会报错、不会 revert,而是静默地把它当成一笔普通转账执行——附带的 ETH 照单全收,函数调用数据直接被忽略。钱就这么”成功”地掉进了黑洞,用户往往要到很久以后才发现。

第二个关键机制是合约地址的确定性派生:address=keccak256(rlp(deployer,nonce))address = keccak256(rlp(deployer, nonce)),只取决于部署者地址和 nonce。而 nonce 在各条链上是独立计数的——这意味着同一个地址在不同链上可以是完全不同的东西:在 Sepolia 测试网它是一个 Uniswap 路由合约,在主网上它可能空无一物。

第三个机制是 Pectra 升级引入的 EIP-7702:EOA 可以通过特殊交易把执行权委托给指定合约,账户 code 被置为 0xef0100∥address0xef0100 \parallel address,EOA 就此变成”智能账户”。方便的同时,也给了攻击者一把新武器。

最后是”弹药”从哪来:Truffle、Hardhat 等开发框架在文档和源码里硬编码了默认测试账户的私钥;开发者把含私钥的配置文件随手 push 到 GitHub;在 Stack Exchange 回答问题时贴出示例私钥。Etherscan 甚至给 Truffle 默认账户 0x6273…Ef57 打上了 “Compromised” 标签,警告”不要向该账户转账,任何资金都会被立即盗走”。

方法拆解

论文把”地址滥用”定义为两类,分别设计了检测流水线。

第一类:CA 滥用——把无代码地址(NCA)当成合约地址。 NCA 包括普通 EOA,以及”还没部署合约但未来可能部署”的可预测地址(PCA)。检测分两步:先按链上状态把候选地址分为 NCD(检测时仍无代码)和 PCD(检测时已有代码);再用规则匹配交易——一条交易被判定为误用调用,当且仅当 to == 该地址 ∧ 输入含函数选择器 ∧ 输入不是人类可读备注 ∧ gas < 30000。NCD 用规则一(向无代码地址发函数调用),PCD 用规则二(在合约部署时间戳之前的函数调用——这正是攻击者”先养肥再部署收割合约”的前置信号)。

对 PCD 地址上已部署的合约,论文用轻量级符号执行判断是否为恶意收割合约:反汇编字节码、划分基本块建控制流图、路径探索(1 秒剪枝超时),只对外部调用相关 opcode 求解约束;在遇到 CALL 时比较转账金额是否为”全部余额”,遇到 DELEGATECALL 时解析代理指向的实现合约,出现 SELFDESTRUCT 直接判恶意。这种”够用就好”的取舍让工具兼顾了精度和规模。

第二类:EOA 滥用——向私钥已泄露的 EOA 转账。 分两个子类:KEY(能从候选私钥直接派生出地址,100% 实锤)和 ADDR(启发式识别——“转入后秒被扫空”的交易对模式,匹配 MEV bot 的自动化收割行为,再叠加 EIP-7702 委托检查:看 code 是否以 0xef0100 开头,再对委托合约做符号执行,看其 receive/fallback 是否会转走全部余额)。

整条流水线如论文图 5 所示:离线从 GitHub(2015 年 1 月至 2025 年 5 月,63,004 个仓库)和 Stack Exchange 用正则提取地址与私钥 → Etherscan API 拉全量交易历史 → 模式匹配 + 符号执行 → 输出滥用地址与损失统计。平均每个地址 0.09 秒,规模完全扛得住。

两条新攻击链是论文最出彩的部分:

flowchart TB
    subgraph 阶段一:测试网布饵
        A[攻击者在 Sepolia 测试网<br/>部署"UniswapV2Router02"<br/>地址 0xC532...4008] --> B[在 Stack Exchange 等社区<br/>广泛传播该地址<br/>相关回答超 10 万次浏览]
    end
    subgraph 阶段二:用户误用
        B --> C[用户复制地址到主网<br/>发起 swap 调用并附带 ETH]
        C --> D[EVM 静默处理:无代码地址的<br/>函数调用 = 普通转账<br/>ETH 被困,不报错]
    end
    subgraph 阶段三:主网收割
        D --> E[被困资金攒够后<br/>攻击者用同一 deployer + nonce<br/>在主网同地址部署恶意收割合约]
        E --> F[调用 withdraw<br/>一次性提走全部被困资金]
    end

CA 计算攻击的精髓在于”守株待兔”变成了”主动布饵”:攻击者先在测试网部署一个热门合约,把地址散播到开发者社区;等足够多的用户在主网误用该地址、资金被困后,再利用确定性地址派生在主网同一地址部署一个只有提款逻辑的恶意合约,一把提空。反编译出的恶意合约简单得可笑——withdraw() 里只有一行 call.value(this.balance)。

EIP-7702 攻击则把”拼手速”变成了”自动化”:传统收割需要监控链上转账、跟 MEV bot 打 gas 战抢跑;现在攻击者用泄露的私钥构造一笔 EIP-7702 交易,把 EOA 直接委托给预部署的恶意合约(如论文中反编译出的 CrimeEnjoyor,其 receive() 函数会自动把到账的 ETH 转给攻击者地址)。此后转入和转出发生在同一笔交易内,用户转账到账瞬间即被划走,无需等待、无需 gas 竞争。

实验与数据

论文围绕三个研究问题展开,数据密度极高。

RQ1:检测准不准? 按 5% 置信区间、95% 置信度分层随机抽样,双人独立标注(Kappa 系数 0.868)。CA 滥用在以太坊精确率 97.62%、BSC 98.94%;EOA 滥用的 ADDR 子类两条链都是 100%;KEY 子类天然 100%。总体精确率 99.11%。误报主要来自”备注型”交易——比如有人转账时在 input 里写 0xdeadbeaf 当标记,被误判成函数调用。恶意合约识别的准确率约 90.4%(ETH 精确率 83.78%、召回率 93.94%),漏报多来自”按比例提款”这类间接手法。

RQ2:规模有多大? 去重后 65,340 个高风险地址实例、250 万笔相关交易。CA 滥用 49,344 个(以太坊损失 22,738.41 ETH、BSC 损失 8,681.41 BNB);EOA 滥用 15,996 个(104,244.53 ETH + 9,045.29 BNB)——其中 KEY 子类一个向量就占了 EOA 损失的 95% 以上(103,402.53 ETH + 8,521.07 BNB),说明”GitHub 上抄了个私钥”是最大头的死法。合计 126,982.94 ETH + 17,726.7 BNB,按 2025 年 5 月价格(4,408/4,408 / 847)折算超过 5.7 亿美元,且论文强调这只是原生代币的统计,是保守下界。三个洞察值得细品:GitHub 来源的 NCD 地址在数量上占绝对大头(代码复用是最强的传播器);PCD 地址数量少但单例平均损失更高(攻击者”养肥了再杀”);超过 85% 的采集地址至今未发生误用——沉睡的雷比炸过的还多。

RQ3:攻击者真在用吗? 在用,而且已经工业化。CA 滥用侧确认 469 个恶意收割合约(以太坊 273 + BSC 196),卷走 3,446.37 ETH + 431.79 BNB;89.76% 是最简单的直接收割逻辑,6.82% 用代理合约伪装;更夸张的是代码克隆——仅 10 个恶意合约模板就被克隆部署了 31,542 次。EIP-7702 侧:7,824(以太坊)+ 9,422(BSC)个 EOA 被委托给总共 99 个恶意合约,前三的恶意合约就占了以太坊 74.66%、BSC 82.07% 的委托——高度中心化的收割流水线,而 EIP-7702 上线才几个月,曲线还在往上走。

两个具体案例极具冲击力。地址 0xC532…4008 在 Sepolia 测试网是”UniswapV2Router02”(2023 年 5 月 9 日部署,测试交易 15.8 万笔);但 Uniswap 官方文档给出的 Sepolia 地址其实是 0xeE56…CfE3——这个被引用 15 万次的”测试地址”本身很可能就是攻击者布的饵。主网上线前它收到了 88 笔误调用,2024 年 10 月 6 日攻击者在主网同地址部署恶意合约,一次性提走 3.78 ETH。另一个案例 0x6273…Ef57 是 Truffle 框架的默认测试账户,私钥躺在公开源码里,已被 EIP-7702 委托给自动收割合约。

横向对比更能看出这项工作的分量:此前研究私钥泄露的标杆工作 [66] 只找到 865 万个泄露私钥、统计到约 700 万美元损失;本工作挖出 1630 万私钥,仅以太坊一侧就确认 103,402.5 ETH(约 4.56 亿美元)损失——此前研究低估了近两个数量级。

相关工作对比

私钥泄露方向已有不少工作,最接近的是 Zhou 等人 [66] 对 GitHub 泄露私钥的度量。但本工作走得远得多:首次提出了 CA 滥用这个全新类别(前人完全没覆盖),在 EOA 一侧也从”数私钥”推进到”分析交易模式 + EIP-7702 委托行为”,检出规模是数量级的碾压。

MEV 文献汗牛充栋(三明治攻击、清算、套利),本工作只借用了”资金秒被扫空”的行为指纹——MEV 研究的是抢跑,本工作研究的是收割误入资金,两者井水不犯河水。

地址污染攻击(address poisoning)看起来最像:都是用户”地址用错了”。但论文把差异讲得很透:污染是”错地址 + 对链”(骗子用相似地址污染你的交易历史),滥用是”对地址 + 错链”(地址本身没错,是网络上下文错了),后者更隐蔽,也更难防。蜜罐、钓鱼等诈骗研究依赖的是合约欺骗或社工,而地址滥用不依赖任何恶意代码——受害者是自己把钱送上门的。

一句话总结差异化:这是第一篇把”用错地址”从用户失误提升为可度量、可检测、可武器化的系统性攻击面的工作。

局限与开放问题

  • 数据源只覆盖 GitHub 和 Stack Exchange,Telegram、Discord 等私域渠道的传播未纳入
  • 只统计了原生代币(ETH/BNB)的损失,ERC20/ERC721 未计入——5.7 亿美元是下界
  • 损失按 2025 年 5 月时价折算,不是交易发生时的历史价格
  • 启发式规则重精确率轻召回,会漏掉”按比例提款”等不典型手法;符号执行对复杂代理逻辑仍有漏报
  • 只覆盖 EVM 的两条链;Solana 等同样使用确定性地址派生的链存在同理风险,尚未度量
  • 开放问题:钱包侧实时拦截的产品化落地;协议层能否把 chain ID 纳入 CREATE 地址派生公式;EIP-7702 委托滥用能否前置到 mempool 阶段检测

一点思考

EVM 把发往无代码地址的函数调用静默处理为”成功”,是这 5.7 亿美元损失最底层的技术根因——“不报错”有时候比”报错”贵得多。我的判断是:短期内最有效的防线不在协议层而在钱包侧,数据已经明明白白摆在链上,做一次”目标地址在本链无代码、但在别链是合约”的实时提醒技术上并不难,缺的只是产品意愿;长期看必须把 chain ID 写进 CREATE 的地址派生公式,否则跨链地址复用就是一颗定时炸弹。对普通用户,现在就能执行的只有一条铁律:凡是从教程、问答帖、GitHub 抄来的合约地址,上主网之前先去项目官方文档核对一遍——论文里那个被引用 15 万次的”Uniswap 地址”,本身就是个饵。

原文链接


Edit page
Share this post on:

Previous Post
Orion 第三次倒下:ASIACRYPT 2025 给出可运行的伪造攻击,修复版 Scorpius 反超原版
Next Post
多轮对话里的"迷路诅咒":ICLR 2026 杰出论文用 20 万次对话证明,顶级大模型平均暴跌 39%