我們發現了一種正變得流行的新型釣魚手法。攻擊者不再部署釣魚合約(安全廠商可以標記這些合約),而是濫用一些合約來執行攻擊。
在這篇部落格中,我們將向您展示詐騙者的手段,並提供如何避免被釣魚的建議。
概覽
通常,詐騙者會部署釣魚合約以從受害者手中竊取代幣。具體來說,他們的釣魚合約包含可疑的 payable 和 multi-call 函數。造訪釣魚網站的用戶會向這些合約發送 ETH 或授權代幣。然而,安全廠商和錢包可以檢測並標記這些釣魚合約,從而封鎖指向它們的交易。
然而,我們發現詐騙者正在濫用由知名 Web3 項目所部署的合法合約來進行釣魚。這些合法合約無法被標記為釣魚並被封鎖。我們將其稱為 Web3 釣魚網站中的「ROP」,因為他們「並沒有」部署新的合約,而是重複使用現有且合法的合約來進行釣魚。這與傳統軟體安全領域中的 ROP 攻擊(或程式碼重用攻擊)類似。
具體而言,返回導向編程 (ROP) 是一種電腦安全漏洞利用技術,允許攻擊者利用現有函式庫中的程式碼片段。在 Web3 釣魚中,「ROP」是指利用合法項目部署的合約進行欺詐目的。此現象最初由 Twitter 帳號 @MevRefund 在一則貼文中披露。
傳統 Web3 釣魚合約如何運作
在 Web3 釣魚的早期階段,詐騙者會設定一個外部擁有帳戶 (EOA) 並誘騙用戶將 ETH 轉入該帳戶,或授權其他代幣給該帳戶。然而,這種行為現在很容易被錢包檢測到,並被用戶發現。因此,詐騙者轉向部署釣魚合約。對於 ETH 釣魚,詐騙者通常使用具有可疑名稱(如「Claim」或「Security Update」)的 payable 函數。這些誘人的函數名稱會促使用戶簽署釣魚交易並轉移 ETH。
對於 ERC20 和 ERC721 代幣釣魚,詐騙者會誘騙用戶將他們的代幣授權給釣魚合約。隨後,會調用釣魚合約中的 Multicall 函數來轉移用戶的代幣。特別地,Multicall 函數旨在在單次調用中執行多個特定的內部交易。不同的釣魚方案,例如 NFT 零元購、ERC20 授權釣魚或 ERC20 Permit 釣魚,會使用不同的釣魚交易。這使他們能夠配置交易參數,並利用 Multicall 根據相應的釣魚方案發起特定的釣魚交易。
現在,許多熱門的 Web3 錢包已經建立了釣魚帳戶黑名單。他們主動通知用戶並防止指向這些欺詐帳戶的交易。
Web3 釣魚中的「ROP」
為了繞過釣魚帳戶黑名單機制,詐騙者轉向了一些無法放入黑名單的帳戶。具體來說,他們濫用由合法項目部署的 Multicall 合約,利用這些合約執行複雜交易的功能。鑑於這些合法合約無法被標記為釣魚帳戶,詐騙者會提示用戶將代幣授權給這些合約。由於這些合法合約可以被任何人調用(無訪問控制),詐騙者可以立即濫用它們來轉移用戶的代幣。下圖顯示了整個過程。

例如,知名釣魚犯罪集團 Angel Drainer 就曾利用 Uniswap V3: Multicall 2 發起了 89 次釣魚交易。請注意,合法的 multicall 合約設計上本就不持有任何資產,因此被任何人調用在設計上是正常的。然而,詐騙者濫用了該合約,在沒有部署自身釣魚合約的情況下執行了釣魚攻擊。
建議
我們鼓勵用戶保持警惕,在進行任何操作(尤其是授權交易)前仔細檢查交易詳情。請務必檢查您的授權狀況,並撤銷任何可疑的授權。


