在這篇文章中,我們將簡要地解釋重入和跨函數重入之間的區別,以及圖靈不完備性如何能夠防止一些這樣的攻擊。
其中我們將提供一個跨函數重入利用的案例,該案例中Kadena區塊鏈使用的是編程語言Pact,但圖靈不完備性并未防止該惡意利用的發生。
Kadena區塊鏈旨在實現比其他L1鏈更高的可擴展性、安全性和可用性。其開發了一種新的語言用以編寫智能合約:Pact。
這種語言是人類可讀的,且易于形式化驗證,并具備可提高安全性的圖靈不完備性。
這里提到的圖靈不完備性意味著Pact無法做到圖靈完備編程語言(如Solidity或Haskell)所能做到的那些事——看起來好像是個劣勢,但其實智能合約編程,哪怕是最復雜的DeFi協議也很少會需要用到圖靈完備性。
圖靈不完備性最重要的一點是沒有無界遞歸。雖然這確實大大減少了攻擊面,但一些「經典」攻擊是無法被100%避免的,接下來我們就會講述跨函數重入的問題。
Marathon取消第四季度財報電話會議:金色財經報道,比特幣礦企Marathon Digital取消了定于周二在美國收盤后召開的第四季度財報電話會議。根據周二提交的一份文件,在收到美國證券交易委員會(SEC)關于“會計錯誤”的通知后,該礦業公司推遲了第四季度和2022年全年業績的發布。這些錯誤與數字資產的減值有關,并影響了最早可追溯到2021年的公布業績。Marathon表示,它打算更正這些錯誤并重述受影響的財務報表。備案文件稱,該公司應該將其MARA礦池的收入記錄為毛收入,而不是凈收入。
該文件稱,“據Marathon估計,由于其財務報表中收入的‘凈’與‘毛’收入列報方式不同,其截至2021年12月31日止的收入和收入成本都被低估了。因此,在完成2021年的重述后,收入、能源、托管和其他方面的收入預計將增加。”但是,文件補充說,這次重述不應對2021年或2022年的任何中期的總利潤率、營業收入或凈收入產生任何影響。[2023/3/1 12:35:16]
重入攻擊是非常常見的安全問題。這個問題不僅很難被開發者發現,也很難被審計師審查出其會導致的所有潛在后果。
英國立法委員會批準英國監管加密貨幣廣告的權力:金色財經報道,英國下議院委員會周四通過了限制加密廣告和禁止未經授權的運營商提供服務的新法律,沒有反對或進一步辯論。這項措施現已正式納入政府《金融服務和市場法案》,增加了法案委員會上周同意的措施,盡管業界擔心該措施可能會使廣告獲得批準變得更加困難。[2022/11/4 12:15:15]
重入攻擊取決于函數在進行外部調用之前和之后執行的特定任務的順序。
如果一個合約調用了一個不受信任的外部合約,攻擊者可以讓它一次又一次地重復這個函數調用,形成一個遞歸調用。而如果重新輸入的函數執行重要的任務(如更新賬戶的余額),那這可能就會導致災難性的后果。
下方是一個簡化的例子。
我們把易受攻擊的合約稱為unsafe合約,把惡意的合約稱為Attack合約。
1. 攻擊者調用unsafe合約,以將資金轉移到Attack合約中。
2. 收到調用之后,unsafe合約首先檢查攻擊者是否有資金,然后將資金轉移到Attack合約。
安全團隊:攻擊者通過AVAX閃電貸攻擊獲利約37萬USDC:9月7日消息,據CertiK預警監測,一個針對AVAX的閃電貸攻擊影響了合約0xe767c和一些LP,攻擊者獲利約37萬USDC。攻擊者可能影響的協議包括Nereus Finance、Trader Joe、Curve Finance。[2022/9/7 13:13:26]
3. 收到資金后,Attack合約執行回退函數,在它能夠更新余額之前回調到不安全的合約,從而重新啟動該過程。
因為這種攻擊是通過無界遞歸調用進行的,所以如果語言不是圖靈完備的,攻擊就不可能進行。
跨函數重入類似于經典的重入攻擊,除了重入的函數與進行外部調用的函數功能不同。這種重入攻擊通常更難被發現——因為在復雜的協議中,組合的可能性太多,無法手動測試每個可能的結果。
B站CEO陳睿:元宇宙內容生產者將成為一種職業:8月28日消息,8月27日,第三屆“上海創新創業青年50人論壇”召開。嗶哩嗶哩董事長兼CEO陳睿在本屆論壇的演講中預測,元宇宙作為綜合性產業,用戶將是其中最重要的數字內容生產者和消費者,用戶創作內容將是元宇宙的主流。陳睿認為,元宇宙和移動互聯網一樣,不是一種產品或技術,而是一個綜合產業概念,會由多種產品和技術組成。
目前,B站90%以上的內容由創作者生產,平均每月有380萬創作者上傳超1260萬個視頻。陳睿預測,元宇宙中巨量的數字內容,也都會由UP主這樣的用戶去創作,在元宇宙中創建數字內容將成為一門職業。B站將努力成為元宇宙時代的主流內容平臺,為創作者服務。[2022/8/28 12:53:27]
這就引出了我們的概念證明:使用Pact語言進行簡單的跨函數重入攻擊。
Pact模塊中的簡單跨函數重入
正如我們在下方代碼片段中看到的,合約中的函數對另一個實現特定接口的合約進行外部調用。這允許重入一個設計好的攻擊合約。Pact中的功能是內置函數,可授予用戶權限來執行敏感任務。以下代碼僅供說明之用,并非取自真實案例合約。
AmazingTeam完成一次大規模銷毀:據官方消息,ADOGE治理代幣AmazingTeam,其開發團隊被“股東信任欺詐”,現在完成了一次大規模的銷毀,總計銷毀3.3萬枚代幣,代幣總量10萬枚,價值800萬人民幣。[2022/8/2 2:54:01]
我們將使用的代碼例子包含三個部分:
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的余額。
之后,(get-balance "legit_address")返回10,(get-balance "attacker_address")返回100。
重入成功。
現在,如果我們不重入調用credit,而是嘗試重入再次調用bad_function,會發生什么?即使第一次調用credit成功,由于重入是在bad_function中,這將是一個遞歸調用且執行將會失敗。
現在,如果我們嘗試直接調用external_function,這將不起作用,因為所需的功能CREDIT沒有被授予。
通過移除無界遞歸,圖靈不完備性可以防止一些重入攻擊的載體。
然而,由于跨函數重入可以在沒有遞歸調用的情況下進行,圖靈不完備性并不能阻止所有此類攻擊載體,因此用戶在與這種語言交互時不應該假設重入不會造成惡劣影響。
重入和跨函數重入是非常常見的安全問題,Web3.0領域也因此發生了一系列規模巨大的攻擊事件。
Pact作為一種智能合約編程語言,極具潛力。
它采取的方法與其他語言如Solidity或Haskell有些不同。Pact并不完全依靠圖靈不完備性來提高安全性;該語言被設計地更容易閱讀、理解和正式驗證。
然而,沒有哪種編程語言能對所有的攻擊載體免疫。因此開發者必須了解他們所使用的語言的獨特功能,并且在部署前對所有項目進行徹底審計。
目前,CertiK的審計及端到端解決方案已覆蓋目前市面上大部分生態系統,并支持幾乎所有主流編程語言,就區塊鏈平臺、數字資產交易平臺、智能合約的安全性等領域為各個生態鏈提供安全技術支持。
CertiK中文社區
企業專欄
閱讀更多
金色財經
金色早8點
Odaily星球日報
Arcane Labs
澎湃新聞
深潮TechFlow
歐科云鏈
MarsBit
BTCStudy
鏈得得
Tags:DITREDICRECredwesendit幣gateSMARTCREDITYucreatdecred幣創始合伙人
頭條 ▌Cardano生態穩定幣Djed已上線主網1月31日消息,Cardano 首個去中心化穩定幣 Djed 已上線主網,Djed的價格與美元錨定支持.
1900/1/1 0:00:00【1.29 - 2.04】周報概要:1、上周NFT總交易額:322,289,889(美元)2、上周NFT總交易筆數:989.
1900/1/1 0:00:00摘要 Key Takeaway目前主流的鏈上數據分析工具多處于從Web2向Web3過渡的階段,未來面向DeFi的數據分析服務一定是根植于Web3原生數據特性的.
1900/1/1 0:00:00ChatGPT猶如一枚石子不經意地投入到人工智能行業平靜的水面,迅速在全球范圍內激起一波大浪。 AI翻譯、AI繪畫、AI家居……如今,人工.
1900/1/1 0:00:00▌ 1月份NFT交易量達9.46億美元,創2022年6月以來最高記錄金色財經報道,據DappRadar數據,2023年1月NFT交易量和銷售額的激增,交易量達到9.46億美元.
1900/1/1 0:00:00BTC 和 ETH 出現黃金交叉,它們的看跌趨勢開始消失一個月前,我們發布了一份報告,稱比特幣和以太坊市場觸底。此后,BTC和ETH 分別上漲了22% 和17%.
1900/1/1 0:00:00