以太坊價格 以太坊價格
Ctrl+D 以太坊價格
ads
首頁 > XMR > Info

777:ERC777 與任意調用合約可能出現的安全問題

Author:

Time:1900/1/1 0:00:00

最近,在與我們的一個客戶合作時,我們發現了一個有趣的錯誤,有可能成為一些DeFi項目的攻擊媒介。這個錯誤尤其與著名的ERC777代幣標準有關。此外,它不僅僅是眾所周知的黑客中常見的簡單的重入問題。

這篇文章對ERC777進行了全面的解釋,涵蓋了所有必要的細節。深入研究ERC777代幣的具體細節的資源很少,這篇文章對于有興趣深入了解ERC777代幣的人來說是一個有價值的詳細指南。

在文章的最后部分,將解釋我們最近的發現。

這個漏洞利用了ERC777的特性,能夠設置一個Hook 接收函數。通過利用在目標合約中進行任意調用的能力,惡意調用者可以調用 ERC777 注冊表合約,并為目標合約分配一個特定的Hook地址。因此,只要目標合約在未來收到ERC777代幣,攻擊者的Hook合約就會被觸發。這個Hook可以以各種方式加以利用:要么用于重入攻擊以竊取代幣,要么只是回退交易,從而阻止目標合約發送或接收ERC777代幣。

ERC777是帶有轉賬Hook的代幣標準之一。這里是 EIP描述:https://eips.ethereum.org/EIPS/eip-777 , 這里是一篇 ERC777 實踐。

Web3媒體和NFT平臺Pixel Vault宣布推出基于ERC-721靈魂綁定NFT的BattlePlan玩家卡:金色財經報道,Web3媒體和NFT平臺、PUNKS Comic和MetaHero Universe發行商Pixel Vault在社交媒體宣布推出基于ERC-721靈魂綁定NFT的BattlePlan玩家卡,旨在實現游戲配置文件和錢包功能的獨特融合,并改變玩家與其游戲平臺的互動方式,用戶可以根據個人資料圖片和皮膚選擇定制的靈魂綁定ERC-721 NFT,并且使用玩家卡來存儲評級、BattlePoints 和不可轉讓的積分。[2023/7/17 10:59:23]

實現ERC777代幣的主要動機在于希望能夠模仿原生代幣轉賬的行為。通過在代幣接收時觸發智能合約,開發人員可以執行特定的邏輯,以增強功能并創建更多動態的代幣交互。

然而,這些在轉賬過程中的額外調用使ERC777與ERC20代幣不同。這些Hook引入了一個新的攻擊載體,可能會影響到那些沒有設計時考慮到在代幣轉賬過程中處理額外調用的智能合約。這種出乎意料的行為會給這些合約帶來安全風險。

以下是以太坊主網上一些具有一定流動性的ERC777代幣的列表:

Limit Break 推出可執行的鏈上可編程版稅新標準 ERC721-C:5月10日消息,Limit Break 首席執行官 Gabriel Leydon 宣布推出創作者代幣合約(Creator Token Contract)ERC721-C(C 代表 Creator)作為可執行的鏈上版稅和可編程版稅合約的解決方案,旨在幫助 NFT 創作者賺取更多版稅。Limit Break 尚未確定計劃如何在自己的 NFT 項目 DigiDaigaku 中使用 ERC721-C。

項目可以利用創作者代幣合約 ERC721-C 來控制 NFT 在錢包之間的轉移,同時可以強制收取版稅來確保 NFT 創作者的工作獲得報酬,并且能夠進行可編程支付、拆分、衍生品等。創作者代幣合約兼容各種代幣類型,包括 ERC721、ERC721-A、AdventureERC-721 和 ERC1155,同時還具有智能合約白名單選項和功能。[2023/5/10 14:53:37]

當Hook發生時

ERC20 代幣只是在轉賬過程中更新余額。但ERC777代幣是這樣做的:

1.對代幣發起者的地址進行Hook調用

2.更新余額

3.對代幣接收方地址進行Hook調用

這在VRA代幣中得到了很好的說明:

幣安將不再受理在俄羅斯發行的Mastercard和Visa卡發起的交易:3月8日消息,幣安官方發布公告稱,自2022年3月10日05:00(北京時間)起,所有使用俄羅斯發行的Mastercard卡和Visa卡發起的交易將無法在幣安上進行。此外,俄羅斯境外金融機構使用Mastercard卡和Visa卡發起的所有交易也將無法在俄羅斯聯邦境內的幣安上進行。[2022/3/8 13:45:02]

