查看原文
其他

深度解析七大 Web3 钓鱼手法,SharkTeam 提供全方位安全防护指南

TinTinLand TinTinLand 2024-06-24
Web3 钓鱼是一种常见的攻击手段,攻击者通过各种方式窃取用户的授权和签名,或诱导用户进行误操作,目的在于盗取加密资产。近年来,Web3 钓鱼事件频发,链下签名钓鱼、链上签名钓鱼、授权钓鱼、地址污染钓鱼以及利用 CREATE2 绕过安全检测等多种钓鱼方式层出不穷,给用户带来了巨大的安全挑战。
特别是发展出钓鱼即服务(Drainer as a Service, DaaS)的黑色产业链,让攻击者能够迅速构建大规模钓鱼网站和欺诈账号,极大地增加了资产损失风险。就在最近的一起钓鱼事件中,一位用户因早前的授权漏洞被利用,瞬间损失超过 60 万美金的 USDC。这类事件让大家意识到必须加强对钓鱼手段的了解和防范,提升安全意识,才能更好地保护自己的数字资产。
为了帮助 Web3 用户更好地识别和防范钓鱼攻击, TinTinLand 联合 Sharkteam 系列线上课程【Web3 安全实战指南】。在 5 月 28 日的第二期课程中,SharkTeam 联合创始人 Adam 详细剖析了多种钓鱼手段。本次线上活动吸引了近 1000 名观众参与,直播间气氛热烈,观众们踊跃互动,与嘉宾们进行了深入交流。
🕹️ 错过直播的小伙伴们可点击回放:https://www.bilibili.com/video/BV1sf42197qo/


 🪐 守护 Web3 安全的先锋
 —— SharkTeam

SharkTeam 的愿景是保护 Web3 世界的安全。团队由来自世界各地的经验丰富的安全专业人士和高级研究人员组成,精通区块链和智能合约底层理论。提供包括风险识别与阻断、智能合约审计、KYT/AML、链上分析等服务,并打造了链上智能风险识别与阻断平台 ChainAegis,能有效对抗 Web3 世界的高级持续性威胁 (Advanced Persistent Threat,APT)。



 💡 常见钓鱼手法分析

🧩 Permit 链下签名钓鱼

Adam 首先分享 Permit 链下签名钓鱼,Permit 是针对 ERC-20 标准的一种扩展功能,允许用户通过签名批准其他地址使用你的 Token,而无需在链上进行交易。这种设计在便捷性和安全性之间做了一个平衡,但也被不法分子利用,形成了一种隐蔽的钓鱼手段。
Adam 进一步解释 Permit 链下签名钓鱼常见的三个步骤:
  1. 伪造钓鱼链接或网站:攻击者通过伪造钓鱼链接或网站,诱导用户通过钱包进行签名。这些签名对象通常是常见的 ERC20 Token,如 DAI、USDC、WETH 等。如果用户签名了这些数据,攻击者就获得了一段包含 r, s, v 值的签名,这些值在后续的 permit 函数交互中会被用到。

  2. 调用 permit 函数:攻击者使用获取的签名数据调用 permit 函数,完成授权。

  1. 调用 transferFrom 函数:获得授权后,攻击者调用 transferFrom 函数,将受害者的资产转出,完成攻击。

Adam 补充道,需要注意的是,transfer 和 transferFrom 的区别在于:transfer 通常用于直接进行 ERC20 Token 的转账,而 transferFrom 用于授权第三方将用户钱包内的 ERC20 Token 转移到其他地址。当攻击者利用链下签名钓鱼时,他们使用 transferFrom 函数在未经用户同意的情况下转移 Token。

这种签名是一个无 Gas 的链下签名,攻击者拿到后会执行 permit 和 transferFrom 链上交互,因此在受害人地址的链上记录中看不到授权记录,但在攻击者地址中可以看到。一般来说,这种签名是一次性的,不会重复或持续产生钓鱼风险。

🧩 Permit2 链下签名钓鱼

Permit2 是 Uniswap 在 2022 年推出的扩展功能,旨在解决 DeFi 领域高昂的交易费用问题。与传统的 ERC-20 Permit 不同,Permit2 允许用户一次性授权 Uniswap 合约管理 Token 额度,从而简化操作,降低费用。

Adam 表示,Permit2 出现之前,在 Uniswap上进行 Token 兑换需要先授权(Approve)再兑换(Swap),需要操作两次,也需要花费两笔交易的 Gas 费。在 Permit2 推出后,用户一次性把额度全部授权给 Uniswap 的 Permit2 合约,之后的每次兑换只需要进行链下签名即可。

