通付盾Web3专题 | SharkTeam:Web3常见钓鱼方式分析与安全防范建议

news2024/9/23 1:28:20

引言

Web3钓鱼是一种针对Web3用户的常见攻击手段,通过各种方式窃取用户的授权、签名,或诱导用户进行误操作,目的是盗窃用户钱包中的加密资产。

近年来,Web3钓鱼事件不断出现,且发展出钓鱼即服务的黑色产业链(Drainer as a Service, DaaS),安全形势严峻。

本文中,SharkTeam将对常见的Web3钓鱼方式进行系统分析并给出安全防范建议,供大家参考,希望能帮助用户更好的识别钓鱼骗局,保护自身的加密资产安全。

常见钓鱼手法分析

01 Permit链下签名钓鱼

Permit是针对ERC-20标准下授权的一个扩展功能,简单来说就是你可以签名批准其他地址来挪动你的Token。其原理是你通过签名的方式表示被授权的地址可以通过这个签名来使用你的代币,然后被授权的地址拿着你的签名进行链上permit交互后就获取了调用授权并可以转走你的资产。Permit链下签名钓鱼通常分为三步:

(1)攻击者伪造钓鱼链接或钓鱼网站,诱导用户通过钱包进行签名(无合约交互,不上链)。

签名对象:DAI/USDC/WETH等ERC20代币(这里是DAI)

holder://签名地址

spender://钓鱼者地址

nonce:0

expiry:1988064000 //过期时间

allowed:true

如果签名了,钓鱼者就从受害者这边获得了用于盗出DAI/USDC/WETH等ERC20代币(这里是DAI)的签名(一段r, s, v 值,钓鱼者与permit函数交互时需要用到)。

(2)攻击者调用permit函数,完成授权。

https://etherscan.io/tx/0x1fe75ad73f19cc4c3b658889dae552bb90cf5cef402789d256ff7c3e091bb662

(3)攻击者调用transferFrom函数,将受害者资产转出,完成攻击。
 

在这里先说明一下transfer和transferFrom的区别,当我们直接进行ERC20转账的时候,通常是调用ERC20合约中的transfer函数,而transferFrom通常是在授权第三方将我们钱包内的ERC20转移给其他地址时使用。

https://etherscan.io/tx/0x9c02340896e238fc667c1d84fec78af99b1642c986fe3a81602903af498eb938

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

02 Permit2链下签名钓鱼

Permit2是Uniswap为了方便用户使用,在2022年底推出的一个智能合约,它是一个代币审批合约,允许代币授权在不同的DApp中共享和管理,未来随着越来越多的项目与Permit2 集成,Permit2合约可以在DApp生态系统中实现更加统一的授权管理体验,并且节约用户交易成本。
 

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

Permit2虽然提高了用户的体验,但随之而来是针对Permit2签名的钓鱼攻击。和Permit链下签名钓鱼类似,Permit2也是链下签名钓鱼,此种攻击主要分为四步:
 

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


 


 

https://etherscan.io/tx/0xd8f0333b9e0db7175c38c37e490379bde5c83a916bdaa2b9d46ee6bff4412e8f

(2)攻击者伪造钓鱼链接或钓鱼页面,诱导用户进行签名,钓鱼攻击者获取所需的签名信息,和Permit链下签名钓鱼类似。

(3)攻击者调用Permit2合约的permit函数,完成授权。

https://etherscan.io/tx/0xd8c3f55dfbc8b368134e6236b296563f506827bd5dc4d6c0df39851fd219d658

(4)攻击者调用Permit2合约的transferFrom函数,将受害者资产转出,完成攻击。

https://etherscan.io/tx/0xf6461e003a55f8ecbe919a47b3c0dc6d0f068e48a941658329e35dc703138486

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

03 eth_sign 链上盲签钓鱼

eth_sign是一种开放式签名方法,可以对任意哈希进行签名,攻击者只需构造出任意恶意需签名数据(如:代币转账,合约调用、获取授权等)并诱导用户通过 eth_sign 进行签名即可完成攻击。
 

MetaMask在进行eth_sign签名时会有风险提示,imToken、OneKey等Web3钱包均已禁用此函数或提供风险提示,建议所有钱包厂商禁用此方法,防止用户因缺乏安全意识或必要的技术积累被攻击。

