黑暗森林遍布危机,如何保护自己的 NFT 资产?

出品:Beosin

封面:Photo by Shubham Dhage on Unsplash

排版:Web3Caff 编辑部

前有周杰伦无聊猿 NFT 被钓鱼攻击,损失超 300 万人民币。后有全球最大的 NFT 交易平台之一 OpenSea 大批用户遭遇钓鱼攻击,多人资产受损。可见 Web3 世界黑客依然猖狂作祟,为了打击黑客嚣张的气焰,我们将通过为大家输出干货文章,帮助大家学习 NFT 防骗技巧。

目录:

  • 两类典型 NFT 钓鱼攻击
    • 盗取用户签名的钓鱼
    • 高仿域名的 NFT 钓鱼
  • NFT 合约漏洞
    • NFT 自身漏洞问题
    • NFT 平台漏洞问题
  • 深入揭秘 NFT 钓鱼流程及防范技巧
    • 钓鱼网站是如何 “钓” 你的?
    • 必须学会的防范技巧

两类典型 NFT 钓鱼攻击

盗取用户签名的钓鱼

2022 年 2 月 21 日,全球最大的加密数字藏品市场 Opensea 遭遇黑客攻击。根据 Opensea 官方回复,有部分用户由于签署了给黑客的授权而导致用户 NFT 被盗。

我们将本次事件再次复现一下,在本次事件攻击事件中,攻击者信息如下:

攻击者地址(Fake_Phishing5169):

0x3e0defb880cd8e163bad68abe66437f99a7a8a74

攻击者合约(Fake_Phishing5176):

0xa2c0946ad444dccf990394c5cbe019a858a945bd

攻击者获得相关 NFT 的交易具体如下图所示:

针对其中一笔交易进行分析,

0xee038a31ab6e3f06bd747ab9dd0c3abafa48a51e969bcb666ecd3f22ff989589,具体内容如下:

图片

由上图可知,攻击者是获得了用户的授权,之后直接调用 transferfrom 方法将用户的 NFT 盗走。

根据 Opensea 的 CEO Devin Finzer 发布的 twitter,攻击者是通过钓鱼的方式获取到用户在 Opensea 上的挂单授权。

图片

通过分析攻击交易,黑客攻击主要分为以下三个步骤。

1. 构造正确的待签名交易;

2. 诱骗用户点击授权;

3. 获取用户签名后构造攻击合约盗取用户 NFT。

步骤一

首先对攻击者构建的交易签名内容进行分析,跟踪函数调用栈发现具体的签名信息如下:

图片

由上图可知,签名的计算方式为:keccak256("\x19 Ethereum Signed Message:\n32", hashOrder(order));这种签名方式会在 order 前再加一个消息前缀:’\x19 Ethereum Signed Message:\n32’,以确保改签名不能在以太坊之外使用。之后将加上消息前缀的完整数据再计算 keccak256 值,最后用私钥进行签名。

但是该方式仅能声明所有权,无法防止重放攻击。如:用户 A 签署了消息发送给合约 M,另一用户 B 可以将这个签名重放给合约 N。下图为订单签名中具体涉及到的信息。

图片

其中涉及到的签名主要参数为:

- Side:买入或卖出

- paymentToken:用于支付订单的代币类型

- basePrice:订单中 NFT 的价格

- maker:订单发出地址

- taker:接收订单的目标地址

上述签名信息中包含订单金额、目标地址等敏感信息,但是经过 keccak256 计算 Hash 后的值只是一串二进制字符串,用户无法识别。

攻击者根据上述 Order 信息构造签名,可以随意将上述签名中涉及到的 basePrice 参数金额设置为 0,接收地址设置为自己等。

步骤二 

攻击者构造好待签名数据后就可以诱骗用户点击授权。由于签名的元数据是经过 Keccak256 计算后得到的包含 0x 的 66 个十六进制字符,用户无法得知其代表的具体含义,因此可能直接点击签名,使得攻击者获得了用户的挂单授权。

图片

上图中的签名对于用户来说类似盲签,即所签的消息内容对签名人来说是盲的,签名人不能看见消息的具体内容。

