在這篇文章中,我們將簡要地解釋重入和跨函數重入之間的區別,以及圖靈不完備性如何能夠防止一些這樣的攻擊。
其中我們將提供一個跨函數重入利用的案例,該案例中Kadena區塊鏈使用的是編程語言Pact,但圖靈不完備性并未防止該惡意利用的發生。
事件簡介
Kadena區塊鏈旨在實現比其他L1鏈更高的可擴展性、安全性和可用性。其開發了一種新的語言用以編寫智能合約:Pact。
這種語言是人類可讀的,且易于形式化驗證,并具備可提高安全性的圖靈不完備性。
這里提到的圖靈不完備性意味著Pact無法做到圖靈完備編程語言所能做到的那些事——看起來好像是個劣勢,但其實智能合約編程,哪怕是最復雜的DeFi協議也很少會需要用到圖靈完備性。
美聯儲:財政部將提供250億美元緊急貸款支持,Signature銀行已經關閉:金色財經報道,美聯儲表示,財政部將提供250億美元緊急貸款支持,美國的銀行體系仍有韌性,基礎仍然穩固。為了向美國存款機構提供流動性,每個聯邦儲備銀行將向符合條件的取款人提供預付款,某些類型的證券將作為抵押品,美聯儲將使用各種工具來支持家庭和企業。
美聯儲表示,Signature銀行已經關閉,紐約金融服務部門已經接管了Signature?Bank,硅谷銀行和Signature?Bank的所有儲戶將得到充分保護,但股東和某些無擔保債券持有人將得不到保護。紐約金融服務部門表示,他們正在與其他監管機構密切合作。美聯儲正在密切監測整個金融體系的狀況,并將酌情采取額外措施。[2023/3/13 12:59:26]
圖靈不完備性最重要的一點是沒有無界遞歸。雖然這確實大大減少了攻擊面,但一些「經典」攻擊是無法被100%避免的,接下來我們就會講述跨函數重入的問題。
美國州長候選人向SBF歸還100萬美元捐款:金色財經報道,美國前國會議員和州長候選人Beto O'Rourke向SBF歸還100萬美元捐款。O'Rourke的競選團隊聲稱他從未索要過這筆錢,并在FTX申請破產前一周退還了現金。該競選活動拒絕現金的決定是在FTX宣布破產之前做出的,這筆錢于FTX宣布破產之前在11月4日退還。(texastribune)[2022/11/30 21:10:39]
經典重入攻擊
重入攻擊是非常常見的安全問題。這個問題不僅很難被開發者發現,也很難被審計師審查出其會導致的所有潛在后果。
重入攻擊取決于函數在進行外部調用之前和之后執行的特定任務的順序。
如果一個合約調用了一個不受信任的外部合約,攻擊者可以讓它一次又一次地重復這個函數調用,形成一個遞歸調用。而如果重新輸入的函數執行重要的任務,那這可能就會導致災難性的后果。
沈波:一如既往支持區塊鏈技術驅動的去中心化的協議層創業與創新:金色財經報道,分布式資本創始人沈波在社交媒體上稱,我初心不變,一如既往支持區塊鏈技術驅動的去中心化的協議層創業與創新, 和應用層面的百花齊放并擁抱監管。堅定不移地參與創造社會價值,為行業的長期健康作貢獻。
金色財經此前報道,分布式資本沈波稱個人常用894結尾錢包共4200萬美元價值資產,其中包含3800萬枚USDC在紐約時間11月10日凌晨被盜。被盜資產為個人資金,與分布式相關基金無關。目前已當地報案,FBI與律師均已介入。[2022/11/23 8:01:24]
下方是一個簡化的例子。
我們把易受攻擊的合約稱為unsafe合約,把惡意的合約稱為Attack合約。
1.攻擊者調用unsafe合約,以將資金轉移到Attack合約中。
央行營管部:北京市開立數字人民幣個人錢包超1200萬個:金色財經報道,央行營業管理部發布《北京市金融運行報告(2022)》,其中介紹,截至2021年底,全市開立數字人民幣個人錢包超1200萬個,對公錢包超130萬個,覆蓋食、住、行、游、購、娛、醫等冬奧全場景40余萬個,交易金額近百億元。(北京商報)[2022/7/9 2:02:01]
2.收到調用之后,unsafe合約首先檢查攻擊者是否有資金,然后將資金轉移到Attack合約。
3.收到資金后,Attack合約執行回退函數,在它能夠更新余額之前回調到不安全的合約,從而重新啟動該過程。
因為這種攻擊是通過無界遞歸調用進行的,所以如果語言不是圖靈完備的,攻擊就不可能進行。
跨函數重入
跨函數重入類似于經典的重入攻擊,除了重入的函數與進行外部調用的函數功能不同。這種重入攻擊通常更難被發現——因為在復雜的協議中,組合的可能性太多,無法手動測試每個可能的結果。
這就引出了我們的概念證明:使用Pact語言進行簡單的跨函數重入攻擊。
Pact模塊中的簡單跨函數重入
正如我們在下方代碼片段中看到的,合約中的函數對另一個實現特定接口的合約進行外部調用。這允許重入一個設計好的攻擊合約。Pact中的功能是內置函數,可授予用戶權限來執行敏感任務。以下代碼僅供說明之用,并非取自真實案例合約。
我們將使用的代碼例子包含三個部分:
1.合約接口
被攻擊的模擬示例合約
首先,數據庫被定義為一個表,其中字符串存儲在具有關聯十進制數的行中。
然后定義了一個能力:CREDIT。這個條件將是credit函數所需要的,但只被with_capability語句中的bad_function內部授予。這意味著直接調用credit會失敗。
現在,函數credit被定義如下:它增加了作為輸入的字符串的余額。如果該地址不在表中,它還會創建該條目。
最后,函數bad_function增加了legit_address的余額,但也執行了對符合之前定義的接口的合約的調用,該合約可以作為一個輸入參數提供。
函數get-balance允許我們讀取該表格。
3.用于觸發重入的模塊:
之后,返回10,返回100。
重入成功。
現在,如果我們不重入調用credit,而是嘗試重入再次調用bad_function,會發生什么?即使第一次調用credit成功,由于重入是在bad_function中,這將是一個遞歸調用且執行將會失敗。
現在,如果我們嘗試直接調用external_function,這將不起作用,因為所需的功能CREDIT沒有被授予。
寫在最后
通過移除無界遞歸,圖靈不完備性可以防止一些重入攻擊的載體。
然而,由于跨函數重入可以在沒有遞歸調用的情況下進行,圖靈不完備性并不能阻止所有此類攻擊載體,因此用戶在與這種語言交互時不應該假設重入不會造成惡劣影響。
重入和跨函數重入是非常常見的安全問題,Web3.0領域也因此發生了一系列規模巨大的攻擊事件。
Pact作為一種智能合約編程語言,極具潛力。
它采取的方法與其他語言如Solidity或Haskell有些不同。Pact并不完全依靠圖靈不完備性來提高安全性;該語言被設計地更容易閱讀、理解和正式驗證。
然而,沒有哪種編程語言能對所有的攻擊載體免疫。因此開發者必須了解他們所使用的語言的獨特功能,并且在部署前對所有項目進行徹底審計。
目前,CertiK的審計及端到端解決方案已覆蓋目前市面上大部分生態系統,并支持幾乎所有主流編程語言,就區塊鏈平臺、數字資產交易平臺、智能合約的安全性等領域為各個生態鏈提供安全技術支持。
2022年10月31日,香港財政司正式發布《有關香港虛擬資產發展的政策宣言》,闡明了香港政府在虛擬資產行業和生態圈的政策立場和方針.
1900/1/1 0:00:00ForesightNews消息,加密貨幣和虛擬支付服務公司MyBigCoin創始人RandallCrater在波士頓聯邦法院因營銷和銷售欺詐性虛擬貨幣以及經營未經許可的虛擬貨幣兌換而被判處100.
1900/1/1 0:00:00回顧昨日,以太坊短線經過一波回調后日內再次沖高,價格回踩1560下方后日內最高觸及1620并兩度承壓,昨日文中我們給出的1560多單也是完美拿捏日內低點;對于目前的行情.
1900/1/1 0:00:00這是一般性公告,此處提及的產品和服務可能不適用於您所在的地區。 親愛的用戶: 雙幣投資現已上線新一批不同交割日和行使價格的雙幣投資產品,用戶可認購產品實現低買高賣.
1900/1/1 0:00:00DearKuCoinUsers,KuCoin?willtemporarilyclosetheMarginSpotIndexofMFT,STG,GHST,DEXE,BADGER,HEART.
1900/1/1 0:00:00作為全球成立時間最長和最大的加密貨幣交易所之一,Gate.io將于2月2日在加州伯克利大學舉辦宣講會,分享關于加密貨幣、區塊鏈和Web3.0領域的行業經驗、趨勢和市場見解.
1900/1/1 0:00:00