以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads
首頁 > OKB > Info

編譯器漏洞無解?Runtime Protection實現DeFi鏈上風控保護_ASP

Author:

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

重入攻擊仍然是一個挑戰,現有的防御手段主要集中在協議源代碼層面,僅在合約進入 runtime 狀態前生效

「運行時保護」是 DeFi 安全的重要補充,它以「保護執行結果」為目的,確保協議的執行與其預期設計一致

EVM 的設計不支持「運行時保護」,因為智能合約無法訪問 runtime 狀態全部上下文信息

Artela 探索一種 EVM+Extension 的執行層范式,增強執行層以消除重入攻擊

Artela 通過 Aspect Programming 實現鏈上「運行時保護」擴展

我們逐步展示了如何通過 Aspect 防范對 Curve 合約的重入攻擊

盡管重入攻擊是一個眾所周知的問題,并且出現了許多風險控制措施,但在過去的兩年中,涉及此類攻擊的安全事件仍在不斷發生:

Curve Finance 攻擊(2023 年 7 月)—6000 萬美元,Curve 因其合約編程語言 Vyper 編譯缺陷遭受重入攻擊。

Origin Protocol 攻擊(2022 年 11 月)—700 萬美元,穩定幣項目 Origin Dollar(OUSD)遭受了重入攻擊。

Siren Protocol 攻擊(2021 年 9 月)—350 萬美元,AMM 池遭受重入攻擊。

Vyper編譯器發布漏洞事件分析報告,漏洞已于v0.3.1修復并測試:8月6日消息,以太坊編程語言Vyper發布有關上周漏洞事件的事后分析報告:7月30日由于Vyper編譯器中的潛在漏洞,多個Curve流動性池被利用,該漏洞本身是一個未正確實施的重入防護,受影響的Vype版本為v0.2.15、v0.2.16、v0.3.0。

Vyper稱該漏洞已于v0.3.1修復并測試,v0.3.1及更高版本是安全的。然而,當時并沒有意識到對實時合約的影響,也沒有通知下游協議。未來將加強使用Vyper協議更嚴格的雙向反饋并推出相關錯誤賞金計劃和競賽。[2023/8/6 21:28:18]

Cream Finance 攻擊(2021 年 8 月)—1880 萬美元,攻擊者利用重入漏洞進行二次借貸。

目前,防范重入攻擊的重點集中在智能合約的源代碼層面,措施包括集成 OpenZeppelin 的 ReentrancyGuard,以及對合約邏輯代碼進行安全審計,以避免預定義的安全隱患。

這種方法被稱為「白盒」解決方案,旨在在源代碼層面規避漏洞,以最小化邏輯錯誤。然而,其主要挑戰在于無法防御未知隱患。

將合約從源代碼「轉化」為實際 runtime 是個具有挑戰性的過程。每一步可能為開發人員帶來無法預料的問題,而合約源代碼本身可能無法全面涵蓋所有潛在情況。在 Curve 的案例中,由于編譯器問題,即使協議源代碼是正確的,最終運行結果與協議的預期設計之間仍可能存在差異。

Rollup平臺Caldera即將引入狀態預編譯,允許開發者定制和添加功能至他們的Caldera鏈:4月21日消息,Rollup平臺Caldera宣布即將引入狀態預編譯(Stateful Precompiles),為開發人員提供一個新的界面來定制和添加功能到他們的Caldera鏈,無需編寫Solidity即可向其EVM實例添加功能。狀態預編譯建立在EVM中標準的無狀態預編譯之上,從而實現更廣泛的功能和可定制性。Caldera表示,狀態預編譯的用例包括啟用合約擔保收入,鑄造EVM實例的原生硬幣,部署性能更高且更低成本的智能合約,限制白名單部署智能合約等。

Foresight News 此前報道,2023 年 2 月份,Caldera 宣布已經完成 900 萬美元的兩輪融資,傳統金融巨頭紅杉資本和加密原生公司 Dragonfly 領投,Neo、1kx 和 Ethereal Ventures 等參投。3 月底,Caldera 宣布在以太坊 Goerli 和 Polygon 上推出兩個公共測試網(EVM 兼容),允許開發人員部署智能合約并通過 Ethers.js 和 Thirdweb 等常用工具連接,普通用戶可以將測試網添加錢包,與部署的合約進行交互。[2023/4/21 14:17:24]

以太坊編程語言Solidity發布最新版本編譯器Solidity 0.8.18,支持巴黎硬分叉:金色財經報道,以太坊編程語言Solidity發布最新版本的Solidity編譯器Solidity0.8.18,新版本的功能包括:禁用CBOR元數據、支持巴黎硬分叉、棄用selfdestruct、從Yul生成EVM字節碼。團隊建議所有Solidity開發人員升級到版本0.8.18以利用這些改進和優化。[2023/2/2 11:43:19]

