Web3籤名釣魚底層邏輯

中級4/29/2024, 2:01:48 AM
授權釣魚是黑客利用籤名功能偷取用戶資產的手段,常見的方式有Permit和Permit2籤名釣魚。用戶應提高安全意識,分離大額資金和鏈上錢包,並學會識別籤名格式以防範釣魚。Permit2是Uniswap推出的功能,易被釣魚網站利用。

轉發原文標題《大白話講解Web3籤名釣魚底層邏輯“授權釣魚、Permit與Permit2的區別”》

TL;DR

明明只是籤了個名,我的錢怎麼沒了呢??“籤名釣魚”目前正成爲了Web3的黑客們最喜歡的釣魚方式,最近看餘弦大佬和各大錢包和安全公司都在不斷宣傳科普釣魚籤名的知識,但是每天還是有好多人被釣魚。

菠菜認爲其中一個原因就是大部分人對錢包交互的底層邏輯並不了解,並且對於不懂技術的人來說學習門檻過高,所以菠菜決定出一個圖解版科普籤名釣魚的底層邏輯,並且嘗試用最大白話的形式讓不懂技術的人也能看明白。

首先我們要知道我們使用錢包一共只有兩種操作:“籤名”和“交互”。最簡單直接的理解就是:籤名是發生在區塊鏈之外的(鏈下),不需要花Gas費的;交互是發生在區塊鏈上面的(鏈上),是需要花Gas費的。

一般籤名的使用場景是爲了驗證你是你,比如登入錢包,就像你如果要去Uniswap換Token的話,你需要先連結你的錢包,那麼這個時候你就需要籤一個名告訴網站“我是這個錢包的擁有者”,然後你就可以使用Uniswap了,這個步驟對區塊鏈不會有任何數據或者狀態上的變化,所以不需要花錢。

而交互的話就是當你要真正在Uniswap上換Token的時候,你需要先花一筆錢告訴Uniswap的智能合約:“我要用100USDT換一個菠菜幣,我批準你可以挪動我的100USDT”,這個步驟就叫做授權(approve),然後你還要再花一筆錢告訴Uniswap的智能合約:“我現在要用100USDT換一個菠菜幣了,你現在可以進行操作了”,然後你就完成了用100USDT換一個菠菜幣的操作。

簡單理解籤名和交互的區別之後,我們就來介紹一下釣魚的原理,菠菜會列舉三個不同的方式:授權釣魚、Permit籤名釣魚和Permit2籤名釣魚,這三個是非常常見的釣魚方式。

咱們先講授權釣魚,這是以前Web3最經典的釣魚手法之一,顧名思義就是利用授權(approve)這個機制,之前Uniswap的例子告訴我們,授權就是告訴智能合約“我批準你挪動我多少xxx的Token”,那麼黑客就可以做一個假的釣魚網站,有着精美的前端僞裝成一個NFT項目,網站中間是一個漂亮的大按鈕“領取你的空投”,實際上你點了之後錢包彈出來的界面實際上是讓你授權你的Token給黑客的地址,那麼這時候如果你點了確認,那麼就恭喜黑客成功完成一個KPI了。

但是授權釣魚有一個問題:因爲要花Gas費,現在很多人在涉及到花錢的操作上會有所警惕,在陌生網站點擊之後稍微一看就會發現不對勁,還是比較好防範的。

那麼接下來就來到了今天的主角:Permit和Permit2籤名釣魚啦,是Web3資產安全領域的重災區,爲什麼這麼難防呢?因爲每次你要使用一個Dapp之前一定要籤名登入你的錢包,在許多人腦子裏可能已經形成了一種慣性思維:”這個操作是安全的”,再加上不需要花錢和大多數人不知道每個籤名背後意味着什麼。

我們先來看Permit機制,Permit是針對ERC-20標準下授權的一個擴展功能,像我們平常用的USDT就是ERC-20,簡單來說就是你可以籤名批準其他人來挪動你的Token,我們知道授權(Approve)是你花錢告訴智能合約:“你可以挪動我xxx數量的Token”,那麼Permit就是你在一張“條子”上籤了個名給某一個人,這個紙上寫着:“我允許某某某可以挪動我xxx數量的Token”,然後這個人拿着這個“條子”給智能合約並花一筆Gas費告訴智能合約:“他允許我挪動他xxx數量的Token”,然後你的錢就可以被其他人挪走了,在這個過程中你只是籤了一個名,而背後卻意味着你允許其他人去調用授權(Approve)並轉走你的Token,黑客可以做一個釣魚網站,把登入錢包的按鈕替換成Permit釣魚,那麼就可以輕輕鬆松把你的資產釣走啦。