步骤三 

在步骤二中攻击者获取到 ECDSA 签名消息中的 R、S、V 值,即可利用其构造攻击合约盗取用户 NFT。下图为 OpenSea: Wyvern Exchange v1 合约中验证 order 的函数 validateOrder(),具体源码如下:

图片

由源码可知,订单验证首先会校验 order 的有效性和是否包含有效参数,接着校验订单是否曾经通过链上校验。其中 approvedOrders 是一个 mapping 变量,该变量保存了所有已经通过链上批准验证的订单。如果订单曾经校验过则直接返回 true,无需再使用 ecrecover() 校验 ECDSA 签名,以便智能合约可以直接下订单。

以下是其中一笔 NFT 盗取交易,可以发现攻击者利用用户签名通过调用攻击者合约(Fake_Phishing5176):

0xa2c0946ad444dccf990394c5cbe019a858a945bd,以 0 ether 的价格盗取了用户的 NFT。

高仿域名的 NFT 钓鱼

这一类的钓鱼网站主要是对 NFT 项目官网的域名和内容等进行几乎一致的模仿,一般会先连接用户钱包查询用户余额之后,再进行其他诱骗操作。这种钓鱼网站是最常见的,主要分为以下几种类型:

仅更换原官网的顶级域名

案例一

官网:https://invisiblefriends.io/

钓鱼网站:https://invisiblefriends.ch/

图片

查看钓鱼网站的网页源码,可以发现如下攻击地址:

图片

查看

0xEcAcDb9FA4Ed4ACD8977821737da7bCe688be1e0 的相关交易:

图片

可以发现上述两笔交易是攻击者获取到的收益。

案例二

官网:https://cyberbrokers.io/

钓鱼网站:https://cyberbrokers.live/

图片

查看钓鱼网站源码,发现如下攻击地址:

图片

综上,该类事件主要是因为用户在签署交易签名时,由于签署的交易内容是加密后的字符串,导致用户无法直观的看到签署交易的具体内容,习惯性的点击确认,从而造成攻击者获取到用户的卖单权授权,盗走用户的 NFT。(编辑修正:此段为第一部分结尾总结)

主域名添加单词或符号进行混淆

有的钓鱼网站会在主域名添加单词或符号进行混淆,比如 othersidemeta-airdrop、otherside-refunds.xyz 等。

官网:https://otherside.xyz/

钓鱼网站:http://othersidemeta-airdrop.com/

图片

查看钓鱼网站源码,发现页面存在 setApprovalForAll() 函数,该函数会授权_operator 具有所有代币的控制权。如果用户授权了攻击者,则用户账号中所有的 NFT 将会被盗走。

图片

添加二级域名进行混淆

有的钓鱼网站会添加二级域名进行混淆,进行钓鱼欺骗。

官网:https://www.okaybears.com/

钓鱼网站:https://okaybears.co.uk/

图片

查看网页源码,根据 solana web3 的官方文档 API,确认如下地址为攻击地址:

图片

在如今钓鱼事件频发的情况下,用户需提高安全意识,保护自己。以下是我们的安全建议:

1 签名时应当明确签署的交易内容,包括交易价格、交易地址等信息,如下图红框处内容所示:

图片

如果存在签署内容仅为二进制字符串内容等无法明确的内容,请勿签署。

2 切勿点击任何邮件中的链接、附件,或输入任何个人信息。

3 访问 NFT 官网时,一般在官网右上角等处会显示官方 twitter、discord 等社交帐号,需在官方账号上确认官网地址。

4 安装钓鱼插件,可辅助识别部分钓鱼网站。

NFT 合约漏洞

NFT 智能合约层面上的漏洞同样值得我们警惕!随着今年一系列 NFT 智能合约相关安全事件的发生,如:APE Coin 空投事件、TreasureDAO 安全事件等,让我们必须再次关注 NFT 领域的智能合约安全。

典型的 NFT 合约漏洞主要包含两大类,一类是 NFT 自身的漏洞;一类是 NFT 平台业务相关漏洞问题。

NFT 自身漏洞问题

