當硬核黑客開始研究“釣魚” 你的NFT還安全嗎?

前有周杰倫無聊猿NFT被釣魚攻擊,損失超300萬人民幣。

後有全球最大的NFT交易平台之一OpenSea大批用戶遭遇釣魚攻擊,多人資產受損。

可見Web3世界黑客依然猖狂作祟,為了打擊黑客囂張的氣焰,我們將為大家持續輸出乾貨系列文章,教導大家NFT防騙技巧。

本文研究了兩類典型的NFT的釣魚攻擊,一類是盜取用戶簽名的釣魚攻擊,如:Opensea釣魚郵件事件;一類是高仿域名和內容的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釣魚」

這一類的釣魚網站主要是對NFT項目官網的域名和內容等進行幾乎一致的模仿,一般會先連接用戶錢包查詢用戶餘額之後,再進行其他誘騙操作。這種釣魚網站是最常見的,主要分為以下幾種類型:

1 僅更換原官網的頂級域名

案例一

官網:https://invisiblefriends.io/

釣魚網站:https://invisiblefriends.ch/

查看釣魚網站的網頁源碼,可以發現如下攻擊地址:

查看

0xEcAcDb9FA4Ed4ACD8977821737da7bCe688be1e0的相關交易:

可以發現上述兩筆交易是攻擊者獲取到的收益。

案例二

官網:https://cyberbrokers.io/

釣魚網站:https://cyberbrokers.live/

查看釣魚網站源碼,發現如下攻擊地址:

2 主域名添加單詞或符號進行混淆

有的釣魚網站會在主域名添加單詞或符號進行混淆,比如othersidemeta-airdrop、otherside-refunds.xyz等。

官網:https://otherside.xyz/

釣魚網站:http://othersidemeta-airdrop.com/

查看釣魚網站源碼,發現頁面存在setApprovalForAll()函數,該函數會授權_operator具有所有代幣的控制權。如果用戶授權了攻擊者,則用戶賬號中所有的NFT將會被盜走。

3 添加二級域名進行混淆

有的釣魚網站會添加二級域名進行混淆,進行釣魚欺騙。

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

釣魚網站:https://okaybears.co.uk/‍

查看網頁源碼,根據solana web3的官方文檔API,確認如下地址為攻擊地址:

在如今釣魚事件頻發的情況下,用戶需提高安全意識,保護自己。以下是我們的安全建議:

1 簽名時應當明確簽署的交易內容,包括交易價格、交易地址等信息,如下圖紅框處內容所示:

如果存在簽署內容僅為二進製字符串內容等無法明確的內容,請勿簽署。

2 切勿點擊任何郵件中的鏈接、附件,或輸入任何個人信息。

3訪問NFT官網時,一般在官網右上角等處會顯示官方twitter、discord等社交帳號,需在官方賬號上確認官網地址。

4安裝釣魚插件,可輔助識別部分釣魚網站。比如下面這一款(複製鏈接谷歌瀏覽器直接安裝)

https://chrome.google.com/webstore/detail/beosin-alert/lgbhcpagiobjacpmcgckfgodjeogceji?hl=zh-CN

Total
0
Shares
Related Posts