那麼Permit2又是什麼呢?Permit2其實並不是ERC-20的一個功能,而是Uniswap爲了方便用戶推出的一個功能,之前的例子講了你要在Uniswap上用USDT換菠菜幣你需要先授權(Approve)一次,然後再進行兌換,這需要花兩筆Gas費,所以Uniswap就想了個辦法:“你一次性把額度全部授權給我好了,每次兌換你籤個名我就給你處理了”,這個功能幫助Uniswap用戶使用的時候只需要支付一次Gas費即可,並且這個步驟是籤名,所以Gas費其實不是你付的,而是Permit2合約代付了,但是會從你最終兌換的Token裏扣除掉。

但是中Permit2釣魚的條件是你曾經使用過Uniswap,並且你還授權了無限額度給Permit2智能合約,由於目前Uniswap默認的操作就是無限額度授權,所以其實滿足該條件的用戶數量還是蠻大的,同樣黑客只要騙你把名籤了就可以把你的Token轉走(僅限給過授權的)。

總結一下,授權釣魚的本質是你花一筆錢告訴智能合約:“我批準你挪用我的Token給黑客”,籤名釣魚的本質是你籤了一張允許別人去挪動你資產的“條子”給到黑客,黑客花錢告訴智能合約:“我要挪用他的Token轉給我”。Permit和Permit2是目前釣魚籤名的重災區,Permit是ERC-20的一個授權擴展功能,Permit2是Uniswap推出的一個新功能。

那麼理解了原理,怎麼防範呢?

1.首先最最重要的就是培養你的安全意識,每一次錢包的操作都要去檢查一下你在做的操作到底是什麼?

2.大資金和玩鏈上的錢包分離,一旦被釣魚了可以把損失降到最低

3.學會識別Permit和Permit2的籤名格式,只要你看到以下籤名格式,那你就要警惕起來了:

Interactive:交互網址

Owner:授權方地址

Spender:被授權方地址

Value:授權數量

Nonce:隨機數

Deadline:過期時間

聲明:

  1. 本文轉載自[ 菠菜菠菜談Web3],原文標題《大白話講解Web3籤名釣魚底層邏輯“授權釣魚、Permit與Permit2的區別”》,著作權歸屬原作者[ 菠菜菠菜談Web3],如對轉載有異議,請聯系Gate Learn團隊,團隊會根據相關流程盡速處理。
  2. 免責聲明:本文所表達的觀點和意見僅代表作者個人觀點,不構成任何投資建議。
  3. 文章其他語言版本由Gate Learn團隊翻譯, 在未提及Gate.io的情況下不得復制、傳播或抄襲經翻譯文章。

分享

目錄

Web3籤名釣魚底層邏輯

中級4/29/2024, 2:01:48 AM
授權釣魚是黑客利用籤名功能偷取用戶資產的手段,常見的方式有Permit和Permit2籤名釣魚。用戶應提高安全意識,分離大額資金和鏈上錢包,並學會識別籤名格式以防範釣魚。Permit2是Uniswap推出的功能,易被釣魚網站利用。

轉發原文標題《大白話講解Web3籤名釣魚底層邏輯“授權釣魚、Permit與Permit2的區別”》

TL;DR

明明只是籤了個名,我的錢怎麼沒了呢??“籤名釣魚”目前正成爲了Web3的黑客們最喜歡的釣魚方式,最近看餘弦大佬和各大錢包和安全公司都在不斷宣傳科普釣魚籤名的知識,但是每天還是有好多人被釣魚。

菠菜認爲其中一個原因就是大部分人對錢包交互的底層邏輯並不了解,並且對於不懂技術的人來說學習門檻過高,所以菠菜決定出一個圖解版科普籤名釣魚的底層邏輯,並且嘗試用最大白話的形式讓不懂技術的人也能看明白。

首先我們要知道我們使用錢包一共只有兩種操作:“籤名”和“交互”。最簡單直接的理解就是:籤名是發生在區塊鏈之外的(鏈下),不需要花Gas費的;交互是發生在區塊鏈上面的(鏈上),是需要花Gas費的。

一般籤名的使用場景是爲了驗證你是你,比如登入錢包,就像你如果要去Uniswap換Token的話,你需要先連結你的錢包,那麼這個時候你就需要籤一個名告訴網站“我是這個錢包的擁有者”,然後你就可以使用Uniswap了,這個步驟對區塊鏈不會有任何數據或者狀態上的變化,所以不需要花錢。

而交互的話就是當你要真正在Uniswap上換Token的時候,你需要先花一筆錢告訴Uniswap的智能合約:“我要用100USDT換一個菠菜幣,我批準你可以挪動我的100USDT”,這個步驟就叫做授權(approve),然後你還要再花一筆錢告訴Uniswap的智能合約:“我現在要用100USDT換一個菠菜幣了,你現在可以進行操作了”,然後你就完成了用100USDT換一個菠菜幣的操作。

簡單理解籤名和交互的區別之後,我們就來介紹一下釣魚的原理,菠菜會列舉三個不同的方式:授權釣魚、Permit籤名釣魚和Permit2籤名釣魚,這三個是非常常見的釣魚方式。