NFT 的生命周期通常分为发行、流转、销毁等阶段,其中在发行阶段存在的安全问题最多。NFT 的购买通常分为预售、正式发售两种情况。而预售阶段项目方一般会设置能够参与的用户白名单。但是即使进行了设置,但仍然存在各类白名单绕过漏洞的问题。

案例一:APE Coin 空投事件 

2022 年 3 月 17 日,推特用户 Will Sheehan 发布推文称套利机器人通过闪电贷薅羊毛拿到了超过 6 万的 APE Coin 空投。

图片

关于本次攻击事件中,相关信息如下:

攻击交易:

0xeb8c3bebed11e2e4fcd30cbfc2fb3c55c4ca166003c7f7d319e78eaab9747098

获利者地址:

0x6703741e913a30D6604481472b6d81F3da45e6E8

漏洞合约地址:

0x025C6da5BD0e6A5dd1350fda9e3B6a614B205a1F

攻击者获得相关 APE 空投的交易具体如下图所示:

攻击者套利的主要步骤为:

1. 首先从 Opensea 购买了 ID 为 1060 的 BAYC NFT;

2. 通过 NFTX 以闪电贷借出 5 个 BAYC NFT;

3. 利用空投合约(AirdropGrapesToken)漏洞,领取 6 个 BAYC 对应数量的 APE Coin;

4. 归还闪电贷,并转移获利的 APE Coin;

其中涉及到的漏洞合约 AirdropGrapesToken 代码如下图所示:

图片

如上图所示,该函数使用 alpha.balanceOf() 和 beta.balanceOf() 判定调用者对 BAYC/MAYC NFT 的所有权。但是这种方式仅能获取到用户对该 NFT 所有权的瞬时状态,该瞬时状态可以通过闪电贷借入进行操控,更安全的方式是采用基于默克尔树的(Merkle tree)链下快照方式。该方式将白名单存储在链下项目方的中心服务器上,当用户在前端官网点击 mint 之后,服务器会根据钱包地址生成 Merkle proof,用户再向智能合约发送一笔携带 Merkle proof 的交易,并在链上的智能合约中进行验证。

图片

该方式一般包含以下三部分:

- 后台根据白名单地址生成 Merkle tree;

- 将 Merkle Root 上传到区块链;

- 验证时前端根据当前用户生成 Merkle Proof,并将其传入 NFT 合约校验;

具体可以参考 NFT 项目 Invisible Friends (INVSBLE),合约地址:0x59468516a8259058baD1cA5F8f4BFF190d30E066。以下是 INVSBLE 项目中采取的白名单铸币方法 mintListed():

图片

- amount:铸造 NFT 的数量;

- maxAmount:该地址能铸造的 NFT 最大数量;

- merkleProof:判断某特定白名单地址节点是否属于 Merkle tree 上所需的数据,包含叶子节点、路径、根;

该函数首先校验预售是否开启、调用者是否还有额度铸造,接着进行白名单校验,并验证调用者出价是否正确,最后铸造 NFT。以下为进行白名单验证的代码实现:

图片

keccak256(abi.encodePacked(sender,maxAmount.toString())) 用于计算默克尔树的叶子节点,此处用白名单用户地址和每个用户能够铸造的最大 NFT 数量作为叶子节点属性。同时还隐藏了一个校验,即 msg.sender 必须是白名单地址本身。

Merkle Proof 验证计算使用 library MerkleProof,计算过程可以参考 SPV 验证,具体源码如下:

图片

使用该方式,NFT 发行合约中不需要存储整个白名单列表,只需要存储 Merkle root。当交易发送方是非白名单用户时,因为其无法提供合法的 Merkle Proof,则无法通过校验。

链下数据快照验证白名单还有另一种使用签名的方式,此时如果合约开发者未设置足够的安全检查,也容易造成安全问题,如:NBA 薅羊毛事件。

案例二:NBA 薅羊毛事件 

2022 年 4 月 21 日,NBAxNFT 项目方遭遇黑客攻击。根据官方回复,由于其白名单校验出现问题导致预售提前售罄。

图片

本次攻击事件中,漏洞合约地址:

0xdd5a649fc076886dfd4b9ad6acfc9b5eb882e83c

图片

上述代码存在两个安全问题:签名冒用和签名复用。签名复用指的是,同一个签名只能使用一次,一般项目方会在合约中设置一个 mapping 结构存储该签名是否已经被使用,具体源码如下:

 mapping(bytes => bool) private usedClaimSignatures

其中 bytes 代表 Hash 签名数据,bool 值代表该签名是否曾经被使用,但是 mint_approved() 函数中并未存储该值,所以存在签名复用问题。

本文主要研究白名单校验中的签名冒用问题,即由于 vData memory 参数 info 在传参时未进行 msg.sender 校验导致签名可冒用。具体白名单校验函数 verify() 如下:

图片

上述代码采用签名校验的方式验证白名单,白名单存储在中心化服务器上,用户从前端 NFT 官网点击 mint 时,服务器会首先校验是否是白名单用户。如果是,则由服务器使用项目方私钥进行签名,再将签名数据返回。最后用户携带该签名的交易发送到链上进行验证。因此此处 ecrecover() 验证的仅仅是项目方的地址,仅能证明该签名数据是由项目方进行签发的,但是由于未对签名数据中的调用者,即 info.from 进行验证,所以导致签名可冒用。

NFT 平台漏洞问题

NFT 平台主要有两类,一类是 NFT 交易平台,如:Opensea、TreasureDAO 等;另一类是结合了 DeFi 业务的平台,如:Revest Finance 等。根据平台类型不同,对应的业务类型也不同,造成的安全漏洞也不同。

NFT+DeFi  类型

目前 NFT + DeFi 主要分为三种类型:一种是将 NFT 当作流动性代币,如:Uniswap-V3 等;一种是将 NFT 碎片化,即 FNFT(Fractional Non-Fungible Token),如:Revest Finance 等;另一种是将 NFT 作为借贷的抵押品,如:Position Exchange 等。其中 Revest Finance 项目包含以上三种业务类型,因此本文从业务逻辑的角度研究了 Revest Finance 安全事件。

Revest Finance 是针对 DeFi 领域的 staking 解决方案,用户通过该项目参与任何 Defi 的 staking,都可以直接生成一个 F-NFT,其代表了 staking 仓位当前和未来的价值,具体的业务模型如下:

图片

该项目中用户可以通过 mintAddressLock() 铸造对应抵押资产的 FNFT,具体代码如下所示:

图片

其中涉及到的重要参数为:

- trigger:只有该 address 可以解锁质押的资产;

- recipients:铸造的 FNFT 对应的接收者;

- quantities:各个接收者接收的 FNFT 数量;

- IRevest.FNFTConfig:描述 FNFT 对应的质押资产,包括:asset(抵押的资产类型,如 WETH 等)、depositAmount(每个 FNFT 代表的抵押资产数量,包含精度)等。

用户也可以通过 depositAdditionalToFNFT() 追加 FNFT 的抵押资产,具体代码如下:

图片

其中涉及到的重要的参数为:

- fnftId:需要追加资产的 FNFT;

- amount:每个 FNFT 需要追加的抵押资产数量,包含精度;

- quantity:为多少个 FNFT 追加抵押;

用户追加质押资产时,根据 quantity 的不同存在三种情况,第一种情况是为所有 FNFT 追加抵押,第二种情况是为其中一部分 FNFT 追加抵押,第三种情况是追加抵押的 FNFT 数量大于 FNFT 总量,此时报错返回。该漏洞为第二种情况下造成的重入,具体逻辑如下:

图片

由上述代码可知,追加抵押时需要先把之前的 FNFT 销毁,之后再铸造新的 FNFT。但是在铸造时,由于 min() 函数中未判断需铸造的 FNFT 是否已经存在,并且状态变量 fnftId 自增在_mint() 函数后。而_min() 中存在 ERC-1155 中的隐藏外部调用_doSafeTransferAcceptanceCheck(),造成了重入漏洞。具体代码如下:

图片

此处的 mint() 函数中_mint() 包含一个隐藏的外部调用,具体如下:

图片

攻击主要包括以下三个步骤:

