链上地址投毒,让你防不胜防

Abstract:

近一周,0U 转账的链上地址投毒攻击愈演愈烈,截至12月2日,已经有超过37W地址被投毒,总计92个受害地址,被盗取金额超过164W USD。

本篇文章,X-explore 对攻击态势进行了全面分析,对攻击者进行了链上溯源,同时也深入分析了攻击的实现方式。

我们呼吁钱包APP加强风险提示,普通用户在转账时谨防此类攻击。因为我们注意到UTC时间11月2日10点38分,有一位链上用户损失惨重,近100万美金因投毒而被转到黑客地址。

本文由 X-explore 与吴说区块链联合发布。

1. 背景

近期,我们的链上风险监控发现ETH、BSC链上频繁出现 0u 转账现象,以下图bsc链的交易数据为例,受害者A发出一笔正常交易将452 BSC-USD发给B后,会收到C转来的0 BSC-USD,同时,在同一笔交易hash内用户A自己也会不受控制的给C转0 BSC-USD(实现了“一来一回”的0 BSC-USD转账操作)

用户交易列表出现的现象
用户交易列表出现的现象

在社区中,很多用户不知所以然,担心自己的钱包私钥已经泄漏,攻击者正在窃取资产。

2. 攻击意图

其实遇到这种情况的用户不用紧张,大家的资产是安全的,私钥并没有泄漏,只需要仔细确认地址小心别转错账就没事,黑客的手法很简单:

  1. 在链上监控几个稳定币的转账信息,捕获受害者地址A正常发送给用户B的转账信息。

  2. 精心构造与用户地址B首尾一致的黑客地址C,使受害者A与黑客地址C互相转帐0U。(这里攻击者可以使用靓号生成工具 Profanity,在几秒内生成与用户地址前后7位相同的地址)

  3. 受害者A下次转账时粗心大意直接复制历史交易的地址时,很容易错误复制到黑客准备的地址C,从而将资金转错账

受害者给正常地址转账
受害者给正常地址转账
黑客地址给受害者转0U
黑客地址给受害者转0U
受害者给黑客地址转账
受害者给黑客地址转账

我们认为这种攻击是链上地址投毒攻击:

  1. 首先,黑客让自己的地址出现在用户交易历史中,诱导用户误认为是可信的交互地址。

  2. 此外,黑客构造出的地址与用户可信地址首尾相同,被用户当作下次交易的对象。 链上投毒很容易使用户产生资损,链上用户需共同警惕!

3. 攻击态势

截止12月2日,在BSC与ETH链上的攻击次数分别超过32万次和5万次,受攻击影响的独立地址数分别超过16万个以及4万个。

从趋势上看,BSC链自从11月22日开始爆发,ETH链则从11月27日开始爆发,两条链的攻击规模均愈演愈烈。

此外,可以看到攻击发生时间有显著规律性,在每天UTC时间17点到0点攻击量级显著减少。疑似攻击者处于亚洲时区。

截止12月2日,总共有 92 个独立地址受骗,累计被骗金额达到 164万USD。伴随着攻击者攻击目标的增加,可以预见,近期还会不断有大量用户被骗。

此外,我们对攻击者的攻击成本进行了分析,目前总成本接近2.9W USD(50 BNB + 11 ETH),攻击者对BSC-USD和USDT非常偏爱,与稳定币的币种流通量和用户持有量有关

攻击者溯源

我们对其中一个攻击者进行了链上溯源追踪,与两个主流中心化交易所关联,其完整过程如下图所示:

  1. 其攻击资金的来源地址与OKX.com存在关联,攻击者通过使用Transit.Finance跨链桥将原始攻击资金从TRON链转移到BSC链上。

  2. 其盗取资金最终归集到Huobi.com,攻击者依然使用Transit.Finance跨链桥将盗取资金转移到TRON链上。

让我们进一步展开,针对盗取资金的流向进行溯源。

首先,受害者地址0xe17c2b2b40574d229a251fe3776e6da2cc46aa5e向攻击者地址0x720c1cfe1bfc38b3b21c20961262ad1e095a6867分两次,共转账1300U。

接着,攻击者地址将资金归集到地址0x89e692c1b31e7f03b7b9cbb1c7ab7872ddeadd49