然而,Permit2 虽然提高了用户体验,但也带来了新的安全风险,即针对 Permit2 签名的钓鱼攻击。与 Permit 链下签名钓鱼类似,Permit2 链下签名钓鱼也是通过获取用户的签名信息进行攻击。这种攻击主要分为四步:

  1. 前提条件:用户的钱包在被钓鱼之前已使用过 Uniswap,并将 Token 额度授权给了 Uniswap 的 Permit2 合约(Permit2 默认会让用户授权该 Token 的全部余额的额度)。

  1. 伪造钓鱼链接或页面:攻击者通过伪造钓鱼链接或页面,诱导用户进行签名,获取所需的签名信息。Adam 解释道,这一步骤与 Permit 链下签名钓鱼类似,都是通过钓鱼手段获取用户的签名数据。

  1. 调用 Permit2 合约的 permit 函数:攻击者使用获取的签名数据调用 Permit2 合约的 permit 函数,完成授权。

  1. 调用 Permit2 合约的 transferFrom 函数:最后,攻击者调用 Permit2 合约的 transferFrom 函数,将受害者的资产转出,完成攻击。

Adam 补充道,这里攻击者接收资产的地址通常有多个,通常其中一个金额最大的接收者是实施钓鱼的攻击者,另外的则是提供钓鱼即服务(DaaS)的黑产地址,例如 PinkDrainer、InfernoDrainer 和 AngelDrainer 等。

🧩 eth_sign 链上盲签钓鱼

链上签名钓鱼主要包括几种方式,如 eth_sign、personal_sign 和 signTypedData。最早出现的是 eth_sign,这是一种对任意值进行签名的方式,被称为盲签。用户在签名时,实际上是对一段看不懂的字节码进行操作,这样的风险非常高。
Adam 形象地比喻道,盲签就像在一个不安全的场所中,别人给你一个二维码让你扫描转账,如果你不了解对方是谁,看不懂信息内容,就不应该签名。这相当于给了别人空白支票,让他们自由填写金额。用户在进行任何签名操作时,一定要确保完全理解签名内容和操作对象,不要盲目点击确认。
MetaMask 在进行 eth_sign 签名时会提供风险提示,但许多用户可能会忽视这些提示。为了提高用户的安全性,imToken、OneKey 等 Web3 钱包已经禁用此函数或提供了明确的风险提示。Adam 建议所有钱包厂商禁用此方法,防止用户因缺乏安全意识或必要的技术积累被攻击。

🧩 personal_sign/
signTypedData 链上签名钓鱼

Adam 还提醒用户,personal_sign 和 signTypedData 虽然是常见的签名方式,但也存在被滥用的风险。用户在签名时一定要看清楚签名对象、协议和内容,避免轻易签名。
Adam 指出,例如在 OpenSea 等平台上进行签名操作时,用户应特别注意签名对象的 URL 是否正确。如果签名请求来自一个可疑的 URL,如 opensea.net 或 opensea.com,而不是正规的 opensea.io,这很可能是一个钓鱼网站,用户应避免签名。Adam 建议用户在遇到不明签名请求时,多与官方确认,以确保操作安全。

此外,如果像下面这种情况 personal_sign、signTypedData 被用成“盲签”,用户看不到明文,容易被钓鱼团伙利用,也会增加钓鱼风险。

🧩 授权钓鱼

setApprovalForAll/Approve

授权钓鱼通常涉及到用户在不知情的情况下,进行 setApproveForAll 或 approve 操作,从而给攻击者提供了转移资产的权限。Adam 以 PREMINT 挂马钓鱼事件为例,用户访问的是一个真实的官方网站,例如 Premint.xyz,但实际上该网站的前端代码被黑客篡改,用户在操作时弹出的授权框实际上是黑客的恶意脚本,用户在不知情的情况下,被诱导执行了 setApproveForAll 授权,导致资产被盗。
Adam 强调,即使是官方网站也不一定完全安全,用户在进行交互时需要特别小心。他建议用户在操作时要仔细核对弹出的操作提示,确保操作内容与自己的预期一致。如果仅仅是连接钱包(connect),但弹出的却是授权请求(setApproveForAll),这时用户就需要警惕,可能是网站被挂马或是仿冒网站。
Adam 还解释了另一种授权钓鱼方式,即 Approve 授权。与 setApprovalForAll 类似,用户对 Approve 操作进行了确认,泄漏了对资产的操作授权,导致资产被盗。Adam 展示了一个具体的例子,用户将 Token 授权给攻击者地址后,攻击者可以将受害者地址中的资产转移到自己控制的地址。
这种钓鱼方式非常危险,因为一旦授权,攻击者就可以随意转移你的资产,Adam 强调,在进行授权操作时一定要确保对方的身份,并尽量避免进行全额授权或长期授权。
Adam 还提到,类似的授权钓鱼方式还有 increaseAllowance,这些都涉及到用户在不知情的情况下进行授权,从而使得攻击者能够获取用户资产。Adam 再次提醒大家,务必仔细阅读授权请求的内容,以免上当受骗。