源碼: https://etherscan.io/address/0xf411903cbc70a74d22900a5de66a2dda66507255

現在,讓我們檢查一下這些調用的代碼:

正如你所看到的:

這個函數從_ERC1820_REGISTRY中讀取稱為implementer(實現者)的合約

如果該函數找到了一個實現者,那么這個實現者就會被調用。

讓我們研究一下這個注冊表,看看什么是實現者。

動態 | 硬件錢包制造商Ledger將提供ERC-20代幣機構級托管服務:據CoinDesk消息,加密貨幣硬件錢包制造商Ledger與香港牌照信托及托管公司Legacy trust合作,提供“機構級”加密貨幣托管服務,旨在增加機構資金向數字資產的流動。Legacy Trust表示,通過利用Ledger的多重簽名加密貨幣錢包管理產品Ledger金庫,該公司現在可以“安全和高效”地保管客戶的數字資產,比如比特幣。此外,它還將開始提供基于以太坊的ERC-20代幣的保管服務。[2019/3/28]

所有 ERC777 代幣都與注冊表(Registry)的合約有關:https://etherscan.io/address/0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24。

這個地址被ERC777代幣用來存儲設定的 Hook 接收者。這些 Hook 接收者被稱為 "接口實現者"。

這意味著Alice可以選擇Bob作為她的接口實現者。如果Alice接收或發送ERC777代幣,Bob將收到Hook。

Alice 可以管理不同的Hook類型。因此,當 Alice發送代幣時,她可以選擇Bob作為接口實現者,而只有當Alice收到代幣時,她選擇Tom作為實現者。

在大多數情況下,她也可以為不同的代幣選擇不同的接口實現者。

公告 | Coinbase Pro新增四個ERC20代幣:據Coinbase官方博客消息,Coinnase Pro平臺增加了四個以太坊ERC20標準的代幣,分別是CVC、DNT、LOOM及MANA。最初將允許包括美國(不包括紐約)、英國、歐盟、加拿大、新加坡和澳大利亞的進行交易。[2018/12/8]

這些偏好設置被存儲在這個映射的注冊表中:

_interfaceHash是Alice為一個事件選擇接口實現者的標識。

而任何人都可以用這個函數讀取Alice的接口實現者:

正如你所看到的,這就是我們之前在VRA代碼中遇到的函數。

變量_TOKENS_SENDER_INTERFACE_HASH被用作_interfaceHash,它可以是任何字節。但是VRA代幣使用這些字節來識別這種類型的Hook:

設置一個Hook接收函數,Alice只需在注冊表上調用這個函數并輸入Bob的地址作為_implementer參數。

她還必須指定一個_interfaceHash。她會從VRA代幣代碼中獲取這個_TOKENS_SENDER_INTERFACE_HASH。

還有一個重要的細節。

在為上面的VRA設置實現者后,Alice 也將會意識到,即使其他ERC777代幣被轉賬,Bob也會收到調用。比如 imBTC, imBTC在發送的代幣上有相同的_interfaceHash。

這是由于所有ERC777代幣共享相同的注冊表合約來存儲Hook的偏好設置。但這取決于ERC777代幣為他們的Hook指定名稱,雖然有時它們是相似的,但并不總是如此。

調用注冊表是所有 ERC777 都具有的特征。因此,我們可以嘗試dune.com來調用所有調用注冊表的智能合約。

我們可以使用這個SQL腳本。事實上,我們應該另外過濾出代幣地址,但至少我們有一個完美的開始,結果有78個地址。

譯者備注:dune  traces表 會記錄交易內部調用記錄。

理論上,沒有人能夠保證某些代幣恰好使用這個0x1820合約作為注冊表。但我們可以用dune.com來檢查。

它返回這些地址

0x1820a4b7618bde71dce8cdc73aab6c95905fad240xc0ce3461c92d95b4e1d3abeb5c9d378b1e4180300x820c4597fc3e4193282576750ea4fcfe34ddf0a7我們檢查過,0x1820是唯一擁有有價值的ERC777代幣的注冊表。其他注冊表的代幣并不那么有價值。

