黑暗森林遍布危機,如何保護自己的 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 立場無關。本文內容僅用於信息分享,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。