技术详解币安遭影子攻击全过程
Web3
CBDC
钱包
影子交易攻击基本都依赖着伪装成主流资产的假 Token。但有的时候,一些真正的主流资产,也有被当成攻击工具的可能。
撰文:Goplus
在 8 月 2 日 CZ 转发的一条的推文中提到了一起攻击事件。
CZ 也对事件进行了解读。很显然,攻击者利用多数钱包显示地址仅仅显示开头结尾的特征,使用与受害人目标地址首尾相同的地址(0xa7B4…E90570)迷惑了受害人,最终让受害人将自己的资产转到了钓鱼地址。
但其中具体的攻击过程并不是 CZ 所说的 dust transactions(超小额度转账),攻击者所使用的手段远远更加狡猾和难以防备。
攻击过程与攻击原理分析
实际上当我们观察攻击地址的交易记录(https://etherscan.io/address/0xa7Bf48749D2E4aA29e3209879956b9bAa9E90570#tokentxns)时就会发现,攻击者从未向受害人进行过任何转账,反而是受害人一直在向攻击地址转账。
在很长的一段时间里,受害人似乎在持续向攻击地址转出假冒的 USDT,直到被骗走了 20,000,000USDT。
这显然是非常奇怪的,也基本排除了 dust transactions 攻击的可能。
然后通过观察受害人者的地址(https://etherscan.io/tokentxns?a=0x407e4b78c16d22b21b5ddcd0b0f7ad9cb07b9cbc&p=2),我们得到了这一奇怪现象的原因:影子交易。
我们可以看到,受害人地址一直在不定期的向一个固定目标地(https://etherscan.io/address/0xa7b4bac8f0f9692e56750aefb5f6cb5516e90570)址进行较大额度的转账,那么显然我们可以认为这个目标地址 0xa7B4BAC8f0f9692e56750aEFB5f6cB5516E90570 一定是受害人高度信赖的强关联地址(例如交易所账号,或者冷钱包)。
于此同时,每次受害人对 0xa7B4BAC8f0f9692e56750aEFB5f6cB5516E90570 进行转账时,马上就会出现一条影子一样的交易出现,影子交易和原本的交易具有几乎相同的发出时间、同样金额,发出人相同,相似的收款人(0xa7B4…E90570),且 Token 名也为 Tether USD (USDT) 的交易。只不过这个所谓的 USDT 是一个假资产(https://etherscan.io/token/0x8a4b59b38c569d1cf09d6cc96cbe7a2fd8ee08e9?a=0xa7Bf48749D2E4aA29e3209879956b9bAa9E90570)并非真正的 USDT。
那么攻击手段就非常清晰了
- 攻击者首先对链上进行扫描和监听,寻找那些有高额资产,且经常向固定地址进行大额转账的地址作为目标,生成与受害人常用目标地址相似的地址(即攻击地址,一般多与受害人目标地址收尾相同,如此案例中的 0xa7B4…E90570。攻击者一般会批量生成大量地址,与目标地址进行匹配)。
- 然后攻击者会部署名为 Tether USD 的假冒资产,这个 Token 中,必然带有随意进行 emit Transfer(即向链上发送 transfer event,包含发出人,收款人,转账金额信息)操作。
- 攻击者对受害人进行监听,一旦受害人向常用目标地址转账,就马上伪造一条金额相同的假 USDT 转账记录。由于区块浏览器和钱包都是仅通过 transfer event 进行交易统计,而不验证交易发起对象,所以这条假交易就会作为转出记录出现在区块浏览器的交易记录和受害人钱包的交易记录中。
- 等待受害人偷懒,在交易时选择在交易记录中选择复制自己上次的转账对象,因为没有仔细检查,复制成了攻击地址(0xa7B4…E90570),并进行转账。
- 完成骗局。
骗局的要点分析
这种影子交易攻击具有高度的迷惑性,它非常难以防备的核心在于以下几点:
- 由于人眼是无法直接识别和理解 16 进制地址的,所以多数钱包和浏览器都不会对地址进行完全展示,而是通过仅展示首尾了帮助用户进行要点记忆。这种行业惯例下,用户很自然地产生了首尾相同地址即为同一地址的习惯性认知。
- 由于受害者日常给目标进行转账,对目标地址最为熟悉,所以对目标的地址收尾数字最为熟悉,对首尾相同的攻击地址也容易产生绝对信任感。
- 所有区块浏览器和钱包都是依赖链上 event 来进行交易记录统计的,所以只要伪造 event,基本上就可以确保影子交易出现在用户钱包中。而且比起转入记录,用户天然的会更相信转出记录,因为这本应是自己主动发起的操作。
- 影子交易和真实交易具有几乎相同的发出时间、同样金额,发出人相同,相似的收款人,如果不仔细看,基本上无法区分。
在这四点的综合作用下,用户很容易不知不觉的中招。
猖獗的攻击
实际上,这并不是这种攻击手段第一次被发现,早在 23 年初,Goplus 就注意到这类攻击手段开始逐步代替了传统的 dust transactions,成为了主流的转账诈骗手段。
而且攻击者远远不止一家,甚至可以看到多个攻击者在同时对一个地址进行攻击的高度内卷场面。
实际上,在这个攻击案例里,我们就可以看到又一个新的攻击地址对受害人展开了新的攻击。
如何防范影子交易攻击
在这里 Goplus 为大家给出几个防范影子攻击的建议。
- 保持怀疑,任何交易一定要直接在目标对象处直接获取地址,比如充值到交易所时,一定选择可信赖的地址簿,或者从交易所账号直接复制地址,而不要从交易记录中复制。这是最有效的措施。
- 定期检查的交易记录,看看是否频繁出现不是自己操作的交易,这有助于我们辨别自己的账号是否被攻击者盯上。
- 通过交易记录查看交易对象时,尽可能选择在特定资产下的交易记录,这样能有效过滤掉用来攻击的伪装资产。
- 尽可能多的记住自己的地址,虽然这很反人类。
- 这里额外给交易所和大机构用户一个建议,虽然很多时候我们认为在代码中保存私钥是危险的,所以资金管理会依赖一定的人工操作,但转账填参还是最好程序化进行,或者至少维护一个白名单地址库,尽可能降低人类在其中的参与度。毕竟只要是人就会犯错。
- 勤于思考,保持怀疑,不断学习,学习永远是保护自己最好的手段。
其他潜在的风险
影子交易攻击基本都依赖着伪装成主流资产的假 Token。但的时候,一些真正的主流资产,也有被当成攻击工具的可能。
例如,我们注意到,USDC 官方合约的 implementation(https://etherscan.io/address/0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf#code)居然没有在 transferFrom 方法下限制转账金额不为 0。
那么这就导致 allowance 验证恒成立,任何人都可以从任何地址向任何地址发起一段金额为 0 的转账。
所以未来攻击者完全可以不断通过 USDC 官方合约发出 0 额度交易,来污染被攻击者的交易记录,虽然额度不对,但是因为来自真是的 USDC 合约,也会具备相当的迷惑性。
这也暴漏了 Goplus 一直关注的问题,很多的 Web3.0 开发者虽然对自己项目的安全可以做到万无一失,但是对如何保护普通用户,还是考虑的不够深入。
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表Bi123的观点或立场