ERC777 不僅是一個帶有Hook的標準。還有 ERC223、ERC995或ERC667。它們并不那么稀奇。你一定聽說過實現 ERC667 的LINK代幣。

這是最近為我們的客戶發現的攻擊載體。

研究人員通常認為ERC777代幣會對調用發起者和接收者進行調用。但實際上,發起者和接收者可選擇任意 "Bob" 作為Hook接收者。

因此,想象一下結合那些具有任何數據對任何地址進行任意調用的合約會發生什么?

就有任意調用功能的可以廣泛存在于 DEX 聚合器、錢包、multicall 合約中。

譯者注:任意調用功能是指在合約中存在類似這樣的函數:

function execute(address target, uint value, string memory signature, bytes memory data, uint eta) public payable;

它可以調用任何的其他的方法。

攻擊方法:

攻擊者找到一個允許任意調用的函數的目標合約(Target)

攻擊者在目標(Target)上調用:

registy1820.setInterfaceImplementer(Target, hookHash, Attacker)

現在,我們的Attacker 是 Target 的實現者

Attacker  會隨著 ERC777代幣中使用的 hookHash 而被調用。

每當目標合約(Target)收到ERC777代幣時,Attacker就會收到一個 Hook 調用。

下面的攻擊,取決于 Target代碼 而不同:

Attacker 可以在一些用戶執行目標合約中的函數時進行重入

Attacker 可以直接回退,這樣用戶的交易就直接被還原了

如果DEX聚合器計算最佳兌換路徑是通過某個有ERC777代幣的DEX交易對時,那么可能會遇到問題。

經過與客戶數小時的討論,我們找到了一個不會破壞任意調用的解決方案。

項目方最好限制使用 Registry1820作為任意調用的地址。因此,沒有攻擊者能夠利用任意調用來設置接口實現者。

項目和審計人員必須注意到ERC777中描述的Hook行為。這些代幣不僅對接收者和發起者進行調用,也對其他一些Hook接收者進行調用。

在這個意義上,允許任意調用的項目必須特別注意,并考慮ERC777的另一個攻擊載體。

登鏈社區

個人專欄

閱讀更多

金色早8點

Odaily星球日報

金色財經

Block unicorn

DAOrayaki

曼昆區塊鏈法律

Tags:777HOOHOOKTER7777歡樂代幣券怎么用CHOOhook幣解鎖pottercoin

XMR
ORD:Ordinals 引發的「NFT返祖」 不是理想主義的回歸

從搬運 BRC-20 Token 發行模式到 ETH 的 $FERC、到直接把圖片轉 Base64 字符串插入到 ETH 交易的 Hex Data 字段實現 比特幣 NFT 刻錄方式的 ETHs.

1900/1/1 0:00:00
DEPI:多維度解析DePIN如何助力人工智能?

過去,初創企業憑借其速度、靈活度和創業文化,擺脫組織慣性桎梏,長期引領著技術創新。然而,這一切被人工智能時代改寫.

1900/1/1 0:00:00
POL:Polygon 2.0:ZK驅動的L2側鏈網絡

Polygon是解決以太坊網絡可擴展性和交易速度問題的Layer 2擴容解決方案,同時提高了去中心化應用程序的可用性和用戶體驗。Polygon的愿景很簡單:構建互聯網的價值層.

1900/1/1 0:00:00
GAM:游戲革命2023:AIGC拯救游戲廠商

文明史即工具史,縱觀人類社會的演化,每一次的加速迭代,都有賴于關鍵性的技術突破。前有蒸汽機到電力普及的生產力大爆發,以及計算機、互聯網的誕生打開新世界,如今AIGC將再次推動先進技術工具的變革.

1900/1/1 0:00:00
INT:Paradigm:以太坊交易的intents范式——架構及風險

作者:Quintus Kilbourn, Georgios Konstantopoulos,Paradigm;翻譯:金色財經0xxz最近.

1900/1/1 0:00:00
ASP:五個關于香港VASP法案的YES or NO

VASP制度實施后,證監會一方面將根據《證券及期貨條例》下的現行制度,對虛擬資產交易平臺所進行的證券型代幣交易作出監管(涉及1、7號牌),另一方面亦會根據《打擊洗錢條例》下的VASP制度.

1900/1/1 0:00:00
ads