咱們先講授權釣魚,這是以前Web3最經典的釣魚手法之一,顧名思義就是利用授權(approve)這個機制,之前Uniswap的例子告訴我們,授權就是告訴智能合約“我批準你挪動我多少xxx的Token”,那麼黑客就可以做一個假的釣魚網站,有着精美的前端僞裝成一個NFT項目,網站中間是一個漂亮的大按鈕“領取你的空投”,實際上你點了之後錢包彈出來的界面實際上是讓你授權你的Token給黑客的地址,那麼這時候如果你點了確認,那麼就恭喜黑客成功完成一個KPI了。

但是授權釣魚有一個問題:因爲要花Gas費,現在很多人在涉及到花錢的操作上會有所警惕,在陌生網站點擊之後稍微一看就會發現不對勁,還是比較好防範的。

那麼接下來就來到了今天的主角:Permit和Permit2籤名釣魚啦,是Web3資產安全領域的重災區,爲什麼這麼難防呢?因爲每次你要使用一個Dapp之前一定要籤名登入你的錢包,在許多人腦子裏可能已經形成了一種慣性思維:”這個操作是安全的”,再加上不需要花錢和大多數人不知道每個籤名背後意味着什麼。

我們先來看Permit機制,Permit是針對ERC-20標準下授權的一個擴展功能,像我們平常用的USDT就是ERC-20,簡單來說就是你可以籤名批準其他人來挪動你的Token,我們知道授權(Approve)是你花錢告訴智能合約:“你可以挪動我xxx數量的Token”,那麼Permit就是你在一張“條子”上籤了個名給某一個人,這個紙上寫着:“我允許某某某可以挪動我xxx數量的Token”,然後這個人拿着這個“條子”給智能合約並花一筆Gas費告訴智能合約:“他允許我挪動他xxx數量的Token”,然後你的錢就可以被其他人挪走了,在這個過程中你只是籤了一個名,而背後卻意味着你允許其他人去調用授權(Approve)並轉走你的Token,黑客可以做一個釣魚網站,把登入錢包的按鈕替換成Permit釣魚,那麼就可以輕輕鬆松把你的資產釣走啦。

那麼Permit2又是什麼呢?Permit2其實並不是ERC-20的一個功能,而是Uniswap爲了方便用戶推出的一個功能,之前的例子講了你要在Uniswap上用USDT換菠菜幣你需要先授權(Approve)一次,然後再進行兌換,這需要花兩筆Gas費,所以Uniswap就想了個辦法:“你一次性把額度全部授權給我好了,每次兌換你籤個名我就給你處理了”,這個功能幫助Uniswap用戶使用的時候只需要支付一次Gas費即可,並且這個步驟是籤名,所以Gas費其實不是你付的,而是Permit2合約代付了,但是會從你最終兌換的Token裏扣除掉。

但是中Permit2釣魚的條件是你曾經使用過Uniswap,並且你還授權了無限額度給Permit2智能合約,由於目前Uniswap默認的操作就是無限額度授權,所以其實滿足該條件的用戶數量還是蠻大的,同樣黑客只要騙你把名籤了就可以把你的Token轉走(僅限給過授權的)。

總結一下,授權釣魚的本質是你花一筆錢告訴智能合約:“我批準你挪用我的Token給黑客”,籤名釣魚的本質是你籤了一張允許別人去挪動你資產的“條子”給到黑客,黑客花錢告訴智能合約:“我要挪用他的Token轉給我”。Permit和Permit2是目前釣魚籤名的重災區,Permit是ERC-20的一個授權擴展功能,Permit2是Uniswap推出的一個新功能。

那麼理解了原理,怎麼防範呢?

1.首先最最重要的就是培養你的安全意識,每一次錢包的操作都要去檢查一下你在做的操作到底是什麼?

2.大資金和玩鏈上的錢包分離,一旦被釣魚了可以把損失降到最低

3.學會識別Permit和Permit2的籤名格式,只要你看到以下籤名格式,那你就要警惕起來了:

Interactive:交互網址

Owner:授權方地址

Spender:被授權方地址

Value:授權數量

Nonce:隨機數

Deadline:過期時間

聲明:

  1. 本文轉載自[ 菠菜菠菜談Web3],原文標題《大白話講解Web3籤名釣魚底層邏輯“授權釣魚、Permit與Permit2的區別”》,著作權歸屬原作者[ 菠菜菠菜談Web3],如對轉載有異議,請聯系Gate Learn團隊,團隊會根據相關流程盡速處理。
  2. 免責聲明:本文所表達的觀點和意見僅代表作者個人觀點,不構成任何投資建議。
  3. 文章其他語言版本由Gate Learn團隊翻譯, 在未提及Gate.io的情況下不得復制、傳播或抄襲經翻譯文章。
即刻開始交易
註冊並交易即可獲得
$100
和價值
$5500
理財體驗金獎勵!
It seems that you are attempting to access our services from a Restricted Location where Gate is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Thailand, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.