1. 调用 mintAddressLock() 铸造了 2 个 fnftId 为 1027 的 FNFT,但是它们对应的资产为 0;

2. 调用 mintAddressLock() 铸造了 360000 个 fnftId 为 1028 的 FNFT,它们对应的抵押资产仍然为 0;

3. 在步骤 2 中,利用 ERC-1155 中_mint() 函数中的_doSafeTransferAcceptanceCheck() 重入了 depositAdditionalToFNFT(),将 1 个 fnftId 为 1027 的 FNFT 对应的抵押更新为 1 WETH。

由于此时 fnftId 还未自增,仍然为 1027,所以该函数会生成一个 fnftid 为 1028 且价值为 1 WETH 的 FNFT,导致将 id 为 1028 的 FNFT 价值从 0 更新为了 1 WETH。

综上,由于 FNFT 是一种证券化后的 NFT,其价值会根据业务逻辑的不同产生波动,如该例中的 staking 仓位价值。所以 FNFT 存在价值变更的情况,一般会通过重写 burn() 和 mint() 等函数实现价值变更,如:本例中的 FNFTHandler 合约。如果实现时没有考虑检查-交互-生效机制,就可能存在严重安全问题。

NFT 交易平台 

该类平台一般会实现简单的市场功能,包括:挂单、取消挂单、购买、出价、取消出价、接受出价、提现等。其中涉及到的 NFT 资产包括 ERC721、ERC1155 两种,开发过程中如果没有考虑到二者的区别,就可能造成安全问题,如 TreasureDAO 事件。

2022 年 3 月 3 日,TreasureDAO 生态的 TreasureMarketplace 交易平台遭到黑客攻击,造成 NFT token 被盗。传送门——《怪事?盗了又归还?TreasureDAO 安全事件分析

在本次事件攻击事件中,攻击者信息如下:

交易发起地址:

Arbitrum:0x9b1acd4336ebf7656f49224d14a892566fd48e68

漏洞合约:

Arbitrum:0x812cda2181ed7c45a35a691e0c85e231d218e273

攻击交易:

Arbitrum:0x57dc8e6a28efa28ac4a3ef50105b73f45d56615d4a6c142463b6372741db2a2b

TreasureMarketplaceBuyer 合约的 buyItem 函数在传入_quantity 参数后,并没有做代币类型判断,直接将_quantity 与_pricePerItem 相乘计算出了 totalPrice,因此 safeTransferFrom 函数可以在 ERC-20 代币支付数额只有 0 的情况下,调用 TreasureMarketplace 合约的 buyItem 函数来进行代币购买。

图片

但是在调用 TreasureMarketplace 合约的 buyItem 函数时,函数只对购买代币类型进行了判断,并没有对代币数量进行非 0 判断,导致 ERC-721 类型的代币可以在无视_quantity 数值的情况下直接购买,从而实现了漏洞攻击。

图片

本次安全事件主要原因是 ERC-1155 代币和 ERC-721 代币混用导致的逻辑混乱,ERC-721 代币并没有数量的概念,但是合约却使用了数量来计算代币购买价格,且最后在代币转账的实现中也未进行逻辑分离。

此外,在与 NFT 交易平台相关的漏洞中,除了上述由于 NFT 本身造成的漏洞外,还有由于平台本身存在安全问题而危害 NFT 交易的情况。如:近期发现的 Opensea Wyvern 2.2 合约漏洞,攻击者可以利用该漏洞窃取 Opensea 市场中具有活跃报价的用户 WETH。所幸 Opensea 团队预先发现了该问题,并进行了及时的修复,尚无相关攻击产生。

深入揭秘 NFT 钓鱼流程及防范技巧

NFT 钓鱼流程及防范技巧,其中一类是盗取用户签名的钓鱼攻击,另一类是高仿域名和内容的 NFT 钓鱼网站。

钓鱼网站是如何 “钓” 你的?

第一种:盗取用户签名 

在前两篇文章里,我们提到过该类钓鱼网站主要是引诱用户在钓鱼网站签名,如果用户签署了签名,则钓鱼网站可以获取到用户钱包中所有的 NFT。具体的签名内容如下:

图片

上图中红框一显示的是签名请求的网站来源,红框二显示的是请求的签名内容,由于显示的内容是一串二进制字符,所以用户其实不知道具体签署的是什么服务。

如果用户点击了 “Sign” 按钮,则可能会授权一些无法预测的服务,包括一些危险操作,如:授权钓鱼网站拥有用户钱包中 NFT 的转账权限等。

第二种:高仿域名和内容的 NFT 钓鱼网站 

前面的的文章里我们提到过该类钓鱼网站主要分为三类,第一类是仅更换原官网的顶级域名,第二类是主域名添加单词或符号进行混淆,第三类是添加二级域名进行混淆的钓鱼网站。

涉及到的钓鱼手法主要分为三种,第一种是伪造 NFT 项目官网诱骗用户直接进行转账的钓鱼网站,第二种是使用假空投诱骗用户授权的钓鱼网站,第三种是诱骗用户输入钱包助记词的钓鱼网站。下面将对其钓鱼手法进行详细介绍。

1. 伪造官网引诱用户直接转账

该类钓鱼网站主要是通过伪造 NFT 项目官网 UI 界面,诱骗用户连接钱包之后,点击 “mint” 按钮进行铸币。用户点击之后会向虚假的项目方地址转账,但是并不会收到对应的 NFT。具体如下图所示:

图片

用户进入到钓鱼网站后,会首先点击对应的 “connect wallet” 按钮,连接钱包。之后 UI 界面会进行刷新,出现如图所示的 “mint” 按钮。通常页面上还会出现类似 “xx 用户已经 mint 了 xxNFT” 这样的浮动标题,主要是为了刺激用户赶紧点击 mint。如下图所示:

用户如果点击 “Mint” 按钮之后,一般情况下钓鱼网站为了防止自己的转账黑地址泄露,会首先检测钱包余额是否为空。如果为空则不会进行交易,如果不为空才会弹出类似 MetaMask 的小狐狸钱包,进行交易。

2. 假空投诱骗用户进行 NFT 授权

该类钓鱼网站主要是利用假空投等手段,诱骗用户访问钓鱼网站。在用户连接钱包后,就会出现 “CLAIM NOW” 等引诱用户进行点击的按钮,用户点击之后就会对钓鱼网站的黑地址进行授权。具体如下图所示:

之后获得授权的钓鱼网站会将用户钱包中的 NFT 全部转走,具体如下图所示:

图片

下面是受害者被盗取的 NFT 交易:

图片

3. 诱骗用户填写助记词

该类钓鱼网站主要是在网页连接钱包处,或者其他位置诱骗用户点击,之后弹出一个伪造的网页,提示用户诸如 “MetaMask 插件版本需要升级” 等信息。如果用户相信并填写了自己的钱包助记词,那么用户的私钥就会上传到攻击者服务器导致用户钱包被盗。具体如下图所示:

该钓鱼网站弹出如下信息,提示用户检测到了 MetaMask 的一个安全问题,需要用户升级该钱包插件版本。如果用户在框中输入助记词,则会导致钱包被盗。

注意,如上图红框处所示,该跳转的钓鱼页面上网址并非是正常的域名网址,而变成了一串异常数值。用户也可以通过对比 MetaMask 官网域名与该页面异常网址识别钓鱼页面。

必须学会的防范技巧

防范签名被盗 

目前多数网站为了保护用户安全已经不支持盲签的签名方式,但是如果用户访问某些网站时仍然遇到盲签的情况,请尽量拒绝签署。本文主要讨论以下两种非盲签的情况下,用户如何防范钓鱼。

1. 用户签署交易时需要确认签署的内容

图片

如上图所示,用户签署授权时主要是对红框部分的服务条款进行签名,包括:提示用户如果点击 “Sign” 按钮则代表接受网站的服务条款,这个请求不会发起交易或者消耗 gas 费,并且该授权状态将在 24 小时后重置等。以及包括签署签名的用户地址、Nonce 值等。

2. 用户在进行交易签名前,应进行多方信息交叉验证,确保发起交易的网站是真官网。