🧩 地址污染钓鱼

地址污染钓鱼是一种新兴的攻击手段,黑客通过生成与用户历史交易地址相似的恶意地址,诱导用户将资金转移到这些恶意地址上。Adam 解释道,地址污染钓鱼通常分为三个步骤。首先,攻击者通过监控链上交易,使用脚本生成与用户历史交易地址前后几位相同的恶意地址。
接着,攻击者会利用这些恶意伪造地址向目标用户地址进行小额转账或无价值 Token 转账。如果目标用户在后续交易中,因为习惯从历史交易订单中复制对手地址进行转账,就极有可能因为大意将资产误转到恶意地址上。
2024 年 5 月 3 日就因为此地址污染钓鱼手法被钓鱼 1155W BTC,价值超过 7 千万美元。通常恶意地址前 4~6 位和后 4~6 位与正确地址相同。这些恶意地址会混入用户的交易历史中,造成视觉上的混淆。参考如下:

正确地址:0xd9A1b0B1e1aE382DbDc898Ea68012FfcB2853a91

恶意地址:0xd9A1C3788D81257612E2581A6ea0aDa244853a91

以下是相关的交易链接:
  1. 正常交易:https://etherscan.io/tx/0xb18ab131d251f7429c56a2ae2b1b75ce104fe9e83315a0c71ccf2b20267683ac

  2. 地址污染:https://etherscan.io/tx/0x87c6e5d56fea35315ba283de8b6422ad390b6b9d8d399d9b93a9051a3e11bf73

  3. 误转交易:https://etherscan.io/tx/0x3374abc5a9c766ba709651399b6e6162de97ca986abc23f423a9d893c8f5f570

目前,这种攻击方式已经完全自动化,攻击者可以批量生成和发送这些无价值 Token,污染用户的交易记录。为了防止这种攻击,Adam 建议用户在进行转账时,不要直接从区块链浏览器上的历史交易记录中复制地址,而是使用钱包内保存的地址簿。此外,用户在进行转账时,应该仔细核对地址,不仅要看前几位,还要检查更多的位数,确保地址的准确性。

🧩 利用 CREATE2 绕过
安全检测的隐蔽钓鱼

虽然服务提供商和安全供应商不断提升防御能力,主流钱包和交易所也通过链上黑名单和钓鱼检测机制来保护用户资产,但攻防之间始终在不断演变。更隐蔽的钓鱼方式也在不断出现,需要提高警惕。其中利用 CREATE2 绕过钱包和安全插件的黑名单检测钓鱼就是近期比较常见的方式。
Adam 解释道,CREATE2 是以太坊在 Constantinople 升级时引入的新操作码,允许用户在以太坊上创建智能合约。传统上,用户部署智能合约后,系统会生成一个地址。而有了 CREATE2 后,创建者可以在合约部署前就确定其地址,并告知用户。这种机制带来了灵活性,但也伴随着新的安全风险。
CREATE2 的本质作用是能够自动化生成新地址,这对某些应用场景非常有用,但也被不法分子利用来进行钓鱼攻击。通过 CREATE2,攻击者可以在受害者不知情的情况下部署恶意合约,并利用预先确定的地址来绕过黑名单和安全检测机制,从而实施攻击。这种攻击方式极其隐蔽,因为在合约实际生成前,地址已被确定,且不会立即显现出恶意行为,直到合约实际部署和执行。Adam 强调,这使得传统的基于地址检测的安全机制难以防范此类攻击。



🎯 钓鱼即服务 
Drainer as a Service

