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 鏈上交互,所以在受害人地址的鏈上記錄中看不到授權記錄,在攻擊者地址中可以看到。一般來說這種籤名是一次性的,不會重復或持續產生釣魚風險。
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 等)。
eth_sign 是一種開放式籤名方法,可以對任意哈希進行籤名,攻擊者只需構造出任意惡意需籤名數據(如:代幣轉帳,合約調用、獲取授權等)並誘導用戶通過 eth_sign 進行籤名即可完成攻擊。
MetaMask 在進行 eth_sign 籤名時會有風險提示,imToken、OneKey 等 Web3 錢包均已禁用此函數或提供風險提示,建議所有錢包廠商禁用此方法,防止用戶因缺乏安全意識或必要的技術積累被攻擊。
personal_sign、signTypedData 是常用的籤名方式,通常用戶需要仔細核對發起者、域名、籤名內容等是否安全,如果是有風險的,要格外警惕。
此外,如果像上面這種情況 personal_sign、signTypedData 被用成「盲籤」,用戶看不到明文,容易被釣魚團夥利用,也會增加釣魚風險。
攻擊者通過僞造惡意網站,或者在項目官網上掛馬,誘導用戶對 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
地址污染釣魚也是近期猖獗的釣魚手段之一,攻擊者監控鏈上交易,之後根據目標用戶歷史交易中的對手地址進行惡意地址僞造,通常前 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
目前,各錢包和安全插件已逐步實現對釣魚黑名單和常見釣魚方式的可視化風險提醒,對籤名信息也展示的愈發完整,提高了普通用戶識別釣魚攻擊的能力。但攻防技術總是在相互對抗又不斷發展的,更隱蔽的釣魚方式也在不斷出現,需要提高警惕。利用 CREATE2 繞過錢包和安全插件的黑名單檢測就是近期比較常見的方式。
Create2 是以太坊’Constantinople’升級時引入的操作碼,允許用戶在以太坊上創建智能合約。原來的 Create 操作碼是根據創建者的地址和 nonce 來生成新地址的,Create2 允許用戶在合約部署前計算地址。Create2 對以太坊開發者來說是一個非常強大的工具,可以實現先進和靈活的合約交互、基於參數的合約地址預計算、鏈下交易和特定分布式應用的靈活部署和適配。
Create2 在帶來好處的同時也帶來了新的安全風險。Create2 可以被濫用來生成沒有惡意交易歷史的新地址,繞過錢包的黑名單檢測和安全告警。當受害者籤署惡意交易時,攻擊者就可以在預先計算的地址上部署合約,並將受害者的資產轉帳到該地址,且這是一個不可逆的過程。
該攻擊特點:
(1) 允許預測性創建合約地址,使攻擊者能夠在部署合約之前欺騙用戶授予權限。
(2) 由於授權時合約尚未部署,因此攻擊地址是一個新地址,檢測工具無法基於歷史黑名單來進行預警,具有更高的隱蔽性。
以下是一個利用 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 的加密詐騙方案的分步描述:
(1) Inferno Drainer 通過名爲 Inferno Multichain Drainer 的 Telegram 頻道推廣他們的服務,有時攻擊者也通過 Inferno Drainer 的網站訪問該服務。
(2) 攻擊者通過 DaaS 服務功能,設置並生成屬於自己的釣魚網站,並通過 X(Twitter)、Discord 和其他社交媒體進行傳播。
(3) 受害者被誘導並掃描這些釣魚網站上包含的二維碼或其他方式來連接他們的錢包。
(4) Drainer 檢查受害者最有價值、最容易轉移的資產,並初始化惡意交易。
(5) 受害者確認了這筆交易。
(6) 資產被轉移給犯罪分子。 在被盜資產中,20% 轉移給 Inferno Drainer 開發商,80% 轉移給釣魚攻擊者。
下圖爲 DaaS 服務頁面,Inferno Drainer 向客戶顯示他們的統計數據:連接數量(受害者已將錢包連接到釣魚網站)、成功點擊(如果受害者已確認交易)以及被盜資產的價值。
DaaS 服務的每個客戶都可以自定義屬於自己的 Drainer 功能:
(1)首先,用戶一定不要點擊僞裝成獎勵、空投等利好消息的不明連結;
(2)官方社媒帳戶被盜事件也越來越多,官方發布的消息也可能是釣魚信息,官方消息也不等於絕對安全;
(3)在使用錢包、DApp 等應用時,一定要注意甄別,謹防僞造站點、僞造 App;
(4)任何需要確認的交易或籤名的消息都需要謹慎,盡量從目標、內容等信息上進行交叉確認。拒絕盲籤,保持警惕,懷疑一切,確保每一步操作都是明確和安全的。
(5)另外,用戶需要對本文提到的常見釣魚攻擊方式有所了解,要學會主動識別釣魚特徵。掌握常見籤名、授權函數及其風險,掌握 Interactive(交互網址)、Owner(授權方地址)、Spender(被授權方地址)、Value(授權數量)、Nonce(隨機數)、Deadline(過期時間)、transfer/transferFrom(轉帳)等字段內容。
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 鏈上交互,所以在受害人地址的鏈上記錄中看不到授權記錄,在攻擊者地址中可以看到。一般來說這種籤名是一次性的,不會重復或持續產生釣魚風險。
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 等)。
eth_sign 是一種開放式籤名方法,可以對任意哈希進行籤名,攻擊者只需構造出任意惡意需籤名數據(如:代幣轉帳,合約調用、獲取授權等)並誘導用戶通過 eth_sign 進行籤名即可完成攻擊。
MetaMask 在進行 eth_sign 籤名時會有風險提示,imToken、OneKey 等 Web3 錢包均已禁用此函數或提供風險提示,建議所有錢包廠商禁用此方法,防止用戶因缺乏安全意識或必要的技術積累被攻擊。
personal_sign、signTypedData 是常用的籤名方式,通常用戶需要仔細核對發起者、域名、籤名內容等是否安全,如果是有風險的,要格外警惕。
此外,如果像上面這種情況 personal_sign、signTypedData 被用成「盲籤」,用戶看不到明文,容易被釣魚團夥利用,也會增加釣魚風險。
攻擊者通過僞造惡意網站,或者在項目官網上掛馬,誘導用戶對 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
地址污染釣魚也是近期猖獗的釣魚手段之一,攻擊者監控鏈上交易,之後根據目標用戶歷史交易中的對手地址進行惡意地址僞造,通常前 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
目前,各錢包和安全插件已逐步實現對釣魚黑名單和常見釣魚方式的可視化風險提醒,對籤名信息也展示的愈發完整,提高了普通用戶識別釣魚攻擊的能力。但攻防技術總是在相互對抗又不斷發展的,更隱蔽的釣魚方式也在不斷出現,需要提高警惕。利用 CREATE2 繞過錢包和安全插件的黑名單檢測就是近期比較常見的方式。
Create2 是以太坊’Constantinople’升級時引入的操作碼,允許用戶在以太坊上創建智能合約。原來的 Create 操作碼是根據創建者的地址和 nonce 來生成新地址的,Create2 允許用戶在合約部署前計算地址。Create2 對以太坊開發者來說是一個非常強大的工具,可以實現先進和靈活的合約交互、基於參數的合約地址預計算、鏈下交易和特定分布式應用的靈活部署和適配。
Create2 在帶來好處的同時也帶來了新的安全風險。Create2 可以被濫用來生成沒有惡意交易歷史的新地址,繞過錢包的黑名單檢測和安全告警。當受害者籤署惡意交易時,攻擊者就可以在預先計算的地址上部署合約,並將受害者的資產轉帳到該地址,且這是一個不可逆的過程。
該攻擊特點:
(1) 允許預測性創建合約地址,使攻擊者能夠在部署合約之前欺騙用戶授予權限。
(2) 由於授權時合約尚未部署,因此攻擊地址是一個新地址,檢測工具無法基於歷史黑名單來進行預警,具有更高的隱蔽性。
以下是一個利用 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 的加密詐騙方案的分步描述:
(1) Inferno Drainer 通過名爲 Inferno Multichain Drainer 的 Telegram 頻道推廣他們的服務,有時攻擊者也通過 Inferno Drainer 的網站訪問該服務。
(2) 攻擊者通過 DaaS 服務功能,設置並生成屬於自己的釣魚網站,並通過 X(Twitter)、Discord 和其他社交媒體進行傳播。
(3) 受害者被誘導並掃描這些釣魚網站上包含的二維碼或其他方式來連接他們的錢包。
(4) Drainer 檢查受害者最有價值、最容易轉移的資產,並初始化惡意交易。
(5) 受害者確認了這筆交易。
(6) 資產被轉移給犯罪分子。 在被盜資產中,20% 轉移給 Inferno Drainer 開發商,80% 轉移給釣魚攻擊者。
下圖爲 DaaS 服務頁面,Inferno Drainer 向客戶顯示他們的統計數據:連接數量(受害者已將錢包連接到釣魚網站)、成功點擊(如果受害者已確認交易)以及被盜資產的價值。
DaaS 服務的每個客戶都可以自定義屬於自己的 Drainer 功能:
(1)首先,用戶一定不要點擊僞裝成獎勵、空投等利好消息的不明連結;
(2)官方社媒帳戶被盜事件也越來越多,官方發布的消息也可能是釣魚信息,官方消息也不等於絕對安全;
(3)在使用錢包、DApp 等應用時,一定要注意甄別,謹防僞造站點、僞造 App;
(4)任何需要確認的交易或籤名的消息都需要謹慎,盡量從目標、內容等信息上進行交叉確認。拒絕盲籤,保持警惕,懷疑一切,確保每一步操作都是明確和安全的。
(5)另外,用戶需要對本文提到的常見釣魚攻擊方式有所了解,要學會主動識別釣魚特徵。掌握常見籤名、授權函數及其風險,掌握 Interactive(交互網址)、Owner(授權方地址)、Spender(被授權方地址)、Value(授權數量)、Nonce(隨機數)、Deadline(過期時間)、transfer/transferFrom(轉帳)等字段內容。