攻击者在0x89e692c1b31e7f03b7b9cbb1c7ab7872ddeadd49地址上进行了资金的跨链转移,在txhash为0x72905bd839f682f795946d285500143ee7606e9690df2ad32968e878ad290d9f的交易中,如下图所示,将10561 USDT通过Transit.Finance的合约(0xb45a2dda996c32e93b8c47098e90ed0e7ab18e39)进行了Cross操作。在这笔交易的Event Logs中,可以看到资金去向了TRON链的USDT,对应地址是TLUKBw37BVWDZdhbGco2ZEfdMd5Cit8TMD,对应TRON链上的交易hash是:716507136ad28717ffd5f2f437af753ff96d344d2bcbe83f24d801db49f5a884

最终,攻击者将 TLUKBw37BVWDZdhbGco2ZEfdMd5Cit8TMD 地址上的充值进了Huobi交易所。充值的入金地址分别是:TPtzsrCAG61QMwig3jZV8Px7Rd1WZVnRXG, TDp7r3S1hJeiNfH1CvCVXeY8notY47nagJ

攻击原理分析

攻击者案例1:

EOA: 0xBAA1451bE8C33998CD43F375c2e67E79c1a104AD

CA: 0x7ceBeb6035B231A73CB5Fb4119c2FbBC04Ec6fD1

攻击者案例2:

EOA: 0x616384a80f32aDb65243522971aE2ba7664B62E3

CA: 0x6f00Ed594A6AceEf0E1A6FE023Ecd5Eb96c8665a

黑客控制不同地址并通过合约批量转账0 BSC-USD给受害者地址
黑客控制不同地址并通过合约批量转账0 BSC-USD给受害者地址

针对bsc链上的token攻击主要包含BSC-USD、BUSD、USDC、ETH等,大部分是通过攻击合约批量调用transferFrom()函数,也有手动调用transfer()函数的情况和针对主币的情况,原理基本一致。以下用 BSC-USD 的一个攻击合约举例

transferFrom()

在攻击者调用攻击合约的一笔交易中,攻击合约只调用了 BSC-USD 的 transferFrom() 函数,通过对参数填充sender、recipient、amount可以实现操控任意地址间的0 USD转帐,同时产生授权Approval()与转账Transfer()的事件

来自Blocksec phalcon区块链浏览器交易信息
来自Blocksec phalcon区块链浏览器交易信息

BSC-USD 的合约源码显示transferFrom()函数顺序调用了转账_transfer()与授权_approve()函数

_transfer()函数的作用很简单,首先排除交易中的全零地址,然后给发送方减钱,接受者加钱,最后记录转账事件。这里用到的加减函数add()/sub()是OpenZeppelin的safemath库,溢出会报错回退

_approve()函数同样排除全零地址,修改授权值,这个函数的重点在transferFrom中调用approve的参数计算里,用到了_allowances[sender][_msgSender()].sub(amount, "BEP20: transfer amount exceeds allowance") ,将已有的授权token数量减去转账数量,剩余的授权数量放入approve重新授权。这里用到的减函数sub是OpenZeppelin的safemath库,溢出会报错回退;但是如果整个流程的amount参数为零,没有任何检测机制能拒绝这笔交易,也就导致了链上大量的 0U 转账能正常发送,而黑客只需要付出手续费即可收获不菲的回报。

transfer()

调用transfer()函数的攻击方式原理一致,整个流程只有加减的溢出检测,没有对零转账的过滤。

BNB

在token的攻击追溯过程中,我们还发现了通过0 BNB转账的首尾相同钓鱼攻击,原理与token钓鱼类似,构造首尾相同的地址进行钓鱼

攻击交易:https://bscscan.com/tx/0x5ae6a7b8e3ee1f342153c1992ef9170788e024c4142941590857d773c63ceeb3

构造地址后迷惑性非常高,一不小心就转错到黑客地址上

正常用户地址:0x69cb60065ddd0197e0837fac61f8de8e186c2a73

黑客构造地址:0x69c22da7a26a322ace4098cba637b39fa0a42a73

6. X-explore 攻击检测

目前X-explore可针对此类攻击行为进行实时的链上监测,为了避免危害进一步加剧,我们建议:

  1. 钱包App通过颜色或其他提示帮助用户区分地址,并做好用户提醒;

  2. 用户在转账前仔细区分历史交易地址,逐字确认,最好自己存一份地址簿。

与此同时,我们在 Dune 中开源了此次攻击事件的态势感知大图。

敬请关注我们。

Mirror: https://mirror.xyz/x-explore.eth

Twitter: https://twitter.com/x_explore_eth

Subscribe to X-explore
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.