最近,在與我們的一個客戶合作時,我們發現了一個有趣的錯誤,有可能成為一些DeFi項目的攻擊媒介。這個錯誤尤其與著名的ERC777代幣標準有關。此外,它不僅僅是眾所周知的黑客中常見的簡單的重入問題。
這篇文章對ERC777進行了全面的解釋,涵蓋了所有必要的細節。深入研究ERC777代幣的具體細節的資源很少,這篇文章對于有興趣深入了解ERC777代幣的人來說是一個有價值的詳細指南。
在文章的最后部分,將解釋我們最近的發現。
這個漏洞利用了ERC777的特性,能夠設置一個Hook 接收函數。通過利用在目標合約中進行任意調用的能力,惡意調用者可以調用 ERC777 注冊表合約,并為目標合約分配一個特定的Hook地址。因此,只要目標合約在未來收到ERC777代幣,攻擊者的Hook合約就會被觸發。這個Hook可以以各種方式加以利用:要么用于重入攻擊以竊取代幣,要么只是回退交易,從而阻止目標合約發送或接收ERC777代幣。
ERC777是帶有轉賬Hook的代幣標準之一。這里是 EIP描述:https://eips.ethereum.org/EIPS/eip-777 , 這里是一篇 ERC777 實踐。
區塊鏈NFC協議IYK發布基于ERC-6551標準的簽名模塊:金色財經報道,區塊鏈NFC協議IYK在官推宣布推出基于ERC-6551代幣標準的簽名模塊,用戶能夠使用區塊鏈技術在數字物品上留下簽名,IYK 使用近場通信 (NFC) 和區塊鏈技術來標記物理項目和IRL體驗。它提供各種支持 NFC 和區塊鏈的產品,這些產品可以鏈接到 NFT、考勤令牌、網絡鏈接和其他獨家內容。目前該模塊已在旗下IT-01和IT-03產品上部署并將為巴黎時裝周提供簽名機會,巴黎時裝周的參加者有機會獲得藝術家gmoney和Jeff Staple的數字簽名。[2023/6/26 21:59:33]
實現ERC777代幣的主要動機在于希望能夠模仿原生代幣轉賬的行為。通過在代幣接收時觸發智能合約,開發人員可以執行特定的邏輯,以增強功能并創建更多動態的代幣交互。
然而,這些在轉賬過程中的額外調用使ERC777與ERC20代幣不同。這些Hook引入了一個新的攻擊載體,可能會影響到那些沒有設計時考慮到在代幣轉賬過程中處理額外調用的智能合約。這種出乎意料的行為會給這些合約帶來安全風險。
以下是以太坊主網上一些具有一定流動性的ERC777代幣的列表:
Solana生態DeFi項目Mercurial將更名為Meteora,并進行代幣重置:12月28日消息,Solana生態DeFi項目Mercurial將更名為Meteora,并用Meteora代幣進行重置,以取代其MER代幣,MER持有者將獲得Meteora的新代幣產品。其中在1億枚Meteora代幣的供應中,20%將流通并完全流動,而80%將交給DAO管理,旨在激發用戶興趣,建立市場信心,與FTX/Alameda保持距離。[2022/12/28 22:12:06]
當Hook發生時
ERC20 代幣只是在轉賬過程中更新余額。但ERC777代幣是這樣做的:
1.對代幣發起者的地址進行Hook調用
2.更新余額
3.對代幣接收方地址進行Hook調用
這在VRA代幣中得到了很好的說明:
源碼: https://etherscan.io/address/0xf411903cbc70a74d22900a5de66a2dda66507255
現在,讓我們檢查一下這些調用的代碼:
Wintermute黑客地址現為3Crv第三大持有者,當前還持有近7000枚ETH和多種ERC-20代幣:9月20日消息,被Etherscan標記為Wintermute黑客的錢包地址當前持有6,927枚以太坊,約合逾944萬美元。另外,該錢包還持有671.24枚WBTC(約合1300萬美元)、逾397萬枚USDP、1,789,602枚SomniumSpaceCubes代幣CUBE(約合234萬美元)、59,407枚MapleToken代幣MPL(約合118萬美元)、近102萬枚CRV(約合99萬美元)、逾217萬枚YGG(約合83萬美元)等超70種ERC-20代幣,這些代幣當前總價值為3825萬美元。另外,在今日13:39,該地址在CurveDAI/USDC/USDT池中通過添加流動性獲得111,953,508枚3Crv。當前該地址是3Crv第三大持有者。
此前,Wintermute創始人兼首席執行官Evgeny Gaevoy稱,Wintermute在DeFi黑客攻擊中損失1.6億美元,服務會在未來幾日中斷后恢復正常。[2022/9/20 7:08:48]
正如你所看到的:
這個函數從_ERC1820_REGISTRY中讀取稱為implementer(實現者)的合約
如果該函數找到了一個實現者,那么這個實現者就會被調用。
公告 | 火幣全球站ETH及相關ERC20系列幣種提幣延遲到賬:火幣發布公告稱,由于錢包維護,火幣全球站ETH及相關ERC20系列幣種的提幣將會出現延遲到賬的情況(期間您的資產安全不受影響),請耐心等待。維護完成后我們將以公告另行通知。[2019/12/16]
讓我們研究一下這個注冊表,看看什么是實現者。
所有 ERC777 代幣都與注冊表(Registry)的合約有關:https://etherscan.io/address/0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24。
這個地址被ERC777代幣用來存儲設定的 Hook 接收者。這些 Hook 接收者被稱為 "接口實現者"。
這意味著Alice可以選擇Bob作為她的接口實現者。如果Alice接收或發送ERC777代幣,Bob將收到Hook。
Alice 可以管理不同的Hook類型。因此,當 Alice發送代幣時,她可以選擇Bob作為接口實現者,而只有當Alice收到代幣時,她選擇Tom作為實現者。
在大多數情況下,她也可以為不同的代幣選擇不同的接口實現者。
這些偏好設置被存儲在這個映射的注冊表中:
動態 | 幣安冷錢包中的ERC20代幣價值是ETH的4倍:據Trustnodes消息,幣安冷錢包中持有價值約20億美元的基于以太坊區塊鏈的ERC20代幣,而持有的ETH只有大約5億。幣安最近以8美分的手續費轉移了200萬枚ETH,隨后顯示是交易所冷錢包互轉。在此過程中,幣安披露了其ERC20代幣以及其他基于以太坊的代幣,Tether(USDT)是價值最高的一個。TrueUSD和USDCoin等其他穩定幣價值總計約1.7億美元。[2019/7/13]
_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
曼昆區塊鏈法律
在AI語境下,the only certainty is uncertain。人們喜歡確定的東西,但由AI帶來的這種不確定,在科技發展的大潮之下,并不可逆.
1900/1/1 0:00:00作者:Russian DeFi,編譯:Block unicorn模塊化區塊鏈可能會使傳統區塊鏈變得過時.
1900/1/1 0:00:00編譯:AiYing Compliance紐約州總檢察長Letitia James 于 2023 年 2 月對 CoinEx 提起訴訟.
1900/1/1 0:00:00▌經濟日報:要利用科技賦能金融監管 打造數字智能監管體系經濟日報文章指出,要利用科技賦能金融監管,打造數字智能監管體系。隨著金融科技的快速發展,新型金融業態層出不窮,傳統金融監管已面臨較大挑戰.
1900/1/1 0:00:00作者: 河馬社區 隨著以太坊上海升級成功將以太坊網絡由POW轉向POS,用戶質押32個ETH即可作為驗證節點,且用戶可提取質押資產,隨之而來的是LSD的持續增長.
1900/1/1 0:00:00摘要 目前,區塊鏈技術公司多致力于區塊鏈相關基礎設施的建設,如“公鏈”、“聯盟鏈”、“跨鏈”等技術建設;但.
1900/1/1 0:00:00