僅僅依靠協議在源代碼和編譯層面的安全性是不足夠的。即使源代碼看起來毫無瑕疵,由于編譯器問題,漏洞仍可能意外出現。

與現有的風險控制措施集中在協議源代碼層面并在運行之前生效不同,運行時保護涉及協議開發人員編寫運行時保護規則和操作,以處理運行時的未預料情況。 這有助于對運行時執行結果進行實時評估及應對。

運行時保護在增強 DeFi 安全性方面至關重要,是現有安全措施的重要補充。通過以「黑盒」方式保護協議,它通過確保最終運行結果與協議預期設計相一致來增強安全性,而無需直接干涉合約代碼執行。

不幸的是,EVM 設計不支持在鏈上實現運行時保護,因為智能合約無法訪問完整的運行時上下文。

StarkNet 在測試網上發布 Alpha 3,對測試框架和編譯時間進行了改進:10月29日消息,StarkWare 推出的以太坊 Rollup 擴容方案 StarkNet 在測試網上發布新版本,該版本對測試框架進行了完善,對編譯時間進行了改進,并增加了短字符串語法。[2021/10/29 6:19:06]

如何克服這一挑戰?我們認為以下先決條件是必要的:

一個專門的模塊,可以訪問跨智能合約的所有信息,包括整個交易上下文。

從智能合約獲得必要的授權,使模塊有權根據需要回撤 (revert) 交易。

確保模塊的功能在智能合約執行后和狀態提交之前生效。

EVM 在解決上述挑戰中目前面臨限制,難以容納更多創新。在模塊化區塊鏈的范式下,執行層需要探索 go beyond EVM 的突破。

Artela 的思路是 EVM + native extension,通過構建 EVM 的 WASM 原生擴展層以實現 go beyond EVM。

我們推出了 Aspect Programming,這是支持 Artela 區塊鏈的一種編程框架,支持在區塊鏈上進行原生擴展。

Aspect 是可編程的原生擴展模塊,用于在運行時動態集成自定義功能到區塊鏈中,作為智能合約的模塊化補充,增強鏈上功能性。

以太坊Solidity推出Solidity論壇 供開發人員討論語言設計和編譯器等問題:以太坊Solidity基于開源討論平臺Discourse推出Solidity論壇,供開發人員討論Solidity編程語言的設計、Solidity編譯器、Solidity文檔以及Solidity版本等問題。不過,緊急的Solidity支持問題、錯誤或漏洞報告、以太坊研究的具體討論以及提案EIP等不在該論壇討論范圍之內。[2021/2/2 18:41:24]

Aspect 的特性是能夠訪問區塊鏈基礎層的系統級 API,并在交易生命周期的各個切點(Join Point)添加擴展邏輯。智能合約可以綁定指定的 Aspect 以觸發擴展功能。當交易調用智能合約時,該交易也會經由與該合約關聯的 Aspect 處理。

Aspect 可以記錄每個函數調用的執行狀態,并防止在回調函數執行期間發生重入。當在回調函數執行期間發生重入調用時,Aspect 會檢測到并立即回撤該交易,防止攻擊者利用重入漏洞。通過這種方法,Aspect 有效地消除了重入攻擊,確保智能合約的安全性和穩定性。

Aspect 實現運行時保護的關鍵屬性:

可在智能合約執行后和狀態提交前觸發:Aspect 模塊可設置為在智能合約執行后但在狀態提交前激活。

完整的交易上下文訪問:Aspect 可以訪問完整的交易上下文,包括整個交易信息(方法,參數等)、調用棧(執行過程中所有內部合約調用)、狀態上下文變更以及所有交易觸發的事件。

系統調用能力:Aspect 可以進行系統調用,并在必要時發起交易回撤。

與智能合約的綁定和授權:智能合約可以綁定到 Aspect,并授予 Aspect 參與交易處理的權限。

本章我們探討如何在鏈上實現 Aspect 的運行時保護。

可以在「preContractCall」和「postContractCall」的切點(Join Point)中部署一個實際的「合約保護意圖」Aspect,以防止重入攻擊。

preContractCall: 在跨合約調用執行之前觸發

postContractCall: 在跨合約調用執行后觸發

為進行重入保護,我們的目標是在調用結束之前阻止合約重入。通過 Aspect,我們可以通過在交易生命周期的切點處添加特定邏輯來實現這一目標。

在「preContractCall」切點中,Aspect 監控合約調用堆棧。如果在調用堆棧中有任何重復調用(這意味著我們鎖定的調用中出現了意外重入),Aspect 將會回撤該調用。

