加密貨幣交易所 加密貨幣交易所
Ctrl+D 加密貨幣交易所
ads

以Kadena智能合約為例 簡析如何規避重入攻擊和跨函數攻擊_DIT:REDI

Author:

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

在這篇文章中,我們將簡要地解釋重入和跨函數重入之間的區別,以及圖靈不完備性如何能夠防止一些這樣的攻擊。

其中我們將提供一個跨函數重入利用的案例,該案例中Kadena區塊鏈使用的是編程語言Pact,但圖靈不完備性并未防止該惡意利用的發生。

事件簡介

Kadena區塊鏈旨在實現比其他L1鏈更高的可擴展性、安全性和可用性。其開發了一種新的語言用以編寫智能合約:Pact。

這種語言是人類可讀的,且易于形式化驗證,并具備可提高安全性的圖靈不完備性。

這里提到的圖靈不完備性意味著Pact無法做到圖靈完備編程語言所能做到的那些事——看起來好像是個劣勢,但其實智能合約編程,哪怕是最復雜的DeFi協議也很少會需要用到圖靈完備性。

圖靈不完備性最重要的一點是沒有無界遞歸。雖然這確實大大減少了攻擊面,但一些「經典」攻擊是無法被100%避免的,接下來我們就會講述跨函數重入的問題。

SushiSwap:在白帽安全流程中保護了大部分受影響資金:金色財經報道,SushiSwap在官方社交媒體表示,RouteProcessor 2合約批準錯誤之后,SushiSwap已經在帽安全流程中保護了大部分受影響的資金,并表示可以聯系SushiSwap安全團隊了解后續步驟。此外,SushiSwap還提供了官方鏈接,讓用戶查詢是否會受到RouteProcessor 2合約批準錯誤的影響,包括檢查并撤銷已批準的代幣。[2023/4/10 13:54:11]

經典重入攻擊

重入攻擊是非常常見的安全問題。這個問題不僅很難被開發者發現,也很難被審計師審查出其會導致的所有潛在后果。

重入攻擊取決于函數在進行外部調用之前和之后執行的特定任務的順序。

如果一個合約調用了一個不受信任的外部合約,攻擊者可以讓它一次又一次地重復這個函數調用,形成一個遞歸調用。而如果重新輸入的函數執行重要的任務,那這可能就會導致災難性的后果。

NFT社交平臺Metalink完成600萬美元種子輪融資:3月15日消息,NFT投資組合管理和社交平臺Metalink完成600萬美元種子輪融資,Guy Oseary、Gary Vaynerchuk、MoonPay首席執行官Ivan Soto-Wright、The Sandbox創始人 Sebastien Borget、前Coinbase首席技術官Balaji Srinivasan、DJ Justin Blau、Social Capital、Arrington Capital、Sound Ventures、Gemini Frontier Fund、Dapper Labs的風投部門BallerVC和Genies的Human Ventures等參投。

Metalink還推出了其移動應用程序,創建了一個據稱是代幣門控的空間,NFT 收藏家可以在這里互動、匯總公告并跟蹤他們的投資組合表現。該應用程序還計劃在今年晚些時候推出交易功能,以便用戶可以買賣和交換數字資產。[2023/3/16 13:06:35]

下方是一個簡化的例子。

報告:2022年ETH持有者數量增長3.6倍至8700萬:金色財經報道,根據Crypto.com的一份研究報告,ETH持有者的數量在2022年1月至2022年12月期間增長了263%。到12月底,ETH投資者的數量從1月份的2700萬激增至8700萬。相比之下,BTC所有者僅增長了20%,從1月份的1.83億增加到12月份的2.19億。盡管到2022年加密貨幣價格大幅下跌,但加密貨幣的采用率繼續增加。加密貨幣投資者總數從1月份的3.06億躍升至12月份的4.25億,增長了39%。[2023/1/20 11:22:11]

我們把易受攻擊的合約稱為unsafe合約,把惡意的合約稱為Attack合約。

1.攻擊者調用unsafe合約,以將資金轉移到Attack合約中。

2.收到調用之后,unsafe合約首先檢查攻擊者是否有資金,然后將資金轉移到Attack合約。

XCarnival:將給予攻擊者1500枚ETH的賞金并免除法律訴訟:6月27日消息,NFT借貸協議XCarnival發推表示,XCarnival官方將給予攻擊者(0xb7CBB4d43F1e08327A90B32A8417688C9D0B800a)1500枚ETH的賞金,并明確免除對此人的法律訴訟。

此前報道,XCarnival遭到攻擊,黑客獲利3087枚ETH,隨后XCarnival暫停智能合約運行,暫時不支持所有的充值和借貸行為。[2022/6/27 1:33:06]

3.收到資金后,Attack合約執行回退函數,在它能夠更新余額之前回調到不安全的合約,從而重新啟動該過程。

因為這種攻擊是通過無界遞歸調用進行的,所以如果語言不是圖靈完備的,攻擊就不可能進行。

數據:stETH目前是DeFi借貸協議Euler Finance上第二大借入資產:6月12日消息,Token Terminal發推稱,stETH目前是DeFi借貸協議Euler Finance上第二大借入資產(borrowed asset)。

此前6月初消息,基于以太坊的DeFi借貸協議Euler Finance宣布完成3200萬美元融資,Haun Ventures領投,Variant、FTX Ventures和Jump Crypto等參投。

