近年來,Web3 釣魚事件不斷出現,且發展出釣魚即服務的黑色產業鏈(Drainer as a Service, DaaS), 安全形勢嚴峻。
作者:SharkTeam
Web3 釣魚是一種針對 Web3 用戶的常見攻擊手段,透過各種方式竊取用戶的授權、簽名,或誘導用戶進行誤操作,目的是竊取用戶錢包中的加密資產。
近年來,Web3 釣魚事件不斷出現,且發展出釣魚即服務的黑色產業鏈(Drainer as a Service, DaaS), 安全形勢嚴峻。
本文中,SharkTeam 將對常見的 Web3 釣魚方式進行系統分析並給予安全防範建議,供大家參考,希望能幫助使用者更好的識別釣魚騙局,保護自身的加密資產安全。
一、 常見釣魚手法分析
1.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 函數,完成授權。
(3)攻擊者呼叫 transferFrom 函數,將受害者資產轉出,完成攻擊。
這裡先說明 transfer 和 transferFrom 的區別,當我們直接進行 ERC20 轉帳的時候,通常是呼叫 ERC20 合約中的 transfer 函數,而 transferFrom 通常是在授權第三方將我們錢包內的 ERC20 轉移給其他位址時使用。
補充說明:這種簽名是一個無 Gas 的鏈下簽名,攻擊者拿到後會執行 permit 和 transferFrom 鏈上交互,所以在受害人地址的鏈上記錄中看不到授權記錄,在攻擊者地址中可以看到。一般來說這種簽名是一次性的,不會重複或持續產生釣魚風險。
2.Permit 2鏈下簽名釣魚
Permit2 是 Uniswap 為了方便用戶使用,在 2022 年底推出的一個智能合約,它是一個代幣審批合約,允許代幣授權在不同的 DApp 中共享和管理,未來隨著越來越多的項目與 Permit2 集成,Permit2 合約可以在 DApp 生態系統中實現更統一的授權管理體驗,並且節省使用者交易成本。
Permit2 出現之前,在 Uniswap 上進行代幣兌換需要先授權(Approve)再兌換(Swap),需要操作兩次,也需要花費兩筆交易的 Gas 費。在 Permit2 推出後,用戶一次把額度全部授權給 Uniswap 的 Permit2 合約,之後的每次兌換只需要進行鏈下簽名即可。
Permit2 雖然提高了用戶的體驗,但隨之而來是針對 Permit2 簽名的釣魚攻擊。和 Permit 鏈下簽章釣魚類似,Permit2 也是鏈下簽章釣魚,此種攻擊主要分為四步驟:
(1)前提條件是用戶的錢包在被釣魚之前已使用過 Uniswap 並將代幣額度授權給了 Uniswap 的 Permit2 合約(Permit2 預設會讓用戶授權該代幣的全部餘額的額度)。
(2)攻擊者偽造釣魚連結或釣魚頁面,誘導用戶進行簽名,釣魚攻擊者獲取所需的簽名信息,和 Permit 鏈下簽名釣魚類似。
(3)攻擊者呼叫 Permit2 合約的 permit 函數,完成授權。
(4)攻擊者呼叫 Permit2 合約的 transferFrom 函數,將受害者資產轉出,完成攻擊。
補充說明:這裡攻擊者接收資產的地址通常有多個,通常其中一個金額最大的接收者是實施釣魚的攻擊者,另外的則是提供釣魚即服務的黑產地址(釣魚即服務 DaaS 的供應商地址,例如 PinkDrainer、InfernoDrainer、AngelDrainer 等)。
3、eth_sign 鏈上盲簽釣魚
eth_sign 是一種開放式簽名方法,可以對任意哈希進行簽名,攻擊者只需構造出任意惡意需簽名資料(如:代幣轉賬,合約調用、獲取授權等)並誘導用戶透過 eth_sign 進行簽名即可完成攻擊。
MetaMask 在進行 eth_sign 簽章時會有風險提示,imToken、OneKey 等 Web3 錢包都已停用此函數或提供風險提示,建議所有錢包廠商停用此方法,防止使用者因缺乏安全意識或必要的技術累積而被攻擊。
4. personal_sign/signTypedData 鏈上簽名釣魚
personal_sign、signTypedData 是常用的簽章方式,通常使用者需要仔細檢查發起者、網域、簽章內容等是否安全,如果是有風險的,要格外警惕。
此外,如果像上面這種情況 personal_sign、signTypedData 被用成 “盲簽”,用戶看不到明文,容易被釣魚團夥利用,也會增加釣魚風險。
5. 授權釣魚
攻擊者透過偽造惡意網站,或在專案官網上掛馬,誘導使用者對 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
6. 地址污染釣魚
地址污染釣魚也是近期猖獗的釣魚手段之一,攻擊者監控鏈上交易,之後根據目標用戶歷史交易中的對手地址進行惡意地址偽造,通常前 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
7.更隱密的釣魚,利用 CREATE2 繞過安全偵測
目前,各錢包和安全插件已逐步實現對釣魚黑名單和常見釣魚方式的可視化風險提醒,對簽名資訊也展示的愈發完整,提高了普通用戶識別釣魚攻擊的能力。但攻防技術總是在相互對抗又不斷發展的,更隱密的釣魚方式也不斷出現,需要提高警覺。利用 CREATE2 繞過錢包和安全插件的黑名單偵測就是近期比較常見的方式。
Create2 是以太坊'Constantinople'升級時引入的操作碼,允許使用者在以太坊上創建智慧合約。原來的 Create 操作碼是根據創建者的位址和 nonce 來產生新位址的,Create2 允許使用者在合約部署前計算位址。 Create2 對以太坊開發者來說是一個非常強大的工具,可以實現先進和靈活的合約互動、基於參數的合約地址預計算、鏈下交易和特定分散式應用的靈活部署和適配。
Create2 在帶來好處的同時也帶來了新的安全風險。 Create2 可以被濫用來產生沒有惡意交易歷史的新位址,繞過錢包的黑名單偵測和安全警報。當受害者簽署惡意交易時,攻擊者就可以在預先計算的地址上部署合約,並將受害者的資產轉移到該地址,且這是一個不可逆的過程。
此攻擊特點:
- 允許預測性建立合約位址,使攻擊者能夠在部署合約之前欺騙使用者授予權限。
- 由於授權時合約尚未部署,因此攻擊地址是新地址,檢測工具無法基於歷史黑名單來進行預警,具有更高的隱藏性。
以下是利用 CREATE2 進行釣魚的範例:
https://etherscan.io/tx/0x83f6bfde97f2fe60d2a4a1f55f9c4ea476c9d87fa0fcd0c1c3592ad6a539ed14
在這筆交易中,受害者把地址中的 sfrxETH 轉給了惡意地址(0x4D9f77),該地址是一個新的合約地址,沒有任何交易記錄。
但是打開這個合約的創建交易可以發現,該合約在創建的同時完成了釣魚攻擊,將資產從受害者地址轉出。
https://etherscan.io/tx/0x77c79f9c865c64f76dc7f9dff978a0b8081dce72cab7c256ac52a764376f8e52
查看該交易的執行情況,可以看到 0x4d9f7773deb9cc44b34066f5e36a5ec98ac92d40 是在呼叫 CREATE2 之後建立的。
另外,透過分析 PinkDrainer 的相關地址可以發現,該地址每天都在透過 CREATE2 創建新的合約地址進行釣魚。
https://etherscan.io/address/0x5d775caa7a0a56cd2d56a480b0f92e3900fe9722#internaltx
二、釣魚即服務
釣魚攻擊日益猖獗,也因不法獲利頗豐,已逐步發展出以釣魚即服務(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 的加密詐騙方案的分步描述:
- Inferno Drainer 透過名為 Inferno Multichain Drainer 的 Telegram 頻道來推廣他們的服務,有時攻擊者也透過 Inferno Drainer 的網站存取該服務。
- 攻擊者透過 DaaS 服務功能,設定並產生屬於自己的釣魚網站,並透過 X(Twitter)、Discord 和其他社群媒體進行傳播。
- 受害者被誘導並掃描這些釣魚網站上包含的二維碼或其他方式來連接他們的錢包。
- Drainer 檢查受害者最有價值、最容易轉移的資產,並初始化惡意交易。
- 受害者確認了這筆交易。
- 資產轉移給犯罪分子。 在被盜資產中,20% 轉移給 Inferno Drainer 開發商,80% 轉移給釣魚攻擊者。
下圖為 DaaS 服務頁面,Inferno Drainer 向客戶顯示他們的統計數據:連線數量(受害者已將錢包連接到釣魚網站)、成功點擊(如果受害者已確認交易)以及被盜資產的價值。
DaaS 服務的每個客戶都可以自訂屬於自己的 Drainer 功能:
三、安全建議
(1)首先,用戶一定不要點擊偽裝成獎勵、空投等利好消息的不明連結;
(2)官方社媒帳號被盜事件也越來越多,官方發布的消息也可能是釣魚訊息,官方消息也不等於絕對安全;
(3)使用錢包、DApp 等應用程式時,一定要注意甄別,謹防偽造網站、偽造 App;
(4)任何需要確認的交易或簽名的訊息都需要謹慎,盡量從目標、內容等資訊上進行交叉確認。拒絕盲簽,保持警惕,懷疑一切,確保每一步操作都是明確和安全的。
(5)另外,使用者需要對本文提到的常見釣魚攻擊方式有所了解,並且要學會主動辨識釣魚特徵。掌握常見簽章、授權函數及其風險,掌握 Interactive(互動網址)、Owner(授權方位址)、Spender(被授權方位址)、Value(授權數)、Nonce(隨機數)、Deadline(過期時間)、 transfer/transferFrom(轉帳)等欄位內容。
參考文獻
https://x.com/evilcos/status/1661224434651529218
https://x.com/RevokeCash/status/1648694185942450177
https://www.group-ib.com/blog/inferno-drainer/
https://blocksec.com/blog/how-phishing-websites-bypass-wallet-security-alerts-strategies-unveiled
免責聲明:作為區塊鏈資訊平台,本站所發布文章僅代表作者及來賓個人觀點,與 Web3Caff 立場無關。文章內的資訊僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。