当前的钓鱼攻击已经不仅仅是简单的地址替换和钓鱼网站,因高额的不法收益,已经发展出一条完整的黑色产业链,包括 Inferno、MS、Angel、Monkey、Venom、Pink、Pussy、Medusa 等多个活跃的团伙。攻击者可以通过 DaaS 平台轻松生成和管理钓鱼活动。Adam 解释道,这些平台通常会提供自动生成新地址的功能,以绕过黑名单检测,确保每次攻击都使用一个新的地址,从而提高成功率。
以 Inferno Drainer 为例,这是一个臭名昭著的网络钓鱼团伙。他们通过在不同网站上嵌入恶意脚本进行钓鱼,例如传播伪装成流行 Web3 协议功能的恶意脚本,如 seaport.js、coinbase.js、wallet-connect.js。这些脚本诱导用户集成或点击,在得到用户确认后,会自动将用户资产转移到攻击者的地址中。
目前已经发现超过 14,000 个包含恶意 Seaport 脚本的网站,超过 5,500 个包含恶意 WalletConnect 脚本的网站,超过 550 个包含恶意 Coinbase 脚本的网站,以及超过 16,000 个与 Inferno Drainer 有关的恶意域名,超过 100 个加密品牌的名称受到影响。
接着,Adam 进一步解释了 DaaS 骗局的运行流程:
  1. 推广服务:Inferno Drainer 通过名为 Inferno Multichain Drainer 的 Telegram 频道推广他们的服务,攻击者也可以通过 Inferno Drainer 的网站访问该服务。

  2. 设置钓鱼网站:攻击者通过 DaaS 服务功能,设置并生成属于自己的钓鱼网站,并通过 X(Twitter)、Discord和其他社交媒体进行传播。

  3. 诱导连接钱包:受害者被诱导扫描这些钓鱼网站上包含的二维码或其他方式来连接他们的钱包

  4. 初始化恶意交易:Drainer 检查受害者最有价值、最容易转移的资产,并初始化恶意交易。

  5. 受害者确认交易:受害者确认了这笔交易。

  6. 资产转移:资产被转移给犯罪分子。在被盗资产中,20% 转移给 Inferno Drainer 开发商,80% 转移给钓鱼攻击者。

此外,Adam 还展示了 DaaS 服务页面,Inferno Drainer 向客户显示他们的统计数据,包括连接数量(受害者已将钱包连接到钓鱼网站)、成功点击(如果受害者已确认交易)以及被盗资产的价值。每个客户都可以自定义属于自己的 Drainer 功能,使得钓鱼攻击更加个性化和高效。



📥 WEB3 钓鱼的一些排查
方式及安全建议

在活动的最后部分,Adam 提出了一些具体的排查方式和安全建议,帮助用户更好地应对和防范 Web3 钓鱼攻击。
谨慎点击不明链接:用户一定不要点击伪装成奖励、空投等利好消息的不明链接
警惕官方社媒信息官方社媒账户被盗事件也越来越多,即使是官方发布的消息也可能是钓鱼信息。Adam 强调,官方消息并不等于绝对安全,用户需要保持警惕。
甄别应用来源在使用钱包、DApp 等应用时,一定要注意甄别,谨防伪造站点和伪造 App。用户应从官网或官方应用商店下载应用,确保来源可信。
谨慎确认交易和签名信息任何需要确认的交易或签名信息都需要谨慎处理,尽量从目标、内容等信息上进行交叉确认。拒绝盲签,保持警惕,怀疑一切,确保每一步操作都是明确和安全的。
学习并掌握钓鱼攻击特征用户需要对本文提到的常见钓鱼攻击方式有所了解,学会主动识别钓鱼特征。掌握常见签名、授权函数及其风险,了解交互网址(Interactive)、授权方地址(Owner)、被授权方地址(Spender)、授权数量(Value)、随机数(Nonce)、过期时间(Deadline)、转账(transfer/transferFrom)等字段内容。
最后 Adam总结道 ,如果用户不幸遭遇钓鱼攻击,首先应立即排查原因,确保剩余资产的安全。接着,用户应迅速寻求专业团队的帮助,尝试追回被盗资产。防范钓鱼攻击和保证资产安全,既需要用户具备足够的安全意识和技能,也需要依靠专业团队的力量。

🔍 参考文献:

  • https://x.com/evilcos/status/1661224434651529218

  • https://x.com/RevokeCash/status/1648694185942450177

  • https://web3caff.com/zh/archives/63069 

  • https://www.group-ib.com/blog/inferno-drainer/

  • https://blocksec.com/blog/how-phishing-websites-bypass-wallet-security-alerts-strategies-unveiled



往期精彩

引入 ZK 技术打造去信任化游戏,Blade Games 如何引领全链游戏未来浪潮?

Aptos Builder Jam 亚洲首站|见证 Aptos 公链 2024 年新突破

Puffer Finance 如何凭借“再质押”,化解以太坊节点运行难题?


关于我们

ABOUT US



TinTinLand 是赋能下一代开发者的技术社区,通过聚集、培育、输送开发者到各开放网络,共同定义并构建未来。


Discord: https://discord.gg/kmPnTDSFu8

Twitter: https://twitter.com/OurTinTinLand

Bilibili: https://space.bilibili.com/1152852334

Medium: https://medium.com/@tintin.land2021

YouTube: https://www.youtube.com/channel/UCfHiMcFt-4btbC75FsReQh


点击“阅读原文”进入 TinTinLand 社区空间 Notion 资源库,需科学上网访问

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存