04 personal_sign/signTypedData 链上签名钓鱼

personal_sign、signTypedData是常用的签名方式,通常用户需要仔细核对发起者、域名、签名内容等是否安全,如果是有风险的,要格外警惕。

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

05 授权钓鱼

攻击者通过伪造恶意网站,或者在项目官网上挂马,诱导用户对setApprovalForAll、Approve、Increase Approval、Increase Allowance等操作进行确认,获取用户的资产操作授权并实施盗窃。
 

(1)setApprovalForAll

以PREMINT挂马钓鱼事件为例,项目方网站上的一个js文件(https://s3-redwood-labs.premint.xyz/theme/js/boomerang.min.js)被注入了恶意代码,执行后会动态创建注入恶意js文件(https://s3-redwood-labs-premint-xyz.com/cdn.min.js?v=1658050292559)。攻击由这个恶意脚本发起。

用户因未及时发现风险,对setApprovalForAll操作进行了确认,无意间泄漏了对资产的操作授权,导致资产被盗。


 

(2)Approve

与setApprovalForAll类似,用户对Approve操作进行了确认,泄漏了对资产的操作授权,导致资产被盗。

Approve误授权:

https://etherscan.io/tx/0x4b0655a5b75a9c078653939101fffc1d08ff7e5c89b0695ca6db5998214353fa

攻击者通过transferFrom转移资产:

https://etherscan.io/tx/0x0dedf25777ff5483bf71e70e031aacbaf50124f7ebb6804beb17aee2c15c33e8

Increase Approval和Increase Allowance函数攻击原理也与此类似,默认状态下攻击者对受害者地址代币的操作上限额度为0,但经过这两个函数的授权之后,攻击者提高了对受害者代币的操作上限,随后就能将该额度的代币转移。
 

(3)Increase Approval

Increase Approval误授权:

https://etherscan.io/tx/0x7ae694080e2ad007fd6fa25f9a22ca0bbbff4358b9bc84cc0a5ba7872118a223


 

攻击者通过transferFrom转移资产:

https://etherscan.io/tx/0x15bc5516ed7490041904f1a4c594c33740060e0f0271cb89fe9ed43c974a7a69

(4)Increase Allowance

Increase Allowance误授权:

https://etherscan.io/tx/0xbb4fe89c03d8321c5bfed612fb76f0756ac7e99c1efaf7c4d99d99f850d4de53


 

攻击者通过transferFrom转移资产:

https://etherscan.io/tx/0xb91d7b1440745aa07409be36666bc291ecc661e424b21b855698d488949b920f

06 地址污染钓鱼

地址污染钓鱼也是近期猖獗的钓鱼手段之一,攻击者监控链上交易,之后根据目标用户历史交易中的对手地址进行恶意地址伪造,通常前4~6位和后4~6位与正确的对手方地址方相同,然后用这些恶意伪造地址向目标用户地址进行小额转账或无价值代币转账。

如果目标用户在后续交易中,因个人习惯从历史交易订单中复制对手地址进行转账,则极有可能因为大意将资产误转到恶意地址上。

2024年5月3日就因为此地址污染钓鱼手法被钓鱼1155WBTC,价值超过7千万美元。
 

正确地址:0xd9A1b0B1e1aE382DbDc898Ea68012FfcB2853a91

恶意地址:0xd9A1C3788D81257612E2581A6ea0aDa244853a91

正常交易:

https://etherscan.io/tx/0xb18ab131d251f7429c56a2ae2b1b75ce104fe9e83315a0c71ccf2b20267683ac

地址污染:
 

https://etherscan.io/tx/0x87c6e5d56fea35315ba283de8b6422ad390b6b9d8d399d9b93a9051a3e11bf73

误转交易:

https://etherscan.io/tx/0x3374abc5a9c766ba709651399b6e6162de97ca986abc23f423a9d893c8f5f570

07 更隐蔽的钓鱼,利用CREATE2绕过安全检测

目前,各钱包和安全插件已逐步实现对钓鱼黑名单和常见钓鱼方式的可视化风险提醒,对签名信息也展示的愈发完整,提高了普通用户识别钓鱼攻击的能力。但攻防技术总是在相互对抗又不断发展的,更隐蔽的钓鱼方式也在不断出现,需要提高警惕。利用CREATE2绕过钱包和安全插件的黑名单检测就是近期比较常见的方式。

Create2是以太坊'Constantinople'升级时引入的操作码,允许用户在以太坊上创建智能合约。原来的Create操作码是根据创建者的地址和nonce来生成新地址的,Create2允许用户在合约部署前计算地址。Create2对以太坊开发者来说是一个非常强大的工具,可以实现先进和灵活的合约交互、基于参数的合约地址预计算、链下交易和特定分布式应用的灵活部署和适配。

Create2在带来好处的同时也带来了新的安全风险。Create2可以被滥用来生成没有恶意交易历史的新地址,绕过钱包的黑名单检测和安全告警。当受害者签署恶意交易时,攻击者就可以在预先计算的地址上部署合约,并将受害者的资产转账到该地址,且这是一个不可逆的过程。

该攻击特点:

(1)允许预测性创建合约地址,使攻击者能够在部署合约之前欺骗用户授予权限。

(2)由于授权时合约尚未部署,因此攻击地址是一个新地址,检测工具无法基于历史黑名单来进行预警,具有更高的隐蔽性。

以下是一个利用CREATE2进行钓鱼的示例:

https://etherscan.io/tx/0x83f6bfde97f2fe60d2a4a1f55f9c4ea476c9d87fa0fcd0c1c3592ad6a539ed14


 

在这笔交易中,受害者把地址中的sfrxETH转给了恶意地址(0x4D9f77),该地址是一个新的合约地址,没有任何交易记录。
 

但是打开这个合约的创建交易可以发现,该合约在创建的同时完成了钓鱼攻击,将资产从受害者地址转出。
 

https://etherscan.io/tx/0x77c79f9c865c64f76dc7f9dff978a0b8081dce72cab7c256ac52a764376f8e52

(详见全文)

钓鱼即服务

钓鱼攻击日益猖獗,也因不法获利颇丰,已逐步发展出以钓鱼即服务(Drainer as a Service, DaaS)的黑色产业链,比较活跃的如Inferno/MS/Angel/Monkey/Venom/Pink/Pussy/Medusa 等,钓鱼攻击者购买这些DaaS服务,快速且低门槛的构建出成千上万钓鱼网站、欺诈账号等,如洪水猛兽冲进这个行业,威胁着用户的资产安全。

以Inferno Drainer 为例,这是一个臭名昭著的网络钓鱼团伙,他们通过在不同网站上嵌入恶意脚本来实现钓鱼。例如,他们通过传播seaport.js、coinbase.js、wallet-connect.js伪装成流行的 Web3 协议功能(Seaport、WalletConnect 和 Coinbase)诱导用户集成或点击,在得到用户确认后,会自动将用户资产转到攻击者地址中。目前已发现超过 14,000 个包含恶意 Seaport脚本的网站,超过 5,500 个包含恶意 WalletConnect 脚本的网站,超过 550 个包含恶意 Coinbase脚本的网站,以及超过 16,000 个与Inferno Drainer有关的恶意域名,超过 100 个加密品牌的品牌名称受到影响。如下是一个Inferno Drainer相关的钓鱼网站。


 

该网站的 head 部分包含seaport.js 和 wallet-connect.js两个恶意脚本。Inferno Drainer 钓鱼网站的另一个典型特征是用户无法通过鼠标右键打开网站源代码,这使得这些钓鱼网站的隐蔽性更高。

在钓鱼即服务框架下,通常20% 的被盗资产被自动转移给 Inferno Drainer 的组织者地址,钓鱼实施者保留剩余的 80%。除此之外,Inferno Drainer 定期提供创建和托管网络钓鱼网站的免费服务,有时钓鱼服务也会要求收取被骗资金的 30% 的费用,这些网络钓鱼网站是为那些能够吸引受害者访问但缺乏创建和托管网站的技术能力或根本不想自己执行此任务的钓鱼攻击者设计的。

那么,这种DaaS骗局是如何运行的,下图是Inferno Drainer 的加密诈骗方案的分步描述:(详见全文)

安全建议

(1)首先,用户一定不要点击伪装成奖励、空投等利好消息的不明链接;

(2)官方社媒账户被盗事件也越来越多,官方发布的消息也可能是钓鱼信息,官方消息也不等于绝对安全;

(3)在使用钱包、DApp等应用时,一定要注意甄别,谨防伪造站点、伪造App;

(4)任何需要确认的交易或签名的消息都需要谨慎,尽量从目标、内容等信息上进行交叉确认。拒绝盲签,保持警惕,怀疑一切,确保每一步操作都是明确和安全的。

(5)另外,用户需要对本文提到的常见钓鱼攻击方式有所了解,要学会主动识别钓鱼特征。掌握常见签名、授权函数及其风险,掌握Interactive(交互网址)、Owner(授权方地址)、Spender(被授权方地址)、Value(授权数量)、Nonce(随机数)、Deadline(过期时间)、transfer/transferFrom(转账)等字段内容。


 

《SharkTeam:Web3常见钓鱼方式分析与安全防范建议》全文

参考文献:

·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

-END-

数信云,基于区块链与人工智能的数据安全应用与服务平台

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1701996.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python+pymysql对数据库进行增、删、改、查操作

一、概述 接口测试中,应用到数据库操作的场景: 1.校验测试数据 接口发送请求后明确会对数据库中的某个字段进行修改(编辑,更新、删除操作),但,响应结果中无该字段数据时。 例如:删…

QML-1- qml简介及项目创建

文章目录 1. QML 简介2. 项目创建3. 目录结构4. CMakeLists.txt 简单介绍5. 运行demo 1. QML 简介 根据官网介绍,qml 为qt一个模块,使用Qml语言开发应用程序和库提供了一个框架。它定义并实现了语言和引擎基础结构,并提供了一个API&#xff…

搭建属于自己的 Git 仓库:GitLab

搭建属于自己的 Git 仓库:使用 GitLab 文章目录 搭建属于自己的 Git 仓库:使用 GitLab什么是 GitLab?准备工作安装 Docker使用Docker Compose 快速构建GitLab1、从docker compose快速搭建GitLab2、部署到服务器并访问3、浏览器访问 在现代软件…

Linux-挂盘-分区-卸盘

Linux-挂盘-分区-卸盘 1. 添加硬盘 2. 查看硬盘 [rootlocalhost /]# lsblk # 查看我们新添加的磁盘 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 80G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 …

基于JT/T808、JT/T1078、苏标、粤标视频主动安全监控

1.概述 如下图是以实时视频点播与部标机产生了主动安全报警,各个服务之间的交互流程说明。 整个系统有以下几个核心组件组成: 1:系统业务端:车载监控业务系统,给用户提供车载监控整套业务流程与界面呈现;…

蓝海项目揭秘:跨境选品师的崛起与挑战

随着全球化贸易的日益深入和电子商务的蓬勃发展,跨境选品师这一新兴职业逐渐走进人们的视野。跨境选品师,顾名思义,就是专门负责为跨境电商平台挑选和推荐适合海外市场的商品的专业人士。那么,跨境选品师这一职业能否被视为一个蓝…

【算法】排序

排序算法在信息学非常常用。Hello&#xff01;大家好&#xff0c;我是学霸小羊&#xff0c;今天讲几个排序算法。 1.“打擂台”排序 思路&#xff1a;a[ i ]和a[ j ]打擂台&#xff08;i<j&#xff09;。 这个方法简单易懂&#xff0c;只需要看看需不需要交换。按从大到小…

行为设计模式之策略模式

文章目录 概述原理结构图 代码实现小结 概述 策略模式(strategy pattern)的原始定义是&#xff1a;定义一系列算法&#xff0c;将每一个算法封装起来&#xff0c;并使它们可以相互替换。策略模式让算法可以独立于使用它的客户端而变化。 在软件开发中也会遇到相似的情况&…

考研数学|强化跟「张宇」还是「武忠祥」?看这一篇!

考研数学强化阶段是备考过程中非常关键的一环&#xff0c;它不仅要求学生巩固和深化基础知识&#xff0c;还要求学生能够灵活运用所学知识解决复杂问题。 在选择张宇老师或武忠祥老师的高数强化课时&#xff0c;你可以考虑以下几个方面。 首先每位学生都有自己独特的学习风格…

问题记录_stm32“No target connected“

问题描述&#xff1a; 基于HAL库和stm32cubeMX生成的代码&#xff0c;烧录时出现如下报错窗口&#xff1a; 问题原因&#xff1a; stm32cubeMX生成代码时关闭了SWJ调试功能 解决方法&#xff1a; 在项目中找到__HAL_AFIO_REMAP_SWJ_DISABLE();并注释掉 然后短按复位键的…

通用代码生成器应用场景二,快速原型

通用代码生成器应用场景二&#xff0c;快速原型 对项目经理&#xff0c;产品经理和售前工程师而言&#xff0c;开发快速原型是一种常见的需求。使用通用代码生成器&#xff0c;您可以更好&#xff0c;更快的开发系统的快速原型。通用代码生成器对完成CRUD和登录系统阶段的快速…

新手必看!TikTok视频0播放的5大原因及解决方法

很多刚起步的TikTok卖家常会遇到一个烦心事&#xff1a;发布的视频播放量少得可怜&#xff0c;甚至有时是0播放。这确实让人挺沮丧的。到底如何突破TikTok视频总是播放量为0的瓶颈&#xff1f;别担心&#xff0c;今天为大家总结了tiktok视频播放量上不去的5种原因和相应的解决方…

【leetcode2028. 找出缺失的观测数据(自己写出来了)】

给你一个长度为 m 的整数数组 rolls &#xff0c;其中 rolls[i] 是第 i 次观测的值。同时给你两个整数 mean 和 n 。返回一个长度为 n 的数组&#xff0c;包含所有缺失的观测数据&#xff0c;且满足这 n m 次投掷的 平均值 是 mean 。如果存在多组符合要求的答案&#xff0c;只…

山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(二十一)- 微服务(1)

微服务 1.认识微服务 SpringCloud底层是依赖于SpringBoot的&#xff0c;并且有版本的兼容关系&#xff0c;如下&#xff1a; 2. 服务拆分 需求 &#xff1a; 把订单信息和用户信息一起返回 从订单模块向用户模块发起远程调用 &#xff0c; 把查到的结果一起返回 步骤 &…

ubuntu切换CUDA版本

查询版本 cd /usr/local在此目录下进行 ls 命令可以查看自己安装了哪些版本 使用stat cuda命令可以查看当前软连接(符号)为哪个版本&#xff0c;即使用的是哪个版本 若要修改使用的CUDA&#xff0c;只需要删除此软连接&#xff0c;再创建一个新的软连接&#xff0c;指向自己…

最新!!2024年上半年软考【中级】网络工程师 综合知识真题解析

2024上半年软考考试已经结束了&#xff0c;为大家整理了网友回忆版的网络工程师真题及答案&#xff0c;总共41道题。 上半年考试的宝子们可以对答案预估分数&#xff01;准备下半年考的宝子可以提前把握考试知识点和出题方向&#xff0c;说不定会遇到相同考点的题目&#xff01…

python九九乘法表的打印思考及实现

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、问题引入 九九乘法表的显示需求 二、问题分析 嵌套循环的概念 屏幕宽度与换行的考虑…

【NumPy】关于numpy.multiply()函数,看这一篇文章就够了

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

艾体宝干货 | 用于故障排除的最佳 Wireshark 过滤器

在网络故障排除过程中&#xff0c;Wireshark是一款非常强大的工具&#xff0c;它可以用来分析网络数据包并解决各种问题。本文将介绍一些好用的Wireshark过滤器&#xff0c;以便更有效地进行故障排除。 分析网络行为和排除网络故障就像用漏斗过滤渣滓。因此&#xff0c;网络协…

研二学妹面试字节,竟倒在了ThreadLocal上,这是不要应届生还是不要女生啊?

一、写在开头 今天和一个之前研二的学妹聊天&#xff0c;聊及她上周面试字节的情况&#xff0c;着实感受到了Java后端现在找工作的压力啊&#xff0c;记得在18&#xff0c;19年的时候&#xff0c;研究生计算机专业的学生&#xff0c;背背八股文找个Java开发工作毫无问题&#x…