术语表 /隐私与安全
地址投毒
又称 Address poisoning。
- 地址投毒是什么?
- 地址投毒是一种盗币手法:骗子从一个模仿您常用地址的地址向您发送一笔毫无价值的交易,希望您从交易历史中复制骗子的地址。
攻击所针对的是一种习惯:不向收款方索取新地址,而是从钱包的交易列表中调取地址重复使用。攻击者通过暴力计算生成外观相似的地址,使其开头和结尾的几个字符与目标地址一致,而大多数钱包界面和区块浏览器恰好只显示这几个字符。2024年5月,一名交易者因一次被污染的粘贴操作损失了1,155枚封装比特币,价值约6,800万美元。
运作方式
地址投毒分为三个阶段,只有最后一个阶段需要您参与。
暴力计算相似地址。 比特币地址在设计上就很长,而界面会隐藏中间部分。bech32 地址使用包含32个字符的字母表,因此要生成一个与目标地址开头四个字符和结尾四个字符都一致的地址,需要搜索大约32的八次方,即约1.1万亿个候选地址。一块普通 GPU 运行一夜即可完成,而且这种搜索极易并行,因此租用一套算力设备就能同时对数千个目标投毒。攻击者不需要您的私钥,只需要一个外观与您信任的地址相似的自有地址。
植入地址。 在比特币上,攻击者从相似地址向您的地址转出一笔粉尘金额,通常为330或546聪。您的钱包会记录一笔收款,发送方一栏随即显示一个粗略一看与您实际使用的地址无法区分的地址。也有一些攻击方向相反:从一个外观类似交易所充币地址的地址发出转账,而您在自己的提币操作中经常粘贴的正是该交易所充币地址。
等待。 数周之后,您要发送比特币。您翻看历史记录,找到“上次使用的地址”,复制、粘贴、确认。这笔交易有效,签名正确,并且从大约十分钟后确认的那一刻起不可撤销。这里没有欺诈处理部门,因为在协议层面并未发生欺诈:您向您告诉网络要支付的对象付了款。
不同区块链上的成本有所不同。以太坊允许攻击者仅支付 gas 就发出一笔零价值转账,因此在那里投毒几乎免费,并已达到工业化规模。比特币的粉尘规则迫使每次尝试都要付出一小笔款项,这是该规则在少数场合下起到垃圾信息控制作用的例子。
购买比特币时为何重要
新买家最危险的时刻,是第一次从交易所提币到刚刚设置好的钱包。
此时您要在两个应用之间复制一串陌生的字符,还没有地址簿,也最不容易察觉中间的20个字符已经被替换。而且此时的金额往往就是您的全部持仓。三项控制措施几乎可以消除全部风险,且都不依赖于您是否足够仔细。
设置提币白名单。Kraken、Coinbase 和 Binance 都允许您登记账户可以向其转账的地址,多数还会对新添加的地址设置一段延迟,延迟结束后才可使用。您只需在没有任何资产被盗的平静时刻设置一次。被污染的地址即使被粘贴到已设置白名单的账户中,也会直接被拒绝。
从收款设备获取地址,而不是从历史记录中获取。硬件钱包会在自己的屏幕上生成并显示您的收款地址。Trezor 和 Ledger 都要求您在设备上确认,电脑上的恶意软件或伪造的历史记录无法改变设备所显示的内容。发送时也要反过来这样做:批准之前,先在设备屏幕上核对目标地址。
检查中间部分。比较前四个和后四个字符,恰恰是这种攻击所设计要通过的检查。请比较字符串中间的一段字符,或者更好的做法是扫描二维码来比较整个地址,而不是用眼睛读。
6,800万美元的一次粘贴
2024年5月3日,一名交易者准备转移1,155枚封装比特币,当时价值约6,800万美元,并且先做了负责任的一步:一笔小额测试转账。
攻击者一直在监视内存池,等待的正是这种模式。几分钟内,他们生成了一个与合法目标地址开头和结尾字符一致的地址,并从该地址发出一笔代币转账,使被污染的记录出现在发送方历史记录中真实记录的正上方。那笔1,155枚封装比特币的转账最终进入了攻击者的地址。
结局并不寻常。链上调查人员追踪了攻击者的基础设施并予以公开,大约一周后资金被全额退还。这一结果无法复制。资金得以追回,是因为金额大到足以引起公开的取证关注,而攻击者认为风险不值得承担,并不是因为任何协议或公司有办法撤销这笔付款。
地址投毒 vs 粉尘攻击
地址投毒和粉尘攻击都表现为一笔意外收到的极小额转入款项,但针对的是不同的失误。粉尘攻击希望让这笔币重新流通,与您的其他输出一起被花费,使链上分析人员能够把两者合并为一个集群。地址投毒则完全不在乎粉尘如何处理,其攻击载荷是留在您历史记录中的发送方地址。冻结该输出可以防范第一种攻击,对第二种则毫无作用,因此这里真正的对策是永远不要从交易列表中获取地址。
地址投毒 vs 剪贴板恶意软件
两种攻击的结果都是比特币被转到您并非本意的字符串,但它们攻击的是托管链条中的不同环节。剪贴板恶意软件需要在您的设备上运行代码,在复制和粘贴之间替换地址,因此您看到的地址是正确的,而实际转入的地址却不是。地址投毒完全不需要访问您的设备:错误的地址本来就在您钱包自己的历史记录中,由任何人都能发出的一笔付款放在那里。这使得地址投毒不受杀毒软件影响,并且只要知道您的某个地址,任何人都可以实施。