據悉,Euler Finance使用了一種框架式的借貸風險評估方案,團隊將于今年晚些時候推出DAO,使用戶能夠對Euler的開發和運營進行治理,并決定如何使用其社區金庫。[2022/6/13 4:20:53]

跨函數重入

跨函數重入類似于經典的重入攻擊,除了重入的函數與進行外部調用的函數功能不同。這種重入攻擊通常更難被發現——因為在復雜的協議中,組合的可能性太多,無法手動測試每個可能的結果。

這就引出了我們的概念證明:使用Pact語言進行簡單的跨函數重入攻擊。

Pact模塊中的簡單跨函數重入

正如我們在下方代碼片段中看到的,合約中的函數對另一個實現特定接口的合約進行外部調用。這允許重入一個設計好的攻擊合約。Pact中的功能是內置函數,可授予用戶權限來執行敏感任務。以下代碼僅供說明之用,并非取自真實案例合約。

我們將使用的代碼例子包含三個部分:

1.?合約接口

用以使主合約與一個惡意的外部模塊進行交互

2.主要模塊

被攻擊的模擬示例合約

首先,數據庫被定義為一個表,其中字符串存儲在具有關聯十進制數的行中。

然后定義了一個能力:CREDIT。這個條件將是credit函數所需要的,但只被with_capability語句中的bad_function內部授予。這意味著直接調用credit會失敗。

現在,函數credit被定義如下:它增加了作為輸入的字符串的余額。如果該地址不在表中,它還會創建該條目。

最后,函數bad_function增加了legit_address的余額,但也執行了對符合之前定義的接口的合約的調用,該合約可以作為一個輸入參數提供。函數get-balance允許我們讀取該表格。

3.用于觸發重入的模塊:

重新進入主模塊,調用credit函數

大致流程如下:

a.以攻擊合約為參數調用bad_function

b.?CREDIT功能被授予

c.“legit_address”的余額增加了10

d.?調用惡意模塊的external_function:因為它仍然具有CREDIT功能,它可以重新進入合約并直接調用credit函數,給"attacker_address"一個100的余額。

之后,返回10,返回100。

重入成功。

現在,如果我們不重入調用credit,而是嘗試重入再次調用bad_function,會發生什么?即使第一次調用credit成功,由于重入是在bad_function中,這將是一個遞歸調用且執行將會失敗。

現在,如果我們嘗試直接調用external_function,這將不起作用,因為所需的功能CREDIT沒有被授予。

寫在最后

通過移除無界遞歸,圖靈不完備性可以防止一些重入攻擊的載體。

然而,由于跨函數重入可以在沒有遞歸調用的情況下進行,圖靈不完備性并不能阻止所有此類攻擊載體,因此用戶在與這種語言交互時不應該假設重入不會造成惡劣影響。

重入和跨函數重入是非常常見的安全問題,Web3.0領域也因此發生了一系列規模巨大的攻擊事件。

Pact作為一種智能合約編程語言,極具潛力。

它采取的方法與其他語言如Solidity或Haskell有些不同。Pact并不完全依靠圖靈不完備性來提高安全性;該語言被設計地更容易閱讀、理解和正式驗證。

然而,沒有哪種編程語言能對所有的攻擊載體免疫。因此開發者必須了解他們所使用的語言的獨特功能,并且在部署前對所有項目進行徹底審計。

目前,CertiK的審計及端到端解決方案已覆蓋目前市面上大部分生態系統,并支持幾乎所有主流編程語言,就區塊鏈平臺、數字資產交易平臺、智能合約的安全性等領域為各個生態鏈提供安全技術支持。

Tags:DITCREREDIREDSmartCredit Tokencream幣創始人PussyCreditDeCredit

歐易okex官網
創業的盡頭是公鏈 Solana聯合創始人Anatoly Yakovenko_SOL:LANA

從2023年開始,Solana聯合創始人似乎就相當樂觀。即使最近幣圈市場依舊動蕩,持續彌漫著FUD的氣息,這似乎也并未影響他們最近的ElectricCapital開發者報告.

1900/1/1 0:00:00
以太坊上海升級必看最全攻略_以太坊:EFI

以太坊基金會本月初在核心開發人員會議中,宣布計劃在2月初為「上海升級」啟動「公共測試網」,并預定于3月執行上海升級.

1900/1/1 0:00:00
探索2023年Cosmos重大機遇:哪些趨勢會大放異彩?_OSM:3X Long Cosmos Token

作者:SebastienCouture&Interop普通合伙人編譯:Blockunicorn 隱私、模塊化、原生穩定幣、托管、DAO工具和其他大趨勢會讓Cosmos在今年大出風頭.

1900/1/1 0:00:00
金色觀察 | DeFi研究員:我每周都在使用的13種免費加密工具_區塊鏈:區塊鏈技術通俗講解知乎

文/Aylo,alphaplease創作者;譯/金色財經0xnative 1、DeFiLlama 滿足用戶所有DeFi需求的一站式商店。資深用戶一般都會每周查看DeFiLlama.

1900/1/1 0:00:00
LayerZero CEO:從第一性原理理解LayerZero_LAYER:KILLTHEZERO

昨天推特上出現了有很多對LayerZero的討論,其中也包括很多誤解,所以我將從第一性原理開始介紹LayerZero.

1900/1/1 0:00:00
a16z合伙人:給Web3初次創業者的11條建議_RES:CRY

原文作者:GuyWuollet,a16zCrypto原文編譯:angelilu,ForesightNewsa16z的Web3初創者加速器計劃「CryptoStartupSchool」將于2023.

1900/1/1 0:00:00
ads