防范高仿域名和内容的 NFT 钓鱼网站 

此前文章我们介绍了三种高仿域名和内容的 NFT 钓鱼网站,其中第三种是直接诱骗用户输入助记词。针对该类网站,用户只需记住任何要求输入助记词的网页都是不安全的即可。本文主要介绍其他两种钓鱼网站的相关防范措施:

1. 伪造官网引诱用户直接转账

这类的钓鱼网站通常域名和内容都跟原项目官网十分相似,用户在访问时需特别注意识别官网。

1)一般在访问 NFT 官网时,首页通常有官方社交媒体账号,如:twitter、discord 等。

目前很多 NFT 官方网站都不会直接提供 “mint” 功能,或将更多数量的 NFT 放到了诸如 Opensea 之类的交易所上进行售卖,如下图所示:

图片

同时,一般在 NFT 项目官网底部都会列举出官网社交账号,下图红框处从左往右依次是:Discord、twitter、traitsniper、opensea。

图片

用户可以访问这些社交账号,首先识别其账号是否是官方账号,通常直接在 twitter 上搜索项目名称可以发现官方账号,如果存在同名的情况那么注意筛选出关注人数较多的账号,具体如下图所示:

上图中显示的第一个红框就是 NFT 项目对应的官网,任何其他的网址都是钓鱼网站;第二个红框是该项目在其他平台上的官方链接,如:Opensea 交易所等;第三个红框是关注的人数,从人数上也可以对官方账号进行筛选,当然也需要警惕钓鱼大号,最好是进行信息交叉验证,保证自己访问的是官网。

2)假空投诱骗用户进行 NFT 授权

攻击者通常会通过 Discord 等社交账号发布假空投的钓鱼链接,这一类的钓鱼网站往往难以识别真假,本文提出以下几点建议希望帮助用户减少损失。

a. 资产隔离

在进行这类危险交易时,可以采用资产隔离的方式进行,通常包括以下几种类型:

钱包隔离:用户可以将钱包根据用途分为两类,第一类用于存储资产,包括一些大额资产等,该类资产可以使用冷钱包存储提高安全性;第二类用于资产交易,尤其是在进行诸如领取空投这样的危险交易时,可以使用一些临时钱包。临时性的钱包包括:使用 MetaMask 之类的钱包重新创建一个地址里面存储很少的钱;或一些网络钱包如:Burner Wallet 等,该钱包可以通过在网页上简单地设置转账的参数,如:转账地址、金额等,就可以生成一个临时性的小额交易二维码,如下图所示:

图片

交易媒介隔离:通常指的是用户在交易时使用的 PC、浏览器等,可以在进行一些可能存在的危险交易时使用不同的 PC,或者使用不同的浏览器。

b. 使用项目方智能合约进行 mint()

上文提到有很多骗局在推广免费空投领取时,“mint” 按钮实际上触发的是请求用户签名的操作,一旦点击将会批准钓鱼网站转移用户的 NFT。所以如果能够确定领取空投的合约地址,直接调用智能合约里的 mint() 方法是更安全的方式,下图是某 NFT 的合约:

图片

如上图所示,首先点击 “contract”,之后选择 “Write Contract” 页签,接下来需要点击 “Connect to Web3” 按钮,连接钱包。如下图所示:

图片

接着点击 mint() 方法,设置 mint 需要的 NFT 数量和金额,点击 “Write” 按钮即可。这种方式因为是直接调用的合约方法,所以不存在被钓鱼网站盗用签名的情况。但是,用户在调用 NFT 合约时需注意同样需要交叉验证项目合约的地址,避免被钓鱼合约诱导受骗。

c. 确认消息源

如果用户收到领取空投的钓鱼网站链接,首先需要确认信息源,一般可以在官方 twitter 等社交账号上确认下有没有发布的空投消息。如果没有的话,请不要随意点击其他渠道上发布的空投链接。

免责声明:作为区块链信息平台,本站所发布文章仅代表作者及嘉宾个人观点,与 Web3Caff 立场无关。本文内容仅用于信息分享,均不构成任何投资建议及要约,并请您遵守所在国家或地区的相关法律法规。