币安热钱包 EIP-7702 委托事件:合约与链上核验
范围:只看合约与委托(sweeper 字节码、访问控制、50 条授权的结构、Hot Wallet 34 被调用的机制、攻击前的演练)。资金去向全文、ATT&CK 映射本版仍不写;归属见下节第三方转述。 时间:一律北京时间(UTC+8)。链上核验时间约 2026-10-30 09:20;归属核验约 2026-11-01 14:45;官方初步复盘核对约 2026-11-04 01:30。 数据:publicnode 以太坊 RPC(只读最新状态,没有归档)、eth.blockscout.com API、Etherscan,选择器用 4byte.directory 和 api.4byte.sourcify.dev 反查,签名用 ethers v6 恢复。 归属:含 FBI 执法通报与 TRM/Chainalysis 等第三方判断;币安官方尚未自行点名;本文链上核验部分仍不独立定归属。
更新(2026-10-30):币安已发布官方公告 Security Incident Update,要点见第零节。 更新(2026-10-31):并入 TRM Labs/Chainalysis 等对 TraderTraitor(朝系)的公开归属判断,见「第三方归属」一节。 更新(2026-11-01):并入 FBI 2026-10-31 通报,正式将本案归为 TraderTraitor(朝系),见「第三方归属」。 更新(2026-11-04):并入币安 2026-11-03 初步复盘(入口链路、MPC 签名、撤销耗时、金额修正),见第零节。
零、币安官方说法(2026-10-30 公告与 2026-11-03 初步复盘)
0.1 初步复盘要点(2026-11-03)
来源:币安 X 长文 29 October Binance Security Incident: Initial Findings and Response Update(2026-11-03 22:33 UTC+8)。以下均为币安单方说法,时间已换算为 UTC+8。
- 金额修正:受影响约 63.4 亿美元;已冻结或拦截约 28.5 亿美元(取代此前约 30 亿的说法,待对账、受币价影响)。截至 10-31,受影响代币 98% 已补足。
- 签名机制:热钱包采用 MPC(多方计算),没有单一私钥。攻击者是未经授权调用了内部钱包签名服务,在正常提现流程之外发起交易。这与本文「签名方能签任意授权,但不在出金和 nonce 管理链路里」的链上判断一致。
- 撤销为什么慢:因为没有单一私钥能立即撤销恶意 EIP-7702 授权,团队临时开发并执行了专门流程;暂停提现、关停热钱包服务也不会让已上链的授权自动失效。这解释了委托持续约 3 小时 50 分。
- 入口链路(多阶段):
- 2026-06,供应链:钱包 DevOps 工程师 A 通过搜索引擎下载了被篡改的 Homebrew 安装包(为了装一款 AI 编程工具)。设备已更换、凭据已轮换,但其角色和钱包团队同事已暴露。
- 2026-09,假招聘:工程师 B 在正规求职平台被冒充「项目总监」者接触,经假 HR 视频一面、冒充 CEO 的二面后,被要求在工作电脑上下载含恶意代码的「作业」仓库,安装时即执行。0-day 当时未被终端防护识别;手法是用恶意版本替换
/opt/homebrew/Cellar/pyenv/2.8.0/libexec/pyenv(3,344 B → 3,414 B),并重建/opt/homebrew/bin/pyenv软链接。 - 10-20,攻击者从 B 的电脑出发,借公司内部 AI 工具控制了 A 和钱包软件工程师 C,并在 A 的电脑上发现容器部署权限令牌。
- 10-30 01:15–03:56,攻击者登录 C 的电脑,用 A 的凭据部署容器并触发恶意脚本,进入钱包签名操作。
- 其他链出金(不在本文合约范围,仅作背景):10-30 04:05–04:09,5 个热钱包转出 2.3346 亿 XRP;其后(原文未给具体时间)Solana、Optimism 热钱包转出约 97.05 万 SOL、4,420 万 OP;内部告警后又转出 18,270 BTC;此后才是以太坊 EIP-7702 委托。复盘未提及 TRON。
- 收尾时间:最后一笔未授权转出 2,961.9 ETH 于 07:56 上链(此前已广播、一直待处理);08:10 Binance14 对零地址签出新授权,清除委托。两者分别对应本文链上的 07:56:47 与 08:10:35 两笔交易。
- 归属:币安引用 FBI 最新通报,称朝鲜对此负责;币安本身未写 TraderTraitor。另称 2026 年内已拦截 57 起疑似朝鲜相关攻击。
与链上证据的对照:
- 官方写「提交了 50 笔签名交易来操纵 nonce」;链上实际是 1 笔 type-4 交易内带 50 条授权,命中 nonce 18914809(见第三节)。本文以链上为准,官方表述原样记录,待正式技术复盘核对。
- sweeper 初版部署于 10-29 10:28、正式版于 10-29 23:59,都早于 10-30 01:15 的容器部署。说明合约在拿到签名权限之前就已备好,与「10-20 已在内网」的说法一致。
0.2 首份公告要点(2026-10-30)
以下为公告原意的中文转述,均为币安单方说法,尚无第三方复盘佐证:
- 入口:初步调查显示,事件可能源于一名 DevOps 工程师的笔记本电脑被攻破,攻击者借此进入一个服务容器,并提交了未经授权的提币交易。
- 私钥:币安称「没有发现任何钱包私钥泄露的证据」,详细技术复盘将在调查完成、事实核实后发布。
- 金额:预计总影响约 63 亿美元;已与区块链合作方冻结受影响资产,链上已冻结约 30 亿美元。
- 赔付:全部损失由 SAFU 基金和公司自有资金承担,整改完成后发布更新的储备金证明。
- 处置:暂停充值和提现;撤销受影响地址的授权;联系执法部门和区块链情报合作方追踪资金。
首份公告的 63 亿/30 亿已由初步复盘修正为 63.4 亿/28.5 亿(见 0.1),本文均未在链上逐项核对。
零点五、第三方归属(截至 2026-11-01)
金库级 CEX 按朝系分簇写:TraderTraitor(勿笼统写 Lazarus)。以下转述执法与商业情报公开材料,不是本站独立定论;币安官方尚未自行点名朝系或具体集群。
- FBI(执法一手,2026-10-31):明确 Democratic People’s Republic of Korea(North Korea)对币安约 2026-10-29 盗窃超过 60 亿美元虚拟资产负责;FBI 将该活动称为 TraderTraitor。与 USSS、IRS-CI 共同观察赃款主要兑成 ETH,并预期经 DeFi/即时兑换继续洗钱。呼吁 THORNode/RPC/即时交易所/DeFi/链上分析等拦截所列地址。地址清单见通报原文,不进本文正文。旁证:@FBICyberBranch 同内容通报(2026-10-31 22:36 UTC)。
- TRM Labs(更早的商业情报判断,高置信度):指向 TraderTraitor(朝鲜系)。依据包括 Tornado Cash 小额注资、提前演练、批量预签后再一波执行,与 Bybit/KelpDAO 等先例相似;并评估跨多条链同时有效的签名更像热钱包签名基础设施被控。TRM 另给出约 27 亿美元已冻结、约 24 亿美元不可冻结(逾 42 万枚 ETH 与约 1.827 万枚 BTC)的数字,本站未在链上逐项复核。
- Chainalysis(一手博文,FBI 通报前的商业情报,高置信度):同指 TraderTraitor。最强公开证据之一:实时观察到币安赃款与上月 Bitget 被盗资金在链上汇合(Bitget 案此前已有朝系公开归属)。另述自动化洗钱迹象(短时数千笔、多地址先收正好 1 TRX)。Chainalysis 写约 28 亿美元已冻,同样未在本站链上逐项复核。本站 Bitget 现网文 不因此次汇合线索改动;此处仅作跨事件标注。
- 旁证:公开转述中 ZachXBT 等亦称赃款经 THORChain 等路径后倾向同一行为体;部分媒体引 Blockaid「手法与朝系一致」。仅为旁证,不作独立依据。
- 币安:仍未正式点名朝系或 TraderTraitor;技术复盘与最终对外定名以币安/执法后续正式材料为准。执法侧已见上 FBI 通报。
一、结论速览
| # | 结论 | 状态 |
|---|---|---|
| 1 | 10-30 04:20:59,攻击者在一笔 type-4 交易里塞了 50 条 EIP-7702 授权,把 Binance 14 委托给 sweeper 0x63e8…6fAe,命中 nonce 18914809 |
链上已核 |
| 2 | 50 条授权签名全部恢复为 Binance 14 地址(官方称经 MPC 签名服务签出,无单一私钥),按 nonce 降序排列,保证最多只有一条生效 | 签名已恢复;MPC 为官方说法 |
| 3 | sweeper 是定制合约(solc 0.8.28,1,674 字节),没有存储、不能升级、不能自毁,5 个函数都只认硬编码的 operator 0x7C86…5CA0 |
字节码已核 |
| 4 | sweep() 只处理 operator 传进来的代币列表,ETH 留 1 枚作 gas;receive() 只收不转,所以攻击者调了多次 sweep |
字节码已核 |
| 5 | Hot Wallet 34 的 8.23 亿 USDC 是通过 owner 身份调 execute 转走的,不是 approve 额度;HW34 的 owner 就是 Binance 14 |
链上已核 |
| 6 | 同一个 operator 10-29 10:28 就部署了初版合约,并用 3 个测试账户做了 4 轮 type-4 演练,提前约 18 小时在测这条链路 | 链上已核 |
| 7 | 委托在 08:10:35 被 Binance 14 自己签名撤销,前后约 3 小时 50 分;现在 eth_getCode(Binance 14) 返回 0x |
链上已核 |
| 8 | 入口:币安初步复盘称多阶段(篡改 Homebrew、假招聘带毒仓库与 pyenv 替换、内部 AI 工具横向、容器部署令牌)后调用 MPC 签名服务;私钥称未泄露 | 官方初步复盘,待独立复核 |
| 9 | FBI 执法通报将本案定为 TraderTraitor(朝系);TRM/Chainalysis 更早亦同指 | FBI 执法通报已定 TraderTraitor;币安官方尚未自行点名 |
二、事件经过(合约视角)
| 时间(UTC+8) | 事件 | 交易 |
|---|---|---|
| 10-29 10:28:59 | operator 的第一笔交易:部署初版 sweeper 0x19beE294…f2bf |
0x6b76e874…06d8 |
| 10-29 21:51–22:24 | 演练 1、2:对测试账户 A、B 委托初版并 sweep,扫出少量 USDT/USDC | 0x16b5acc3…、0xec5af21d…、0xa2e0cd41…、0x6aaae5bc… |
| 10-29 23:59:11 | 部署正式版 sweeper 0x63e842B0…6fAe(比初版多一个 callExecute) |
0x97408e75…329c |
| 10-30 00:20–00:47 | 演练 3、4:测试账户 C 委托正式版、重复委托、sweep 实测留 1 ETH、再用 withdrawETH 取走 |
0xb2148eb8…、0x7c5206cb…、0x9c2dbed1…、0x2b8eb62a… |
| 10-30 04:20:59 | 正式委托 Binance 14:50 条授权,命中 nonce 18914809 | 0xad99264d…298b |
| 04:24:23 | sweep #1:167,464.248 ETH 和 63 种 ERC-20(含 USDT 1,615,409,498.97)转到 0x5227f603…2f8c |
0x53bd38b8…e2f3 |
| 04:41:23 | callExecute 调 Hot Wallet 34,转走 780,000,000 USDC |
0xdc102dd8…7481 |
| 04:59:47 | 同上,转走 43,000,000 USDC | 0x3b9625b3…9ca7 |
| 05:04:23 | sweep #2:1,699.92 ETH 和 23 种代币 | 0x31c4c9fe…a91d |
| 05:44:11 | sweep #3:369.83 ETH 和 14 种代币(含 USDT 200,397,771.82) | 0x55ba4dab…0556 |
| 06:39:35 | sweep #4(媒体未报):128.49 ETH 和 122 种代币,转到新地址 0xA97bF783…8d10 |
0x4a4aed83…ad6b |
| 07:36–07:54 | 5 次 sweep 成功执行但没有资产转出 | 见下方来源 |
| 07:56:47 | 撤销前最后一次带走资产:2,961.91 ETH 转到 0xA97bF783…8d10 |
0x4395d51d…f89b |
| 08:10:35 | Binance 14 自己签名撤销委托(授权指向 0x0) |
0xafbf94c9…c209 |
部署初版、部署正式版、提交 50 条授权、调用 sweep 和 callExecute,全部由同一个地址 0x7c8601d4645b93cea45f71e118a729332e6b5ca0 完成。
三、50 条授权的 type-4 交易
- 交易
0xad99264d5532ae0dd04b2004eebda05f25657e70dacb764f7ac8d4ccd051298b,区块 26300753,提交者是 operator,to是 Binance 140x28C6c06298d514Db089934071355E5743bf21d60,calldata 为空,status 1。 authorizationList共 50 条,chainId 都是 1(不能跨链重放),委托目标都是0x63e842b0…6fae,nonce 覆盖 18914775–18914824。- 为什么命中的是 18914809:同一区块里 Binance 14 自己的出金交易用的是 18914808,下一块直接跳到 18914810。缺的 18914809 就是被这条授权消耗掉的,其余 49 条因 nonce 对不上失效。
- 签名恢复:50 条签名恢复出的签名人全部是 Binance 14 地址。币安称该热钱包为 MPC,签名来自被滥用的内部签名服务,不是单一私钥。
- 为什么是降序:EIP-7702 按顺序处理授权,有效的一条会把账户 nonce 加 1。如果升序排列,命中之后紧接着的几条会连续生效,币安后面排队的交易会成批作废。降序保证最多只生效一条,对币安出金流水的干扰最小。演练里用的也是降序,说明这是刻意测过的做法。
这说明了什么(只陈述链上能支持的部分):产生这 50 条签名的一方,当时能让 Binance 14 的签名能力对任意 EIP-7702 授权摘要签名(币安复盘确认是调用了内部 MPC 签名服务),但它不知道交易落块时 Binance 14 的实时 nonce,也就是说它不在币安热钱包的出金和 nonce 管理链路里。
四、sweeper 合约分析
4.1 正式版 0x63e842B054Bd624a465454D533C33F573e9c6fAe
| 选择器 | 函数 | 访问控制 |
|---|---|---|
0x8a179be4 |
sweep(address to, address[] tokens) |
只允许 operator |
0x043ff9d2 |
callExecute(address target, address to, uint256 value, bytes data)(payable) |
只允许 operator |
0x4782f779 |
withdrawETH(address,uint256) |
只允许 operator |
0x01e33667 |
withdrawToken(address,address,uint256) |
只允许 operator |
0x97dc97cb |
authorizedCaller(),返回 0x7C86…5CA0 |
无 |
| (calldata 为空) | receive() |
无,直接 STOP |
- 访问控制:operator 地址以
PUSH20写死在代码里,四处校验msg.sender,不符就 revertNotAuthorized()。没有 owner 存储,也没有修改它的路径。 sweep:逐个处理 operator 传入的代币。ETH 只有余额超过 1 ETH 时才转出「余额减 1 ETH」,留下正好 1 ETH 支付后续 gas。ERC-20 先查balanceOf再transfer,只检查调用是否成功、不检查返回的 bool(兼容 USDT)。单个代币失败只发SweepItemFailed事件,不会让整笔交易回滚。合约不会自己发现代币,要扫哪些完全由 operator 给出。callExecute:检查目标有代码后,以本账户身份调用目标的execute(to, value, data)。攻击者就是靠它抽走 Hot Wallet 34。receive()只收不转:委托期间打进 Binance 14 的资产会留在原地,攻击者必须反复调 sweep,这解释了为什么一共扫了多次。- 没有危险操作码:
SSTORE、SLOAD、DELEGATECALL、CREATE、CREATE2、SELFDESTRUCT全部为 0 次。 - 注意:Etherscan 上现在显示「已验证源码」,但源码头部写明是 AI-RECONSTRUCTED SOURCE,是第三方根据字节码反推后提交的,不是攻击者的原始代码。本文结论来自独立反汇编,与这份重建源码逐条对照一致。
4.2 初版 0x19beE294A6DaAb49c9e5Ab69A5Da6C035C70f2bf
- 1,256 字节,同为 solc 0.8.28,operator 相同,「留 1 ETH」逻辑相同,sweep 主循环逐条一致。
- 唯一区别:初版没有
callExecute。 - 推断:攻击者先做了只能扫自身余额的版本,约 13.5 小时后加上
callExecute,并只在攻击 Binance 14 时用它去调 HW34。这意味着部署正式版之前,攻击者很可能已经知道 Binance 14 是某个带execute接口的合约钱包的 owner。这一点无法从链上直接证明。
4.3 与已知 EIP-7702 sweeper 的比较
| 样本 | 字节数 | 4-gram Jaccard(与正式版) |
|---|---|---|
初版 0x19be…f2bf |
1,256 | 0.706 |
CrimeEnjoyor 0x8044F37E…d79c |
1,519 | 0.070 |
CrimeEnjoyor2 0xA03fC3C6…60ab |
2,267 | 0.066 |
选择器除 ERC-20 transfer 外没有重合,行为也不同(CrimeEnjoyor 类会自动转走打进来的 ETH,本合约不会)。结论:这是定制合约,不是 CrimeEnjoyor 模板的改版。比较样本只有这两个,覆盖面有限。
五、Hot Wallet 34 的 USDC 为什么能被转走
对象:0xEe7aE85f2Fe2239E27D9c1E23fFFe168D63b4055(Etherscan 标签 Binance Hot Wallet 34)
- HW34 是 ERC1967 代理,实现合约
0xD206aC7f…9eC8是 Circle 开源的SingleOwnerMSCA(ERC-6900 模块化智能账户模板)。 getNativeOwner()返回 Binance 14。- 创建:2025-07-29 19:17:47,通过 ERC-4337 EntryPoint v0.6 的
handleOps建出,创建交易0xd561c23a…dad4。同一笔交易里先把 owner 初始化为0xc268…fb20,紧接着发出OwnershipTransferred转给 Binance 14;之后再没有OwnershipTransferred或Upgraded事件。初始 owner 从未发过交易,看起来只是占位地址。 - 工厂合约
0xf610…e536是SingleOwnerMSCAFactory,由通用 CREATE2 部署器0x4e59…956C部署,属于公开模板工厂;打包创建交易的 bundler 是0xf7932df8…af75。仅凭这些,不能判断 HW34 由 Circle 还是币安部署运营。 execute()的授权规则:msg.sender == owner或msg.sender == address(this)就直接放行。- 调用链:operator → Binance 14(委托代码
callExecute)→HW34.execute(USDC, 0, transfer(0x5227…, 金额))→ HW34 以自己的身份调用USDC.transfer。 - approve 路线可以排除:HW34 从未发出过 USDC Approval 事件,当前对 Binance 14 的 allowance 为 0;calldata 是
transfer而不是transferFrom,日志里的 from 是 HW34,三点相互印证。 - 潜在风险(推断):同一路径理论上也能调用
upgradeTo或转移 owner,永久接管 HW34。链上看攻击者没有这样做,owner 和实现合约都没变。HW34 当前仍有约 2,956,093.65 USDC。
六、有没有其他币安钱包被委托
- operator 发出的 23 笔交易里,type-4 只有 5 笔:4 笔演练、1 笔针对 Binance 14。通过这个 operator 被委托的币安钱包只有 Binance 14。
- Binance 16 当前代码为
0x。按 Blockaid 等方的说法,其他链上的币安钱包是经签名服务直接签名转出,不是委托(本文未逐一核对)。 - EIP-7702 允许任何人代提交授权,其他发送方有没有代提交指向这两个 sweeper 的授权,需要全链索引才能确认。
七、待核实
- 私钥是否泄露:币安初步复盘称热钱包为 MPC、无单一私钥,攻击者是滥用内部签名服务;与 Blockaid CEO「签名基础设施被滥用」的说法一致(Blockaid 官方 10-30 08:40 的 推文 曾写 “an attacker used a stolen key”)。已基本澄清,待独立复核。
- 归属跟进:执法侧(FBI)已通报 TraderTraitor;币安复盘引用 FBI 的朝鲜结论,仍未自行点名集群。
- 入口细节:链路已见 0.1。仍未披露:内部 AI 工具具体如何被用来控制他人电脑、容器如何拿到签名服务权限、篡改 Homebrew 的下载来源。
- 50 条签名是什么时候生成的(一次批量还是分多次),链上看不出来;官方写法是「50 笔签名交易」,与链上 1 笔 type-4 交易的结构不完全一致。
- 其他发送方代提交、指向
0x63e8或0x19be的委托,需要全链授权索引。 - sweep #1 的代币列表逐项解码,以及 07:36–07:54 五次 sweep 为何没有资产转出,需要归档状态。
- HW34 工厂
0xf610…e536、初始 owner0xc268…fb20、bundler0xf793…af75的身份。 - 逐层调用栈(operator → B14 → HW34 → USDC)依据 calldata 和日志推导,没有拿到 debug trace。
来源
- FBI:North Korea Responsible for $6 Billion Binance Attack(2026-10-31;TraderTraitor;旁证 @FBICyberBranch)
- TRM Labs:North Korea Steals $6.36 Billion from Binance…(高置信度 TraderTraitor)
- Chainalysis:Binance Exploit: Latest Findings and Response(一手;币安与 Bitget 赃款汇合)
- 币安初步复盘:29 October Binance Security Incident: Initial Findings and Response Update(X 长文,2026-11-03);文内附 SANS ISC diary 32942
- 币安官方公告:Security Incident Update(2026-10-30)
- Etherscan:sweeper 正式版、初版、operator、type-4 交易、撤销交易、部署交易、Hot Wallet 34
- Blockscout:Binance 14、HW34 合约、SingleOwnerMSCA 实现
- Blockaid:X 2115917919603306651、X 2115924317888495661、X 2115967067707097110
- 交叉对照:drk(引用的数字已全部从链上重新读过)
- 参考:Wintermute / CoinDesk 2025-06-02(CrimeEnjoyor)