# 链上地址投毒，让你防不胜防

By [X-explore](https://paragraph.com/@x-explore) · 2022-12-02

---

**Abstract**:

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

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

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

![](https://storage.googleapis.com/papyrus_images/a06fcb0f1eb93bfed9f75064e198d034c0a08ddbcf7ad071ffe75457ae2d625d.png)

本文由 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转账操作）

![用户交易列表出现的现象](https://storage.googleapis.com/papyrus_images/0abd812db6c209f494766c7c437fde0babc72c6baafe643c8d79d0c9d94491e5.png)

用户交易列表出现的现象

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

![](https://storage.googleapis.com/papyrus_images/f152179c35b62c33855ad10deb1c73466dfd39a4c13526785da225f08820f52c.png)

2\. 攻击意图
--------

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

1.  在链上监控几个稳定币的转账信息，捕获受害者地址A正常发送给用户B的转账信息。
    
2.  精心构造与用户地址B首尾一致的黑客地址C，使受害者A与黑客地址C互相转帐0U。（这里攻击者可以使用靓号生成工具 Profanity，在几秒内生成与用户地址前后7位相同的地址）
    
3.  受害者A下次转账时粗心大意直接复制历史交易的地址时，很容易错误复制到黑客准备的地址C，从而将资金转错账
    

![受害者给正常地址转账](https://storage.googleapis.com/papyrus_images/c9e1af5c7f2a536a0d45fa285fa7a630d8b8d58f81d252e539daf1c2d56bcf15.png)

受害者给正常地址转账

![黑客地址给受害者转0U](https://storage.googleapis.com/papyrus_images/6720578a290930e8b137226ad52bd757be54ae15a59d5205f217d97572a5c697.png)

黑客地址给受害者转0U

![受害者给黑客地址转账](https://storage.googleapis.com/papyrus_images/ef360614a77a2a8e885a0810feefe1322180e0d812d1b81b5b284a101aefa571.png)

受害者给黑客地址转账

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

1.  首先，黑客让自己的地址出现在用户交易历史中，诱导用户误认为是可信的交互地址。
    
2.  此外，黑客构造出的地址与用户可信地址首尾相同，被用户当作下次交易的对象。 链上投毒很容易使用户产生资损，链上用户需共同警惕！
    

3\. 攻击态势
--------

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

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

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

![](https://storage.googleapis.com/papyrus_images/c303641993600eb4a8341ffe43f04addc8ba3cd367703b51f79bc7e84c9b65a2.png)

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

![](https://storage.googleapis.com/papyrus_images/4dbdbe35d2be867a1531400bee455e17c95dde9a6d8fe5b2dc0eeade98f0607c.png)

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

![](https://storage.googleapis.com/papyrus_images/09323559696fb79deae0ea48136f31dafe9079919a4ffbb869207af1f5ee8741.png)

![](https://storage.googleapis.com/papyrus_images/7a24a176a165ebdacf32ba481fd5d38eddfbb7e10e9e08bfcd6d9c0a460ed237.png)

攻击者溯源
-----

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

1.  其攻击资金的来源地址与OKX.com存在关联，攻击者通过使用Transit.Finance跨链桥将原始攻击资金从TRON链转移到BSC链上。
    
2.  其盗取资金最终归集到Huobi.com，攻击者依然使用Transit.Finance跨链桥将盗取资金转移到TRON链上。
    

![](https://storage.googleapis.com/papyrus_images/f4d5c5e57501b09edbe281f62f98db4ae65b8b04147e332350c8617a880558ed.png)

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

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

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

![](https://storage.googleapis.com/papyrus_images/31a6cc6d9fb5f46adf2adc5aa5079e256fe7a06fae12ee8e5b42413982affe1c.png)

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

![](https://storage.googleapis.com/papyrus_images/78a9a63b5523b71c10bda3e99bf3f84907000915ad18bd11809cc5b3ad4e5e0b.png)

![](https://storage.googleapis.com/papyrus_images/5cb0642f79baa6df7677efd3dd47e57a668d2c8a50016517a10aba5dc868735b.png)

![](https://storage.googleapis.com/papyrus_images/4df97a78f2774e75c3626b89b6408074c6455ed45e1c0020f6acd8fcbdddce76.png)

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

![](https://storage.googleapis.com/papyrus_images/0250d4e664f6fa8bfd85d2376fa51b9ef86a75b7a790d5ef6efb1958dbe778ae.png)

![](https://storage.googleapis.com/papyrus_images/8560aba8baf656f020c73d0007b50938ebc34fe2054f95de1dcb9d131f0e04e0.png)

攻击原理分析
------

**攻击者案例1：**

> EOA: [0xBAA1451bE8C33998CD43F375c2e67E79c1a104AD](https://bscscan.com/address/0xBAA1451bE8C33998CD43F375c2e67E79c1a104AD)
> 
> CA: [0x7ceBeb6035B231A73CB5Fb4119c2FbBC04Ec6fD1](https://bscscan.com/address/0x7cebeb6035b231a73cb5fb4119c2fbbc04ec6fd1)

**攻击者案例2：**

> EOA: [0x616384a80f32aDb65243522971aE2ba7664B62E3](https://bscscan.com/address/0x616384a80f32aDb65243522971aE2ba7664B62E3)
> 
> CA: [0x6f00Ed594A6AceEf0E1A6FE023Ecd5Eb96c8665a](https://bscscan.com/address/0x6f00Ed594A6AceEf0E1A6FE023Ecd5Eb96c8665a)

![黑客控制不同地址并通过合约批量转账0 BSC-USD给受害者地址](https://storage.googleapis.com/papyrus_images/073702431f157e82bbb9c8a0db5911cbf9ab43b231eaa07447710dfaa2fafce6.png)

黑客控制不同地址并通过合约批量转账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交易信息](https://phalcon.blocksec.com/tx/bsc/0x825a3281e1897239c01797e590d3d62c1f9ab4c323bd8484c142541ac77ad73e)

![来自Blocksec phalcon区块链浏览器交易信息](https://storage.googleapis.com/papyrus_images/9935eaa4eb95b314705e3d1b88dbea9de2c12dec9d59e63e924fff37fe5000ea.png)

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

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

![](https://storage.googleapis.com/papyrus_images/ca6b3a84d135abad1f102e27e7bf23b4189e9a0306aeaca0a25819995be1b164.png)

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

![](https://storage.googleapis.com/papyrus_images/c6785bc41f98ab310281a83857ee1a28e87ab933e220cb0cd525e31c41e32a11.png)

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

![](https://storage.googleapis.com/papyrus_images/01dc8f530fadf572fa18ff643f83948831e03e6b55f32d05238e8bfede88dd52.png)

**transfer()**

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

![](https://storage.googleapis.com/papyrus_images/582966ecaaa5b583351c832dd1d5809ef87e5ef05cc846fdca33ea67cf77826e.png)

**BNB**

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

攻击交易：[https://bscscan.com/tx/0x5ae6a7b8e3ee1f342153c1992ef9170788e024c4142941590857d773c63ceeb3](https://bscscan.com/tx/0x5ae6a7b8e3ee1f342153c1992ef9170788e024c4142941590857d773c63ceeb3)

![](https://storage.googleapis.com/papyrus_images/a99770d7acccaa39104ea1fbf720f68b488b069bd60d4cad29b09e294f1874b0.png)

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

正常用户地址：**0x69c**b60065ddd0197e0837fac61f8de8e186c**2a73**

黑客构造地址：**0x69c**22da7a26a322ace4098cba637b39fa0a4**2a73**

6\. X-explore 攻击检测
------------------

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

1.  钱包App通过颜色或其他提示帮助用户区分地址，并做好用户提醒；
    
2.  用户在转账前仔细区分历史交易地址，逐字确认，最好自己存一份地址簿。
    

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

[https://dune.com/opang/first-and-last-address-construction](https://dune.com/opang/first-and-last-address-construction)

![](https://storage.googleapis.com/papyrus_images/2ce692d1a6e29dc01645901bad4b41dc1205c720654c6f171cda2bb07012aba3.png)

敬请关注我们。

Mirror: [https://mirror.xyz/x-explore.eth](https://mirror.xyz/x-explore.eth)

Twitter: [https://twitter.com/x\_explore\_eth](https://twitter.com/x_explore_eth)

---

*Originally published on [X-explore](https://paragraph.com/@x-explore/jCuIfWjzCJNeA7CLvwFo)*