我們編寫了 Curve 模擬合約并復刻重入攻擊,以更易理解的方式重現了這個過程。合約代碼如下:

可以看到,上述合約的 add_liquidity 和 remove_liquidity 都由同一個重入鎖 lock 進行了保護,這意味著如果重入保護正常工作,無法通過改鎖重入被保護函數(例如,在 remove_liquidity 中調用 add_liquidity)。

使用 vyper 編譯器 0.2.15、0.2.16 或 0.3.0(這些版本存在已知的重入保護問題)編譯上述合約。

然后,我們部署上述受害者合約,并使用以下合約對其進行攻擊:

模擬實際攻擊,此合約的 attack 方法嘗試通過其 fallback 函數從 remove_liquidity 方法重入 add_liquidity。如果實際發生了重入,可在 receipt 中觀察到在 RemoveLiquidity 事件之前記錄了一個 AddLiquidity 事件。

現在讓我們使用 Aspect 來保護受攻擊的合約。在執行以下操作之前,請先完成以下步驟:

1、部署 Aspect

2、將受害合約與 Aspect 綁定

如果對 Aspect 操作不熟悉,可以首先查看我們的開發者指南先行了解。

完成上述操作后,現在讓我們嘗試再次調用 attack 方法,以檢查操作是否會成功進行。

從動圖(文末原文鏈接可查看)中我們可以看到,重入交易已經被 revert,這意味著我們的 Aspect 正在成功保護受害合約免受重入攻擊。

最近對 Curve 的攻擊再次說明了沒有 100% 完全安全的協議。僅僅將重心放在協議的源代碼和編譯級別的安全性上是不足夠的。即使源代碼看起來毫無瑕疵,由于編譯器問題,漏洞仍然可能意外出現。

為了增強 DeFi 的安全性,運行時保護變得至關重要。通過以「黑盒」方式保護協議,確保協議的執行與其預期設計一致,可以有效地防止運行時的重入攻擊。

我們復刻了 Curve 合約并完全模擬了其近期的重入攻擊,并以更易理解的方式再現了整個過程。利用 Aspect 編程作為一種新方法,實現鏈上運行時保護,我們逐步展示了如何用 Aspect 保護受害合約。我們的目標是幫助根除 Curve 等 DeFi 協議可能遭受的重入攻擊,從而增強整個 DeFi 領域的安全性。

通過 Aspect Programming,開發人員不僅可以在安全領域實現鏈上運行時保護,還能實現諸如意圖、JIT 和鏈上自動化等前所未有的創新用例。除此之外,這個以 Cosmos SDK 為基礎的通用框架將不僅支持 Artela 區塊鏈,更能支持其他區塊鏈構建基于自己執行層的 native extension。

金色財經

企業專欄

閱讀更多

Foresight News

金色財經 Jason.

白話區塊鏈

金色早8點

LD Capital

-R3PO

MarsBit

深潮TechFlow

Tags:ASPSPECECTSPEASPO WorldXSPECTARConnectChainSPET幣

OKB
SharkTeam:UniswapV4 Hook最佳安全實踐_HOO

近期Uniswap Lab官宣了下一代 AMM Uniswap V4 的開發進展,并公開了白皮書和代碼倉庫.

1900/1/1 0:00:00
晚間必讀 | DeFi已死了嗎?_比特幣

我們將在本文深入研究關于現實世界資產(RWA)代幣風險管理的關鍵問題。我們將分析不同協議是如何處理此類相關風險的,并討論迄今為止可能遇到的所有問題.

1900/1/1 0:00:00
生態空投季來襲?主網上線兩年多 DFINITY 還能重回巔峰嗎?_FIN

作者 :白澤研究院 還記得曾經的天王級項目 DFINITY 嗎?2018 年 5 月,5 萬名注冊參與者通過收到 ICP 代幣空投.

1900/1/1 0:00:00
與 Twitter 和 Threads 競爭?TikTok 推出文本帖子功能_NFT

作者:ARIJIT SARKAR,COINTELEGRAPH;編譯:松雪,金色財經社交媒體巨頭 TikTok 宣布推出一項功能.

1900/1/1 0:00:00
硅谷大佬都在聊的AI Agents 是真熱還是虛火?_ENT

AI Agents注定是一場馬拉松。ChatGPT獲得巨大成功后,OpenAI已然奔向下一個目標——AI Agents(智能體).

1900/1/1 0:00:00
解析 Vertex 協議:填補 DEX 與 CEX 之間的業務空白_中心化交易所

作者:Metaverse Guy;編譯:深潮TechFlow 從 FTX 的崩潰和數十億客戶資金的損失,到最近 SEC 對幣安和 Coinbase 的行動.

1900/1/1 0:00:00
ads