用戶在與DApp 交互時需注意控制授權的Token 數量,檢查簽名內容及異常授權情況。
By:Lisa
背景
5 月11 日,推特用戶”pineapple.eth” 發推表示自己因誤點釣魚網站(syncswap[.]network)致錢包被盜,損失超100 美元。
(https://twitter.com/0xBigPineapple/status/1656420711919960065)
雖然損失數額不算大,但這裡面藏著巨大的安全風險,受害者往往會因為“看不見” 這“不起眼” 的簽名風險損失巨大資產。這也是我們寫這篇文章的原因。
根據受害者的描述,被盜交易如下:
(https://etherscan.io/tx/0xc65093b52fcf395f23fb7195a6fd5758b9a3eb1ccd0e3572754690d3a2a2c27c)
(https://etherscan.io/tx/0xf4a288d6a5400d0fcfd06f052804ae7d40c05f623401bc003c162d67a08a22cb)
從這兩筆交易來看,合約調用者(0x00002…d0000)通過調用TransferFrom 函數,將受害者地址(0xA4089…82C3)上的34.87 USDC 轉移到(0x8256…D6B8),將81.36 USDC 轉移到(0x5A69…1C17)。如果光看transferFrom 函數,不難發現這個函數的作用是:允許第三方發起一筆交易,將相關數字資產從所有者賬戶轉移到接收者賬戶。
接著分析合約調用者地址(0x00002…d0000),發現多了一筆permit 操作,而這在受害者的交易記錄中是沒有的。那permit 有什麼作用呢?
(https://etherscan.io/tx/0x7c06a33bd6bb913fb64e56e8a1381e1957d85cae78ca3305bdfa9561fc7bc611)
Permit 是什麼?
據官方介紹,permit 在EIP-2612 被引入到ERC20 的協議中,用戶不用事先授權,就能通過附加一個授權簽名(permit)與應用合約交互。具體來說,我們都知道在ERC20 幣種的交易中,A 可以調用approve 函數來對B 進行授權,即將A 指定的代幣授權給另一個賬戶操作,並且必須是這個賬戶的owner 才可以調用approve 函數。而permit 函數的作用是,A 提前在鏈下對授權對象進行簽名,得到的簽名告知給B,B 就可以拿著這個簽名去調用permit 來實現A 的授權操作(獲得allowance 使用transferFrom 來進行轉賬),A 在不發送交易的情況下就能對指定代幣進行轉賬,並且無論是不是這個賬戶的owner 都可以執行permit 進行授權操作。另外,Uniswap 已發布了新的Token 授權標準Permit2。
以下是approve 和permit 的對比:
了解了基礎知識,再回到釣魚事件本身,可以發下此permit 函數有7 個參數:
owner:被授權的地址
spender:授權給誰
value:授權給定的代幣的數量
deadline:是一個時間戳,僅在給定的時間之前有效
v, r, s:簽名數據
其中deadline 為1714509304969,value 為116239404,也就是說授權在56300 年8 月22 日0 點42 分(GMT)前都有效,幾乎是無限期了。且這筆授權的代幣數量為116.239404 USDC,與受害者被盜的數額相同。 v, r, s 值即為用戶(owner)在釣魚網站進行簽名後的簽名數據,permit 函數會驗證簽名數據的有效性。簽名驗證通過後就會將用戶的代幣授權給黑客(spender)。
整個過程很清晰了:受害者簽名後傳給了釣魚網站但不上鍊,黑客拿到這個簽名信息後上鍊提交permit,也就是調用了approve 進行了授權。簽名是在鏈下進行的,無需花費任何gas。不過需要明確的是,這裡的無gas 不是沒有gas 消耗,而是簽名方(受害者)不需要為授權和轉賬來支付gas。
毫無疑問,與approve 授權釣魚類似,permit 比approve 授權釣魚更加危險,畢竟只要竊取到了簽名就獲得了授權。例如dex 裡的掛單功能,只需要用戶對某個消息進行簽名,用戶就可以在不支付gas 的情況下將資產委託給dex 處理,但如果這個dex 是個釣魚網站,偽造了惡意消息讓用戶簽名,用戶的資產就有可能丟失。據我們了解,一些錢包會對approve 授權釣魚的簽名信息進行解碼展示,但錢包對permit 簽名釣魚的警告幾乎沒有,用戶遭受攻擊的風險更高。同時,permit 簽名作為鏈下行為,用戶也很難注意到自己的簽名是否已經洩露。
MistTrack
目前黑客地址已經被MistTrack 標記為惡意釣魚地址。
地址1:0x00002644e79602F056B03235106A9963826d0000
地址2:0x82563Ba592986Cb277d67B2E7c56ab3BB3FDD6B8
地址3:0x5A697967F0791d12db8A0f92344Abc6DD07a1C17
受害者的兩筆USDC 均被換成ETH。
使用MistTrack 對ETH, WBTC, USDT, USDC, SHIB, DAI, WETH, DAI, stETH, APE 幣種進行分析,目前地址1 獲利約12 萬美元,地址2 獲利約20 萬美元,地址3 獲利約2,000 美元。此外,據Web3 反詐騙平台Scam Sniffer 的分析,截止5 月9 日,一共有300 多名受害者被基於Permit2 的惡意簽名盜取了約69 萬美金的資產,從Uniswap 推出Permit2 到5 月9 日為止,以太坊主網上已經有近67 萬個地址授權過Permit2 了。當然,這個數據針對這個團伙的全貌來說只是冰山一角,本文重點不在此,故不再深究。
總結
本文主要以一個實際被盜案例入手,介紹了permit 簽名的風險。慢霧安全團隊提醒請勿隨意打開來歷不明的網站進行操作,在與DApp 交互時注意控制授權給合約的Token 數量並認真檢查簽名內容,不定期使用授權工具如RevokeCash(https://revoke.cash)查看是否有異常授權,也可以使用針對Uniswap Permit2 的授權管理工具(https://app.scamsniffer.io/permit2)進行查看,若有異常授權,請及時取消授權。更多的安全知識建議閱讀慢霧出品的《區塊鏈黑暗森林自救手冊》:https://github.com/slowmist/Blockchain-dark-forest-selfguard-handbook/blob/main/README_CN.md
參考鏈接:
https://eips.ethereum.org/EIPS/eip-2612
展開全文打開碳鏈價值APP 查看更多精彩資訊