比特幣價格 比特幣價格
Ctrl+D 比特幣價格
ads
首頁 > FTT > Info

MOV:新加坡安全公司Numen發現Aptos公鏈首個高危0day漏洞_MOVE

Author:

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

1.前言

相對于ethereum的soldity語言,move語言最近越來越火,而且由于其自身相對于soldity的強大優勢,越來越受到重視。其中move語言被用于很多明星項目,比如Aptos,sui。近期我們的Web3安全漏洞檢測產品發現了一個整數溢出的漏洞。可以導致Aptos節點崩潰,造成拒絕服務。本文通過對該漏洞的介紹,希望大家對move語言以及其安全性有更多的認識和理解。作為move語言安全性研究的領導者,我們會持續關注move語言的安全性,為move的生態安全做出我們的貢獻。?

2.Move語言的重要概念

模塊和腳本?

Move有兩種不同類型的程序:模塊和腳本。模塊是定義結構類型以及對這些類型進行操作的函數的庫。結構類型定義了Move的全局存儲的模式,模塊函數定義了更新存儲的規則。模塊本身也存儲在全局存儲中。腳本是可執行文件的入口點,類似于傳統語言中的主函數main。腳本通常調用已發布模塊的函數來更新全局存儲。腳本是臨時代碼片段,不會發布在全局存儲中。一個Move源文件可能包含多個模塊和腳本。然而,發布模塊或執行腳本都是獨立的虛擬機操作。?

對于熟悉操作系統的人來說,move的module就類似系統的可執行文件運行的時候加載的動態庫模塊,而script類似主程序。用戶可以通過自己編寫script,來訪問全局存儲,包括調用module模塊的代碼。?

全局存儲?

Move程序的目的是讀取和寫入樹形的持久全局存儲。程序不能訪問文件系統、網絡或任何此樹以外的數據。?

在偽代碼中,全局存儲看起來像:?

SIX和SBI創立的數字資產合資企業AsiaNext獲得新加坡臨時牌照:金色財經報道,新加坡金融管理局(MAS)授予AsiaNext臨時資本市場服務牌照。這家數字資產初創公司是瑞士證券交易所SIX和日本SBI Digital Asset Holdings的合資企業。[2023/6/22 21:54:39]

從結構上講,全局存儲是一個森林,這個森林由以賬戶地址為根的樹組成。每個地址可以存儲資源數據和模塊代碼。如上面的偽代碼所示,每個地址最多可以存儲一個給定類型的資源值,最多可以存儲一個給定名稱的模塊。??

MOVE虛擬機原理?

movevm與evm虛擬機都一樣,需要將源碼編譯成字節碼,然后在虛擬機中執行,下圖是整體的流程:?

1.將字節碼通過函數execute_script被加載進來?

2.執行load_script函數,這個函數主要用來反序列化字節碼,并校驗字節碼是否合法,如果校驗失敗,就會返回失敗?

3.校驗成功之后就會開始執行真正的字節碼代碼?

4.執行字節碼,訪問或修改全局存儲的狀態,包括資源,modules?

注:move語言還有很多特性,這里我們就不一一介紹,后續我們會從安全性角度繼續分析move語言的特性。?

新加坡政府本周將面臨議會對FTX后果的質詢,包括淡馬錫對FTX投資的盡職調查:11月28日消息,新加坡總理李顯龍和新加坡副總理Lawrence Wong本周將面臨大量議會質詢,問題涉及散戶投資者造成的損失,以及國有投資機構淡馬錫控股的盡職調查。淡馬錫前首席執行官Ho Ching周末在Facebook上發帖稱:“一家沒有成人監管、管理不善的公司,如果虧損,那將是我們臉上的恥辱。”她為淡馬錫的整體戰略進行了辯護,稱“淡馬錫的一些最佳投資是通過反向投資完成的。”淡馬錫網站上的一個解釋頁面已更新,稱對FTX進行了多輪盡職調查,淡馬錫“詢問了Alameda和FTX之間的關系、優惠待遇和分離情況,并得到了具有合同約束力的適當確認。”

此前11月17日消息,淡馬錫表示,減記對FTX 2.75億美元全部投資,在加密貨幣方面沒有直接敞口。(彭博社)[2022/11/28 21:07:07]

3.漏洞描述

本漏洞主要設計驗證模塊,在講具體漏洞之前先介紹下驗證模塊的功能以及StackUsageVerifier::verify。?

驗證模塊?

通過前面,我們知道在真正執行字節碼代碼之前,會有驗證字節碼的環節,而驗證環節有可以細分為好多子過程,?

分別是:?

BoundsChecker,邊界檢查,主要是用來檢查module與script的邊界安全。具體包括檢查signature,constants等的邊界?

DuplicationChecker,該模塊實現了一個檢查器,用于驗證CompiledModule中的每個向量是否包含不同的值?

Klaytn承諾在四年內投入2000萬美元支持韓國科學技術研究院和新加坡國立大學的區塊鏈研發:8月9日消息,韓國區塊鏈平臺 Klaytn 承諾在四年內投入 2000 萬美元來支持韓國科學技術研究院(KAIST)和新加坡國立大學 (NUS) 的區塊鏈開發和資助。該計劃的日常運營將由 KAIST 和新加坡國立大學研究人員領導的全球團隊負責,研究將以開源方式運作,研究內容將作為研究論文或開源軟件公開披露。(CoinDesk)[2022/8/9 12:12:50]

SignatureChecker,用于檢查signature被用于函數參數,本地變量,結構體成員時,字段結構正確?

InstructionConsistency,驗證指令一致性?

constants用于驗證常量,常量的類型必須是原始類型,常量的數據正確的序列化為其類型?

CodeUnitVerifier,驗證函數體代碼的正確性,分別通過stack_usage_verifier.rs與abstract_interpreter.rs來達到目的?

script_signature,用于驗證一個腳本或入口函數是否是一個有效的簽名?

該漏洞發生在verify環節CodeUnitVerifier::verify_script(config,script)?;函數中。可以看這里有許多的verify子流程。?

新加坡區塊鏈協會與戴姆勒東南亞合作推出Acentrik:金色財經報道,新加坡區塊鏈協會 (BAS) 和戴姆勒東南亞宣布通過簽署諒解備忘錄 (MOU) 建立戰略合作伙伴關系,以啟動戴姆勒東南亞的戰略計劃 Acentrik,以解鎖數據在企業中的潛力,并在B2B環境中實現基于代幣的貨幣化。

通過這一戰略合作伙伴關系,Acentrik和BAS將在相關的區塊鏈計劃上進行合作,以與BAS社區內的現有和潛在企業合作。雙方還將努力推動企業在跨行業層面采用基于區塊鏈的數據市場,為企業和行業的增長和轉型做出貢獻。戴姆勒東南亞新興技術總經理Srikanth Kaja稱,我們很高興能成為BAS的官方合作伙伴,在社區內推動區塊鏈的話題。在Web3.0應用程序和NFT領域,公司內部的采用率在全球范圍內呈上升趨勢。[2022/7/20 2:25:53]

分別是stack安全校驗,類型安全校驗名,本地變量安全性校驗,以及引用安全校驗。而漏洞產生的地方就在棧安全校驗過程中。?

棧安全校驗(StackUsageVerifier::verify)?

該模塊用于驗證函數的字節碼指令序列中的基本塊是否以平衡的方式使用。每個基本塊除了那些以Ret操作碼結尾的,必須確保離開block時候棧高度與開頭時候相同。此外,對于任何基本塊的塊,棧高度不得低于開始時的棧高度。?

循環校驗所有代碼塊是否滿足以上條件:??

即循環遍歷驗證所有基本塊的合法性。?

新加坡金融管理局:15家公司入圍構建新加坡央行數字貨幣項目,最終將挑選3家:金色財經報道,據新加坡金融管理局(MAS)發布公告顯示,有15家公司入圍新加坡零售央行數字貨幣項目,最終將選出三位獲勝者來構建該項目,參與者包括來自美國的四家公司和來自新加坡的六家公司,另外巴巴多斯、法國、瑞士、澳大利亞和德國各有一家公司,具體為:

1、Criteo(法國)、Bitt(巴巴多斯)和 Soramitsu(瑞士),以及ANZ Banking Group Limited(澳大利亞)和 Giesecke+Devrient Advance52 GmbH(德國);

2、入圍的美國公司包括 Consensys、cLabs Inc.、IBM 和 Extolabs LLC;

3、新加坡本地入圍的財團是 IOG Singapore Pte Ltd、Citibank N.A.、渣打銀行和 IDEMIA、以及HSBC Bank Limited and HSBC Holdings Plc和 Xfers Pte Ltd。[2021/9/6 23:02:52]

漏洞詳情?

前面已經介紹過,由于movevm是棧虛擬機,在驗證指令合法性的時候,很顯然,第一需要確保指令字節碼是否正確,第二需要確保棧空間經過一個block代碼塊調用之后,棧內存合法,即棧操作之后,棧保持平衡。verify_block函數正是用來完成第二個目的的。?

從verify_block代碼中我們可以看到,for循環會循環解析block代碼塊中的所有指令,然后通過對num_pops,num_pushes加減操作來驗證指令塊的對棧的影響是否合法,首先通過對stack_size_increment<num_pops來判斷棧空間是否合法,如果num_pops大于stack_size_increment就說明字節碼pop的數目大于棧本身的大小,就返回錯誤,字節碼校驗失敗。然后通過stack_size_increment-=num_pops;stack_size_increment+=num_pushes;這兩條指令來修改每個指令執行之后對棧的高度的影響,最后當循環結束之后,stack_size_increment需要等于0,即保持本block內的操作之后,需要保持棧的平衡。?

看起來這里似乎沒什么問題,但是由于這里在執行16行代碼的時候,沒有去判斷是否存在整數溢出,導致可以通過構造超大num_pushes,間接控制stack_size_increment,從而產生整數溢出漏洞。那么如何構造構造這樣一個巨大的push數目呢?這里首先需要介紹一下movebytecode文件格式。?

movebytecode文件格式?

如同WindowsPE文件,或者linuxELF文件,move的字節碼文件以.mv為結尾,文件本身也是有一定的格式的,總的來說movebytecode文件格式如圖所示:?

首先是macgic,值為A11CEB0B,接下來是版本信息,以及table的數目,之后是tablesheaders,這里可以有很多個tables,tablekinds就是table的類型,總共有0x10種,更多詳細信息可以去看move語言文檔,接下來是table的偏移,以及table的長度。之后就是table的contents了,最后是SpecificData,有兩種,對于module來說就是ModuleSpecificData,對于script類型來說就是ScriptSpecificData。?

構造的惡意文件格式?

這里我們與aptos交互的時候,是以script來完成的,所以我們構造了下圖所示的文件格式,就可以造成stack_size_increment溢出:?

首先來解釋一下這個字節碼文件的格式:?

+0x00-0x03:是macgicword0xA11CEB0B?

+0x04-0x7:文件格式版本,這里為版本4?

+0x8-0x8:為tablecount這里為1?

+0x9-0x9:為tablekind這里是SIGNATURES類型?

+0xa-0xa:為tableoffset,這里為0?

+0xb-0xb:為tablelength,這里為0x10?

+0xc-0x18:為SIGNATURESToken數據?

從0x22開始為scrip的mian函數code代碼部分?

通過move-disassembler工具,我們可以看到指令的反匯編代碼如下:?

其中0,1,2三條指令對應的代碼就是紅框,綠框,黃框的數據。?

LdU64與漏洞本身無關,我們這里就不做過多解釋,感興趣的可以自行查看代碼。這里重點解釋下VecUnpack指令,VecUnpack的作用就是在代碼中碰到vector對象的時候,需要將數據全部push到棧上。?

在構造的這個文件中,我們構造了兩次VecUnpack,其vector的num分別是3315214543476364830,18394158839224997406,?

當執行函數instruction_effect的時候,實際上執行的是下面第二行代碼:?

執行完instruction_effect函數第一次返回(1,3315214543476364830),此時stack_size_increment為0,num_pops為1,num_pushes為3315214543476364830,執行第二次返回(1,18394158839224997406)。當再次執行stack_size_increment+=num_pushes;?

stack_size_increment已經為0x2e020210021e161d(3315214543476364829),?

num_pushes為0xff452e02021e161e(18394158839224997406),當兩者相加之后,大于u64的最大值,產生了數據截斷,stack_size_increment的值成為了0x12d473012043c2c3b,造成了整數溢出,從而造成了aptos節點崩潰,進而導致節點運行停止的嚴重影響(由于rust語言的安全特性,并不會向c/c++那樣造成更進一步的代碼安全影響)。?

4.漏洞影響

本漏洞由于是發生在movevm執行模塊,所以對于鏈上節點,只要執行該字節碼代碼,就會造成DoS攻擊,嚴重的情況下,可以使得aptos網絡完全停止運行,會對其生態造成難以估量的影響,以及對節點的穩定性產生嚴重影響。?

5.官方修復

當我們發現這個漏洞之后,第一時間報告給了官方,官方也很快修復了漏洞:?

官方的修復也很簡單,就是對stack_size_increment的加減分別做了溢出檢測。如果有溢出就直接返回異常。?

Tags:MOVMOVEACKSTAMovingOn FinanceMOVEZSTACK價格STARLINKDOGE價格

FTT
以太坊:以太坊合并對Web3的發展有何意義?_WEB3

以太坊的合并是以太坊協議短暫歷史中最重大的變化,同時也對整個加密世界,尤其是web3有著重要影響。因為合并致力于解決一些先前對公鏈的批評,例如為什么人們不能在日常生活中廣泛使用區塊鏈技術.

1900/1/1 0:00:00
DEX:熊市中 DEX、借貸、資管哪種商業模式更佳?_DEF

撰文:Bankless分析師BenGiove在牛市帶來的流動性激增期間,TVL是投資者衡量協議成功與否及其使用情況的首選指標.

1900/1/1 0:00:00
加密貨幣:解讀300頁白宮的加密行業報告_數字資產是未來最大的資產

為回復總統拜登的行政命令,白宮發布了一系列有關加密行業的報告,由不同部門編輯。我通讀了300頁的所有報告,所以讀者們不用再做同樣的工作.

1900/1/1 0:00:00
USD:觀察:穩定幣王者之戰——Tether、Circle和Binance_SDC

文/Forgiven,原發作者推特1、美元穩定幣發行量約在1500億美元,800億美元購買短期美國國債.

1900/1/1 0:00:00
ARM:13款涉虛擬貨幣交易APP被下架_Monster Galaxy

10月9日消息,朝陽法院于今年3月向中國人民銀行、北京市地方金融監督管理局反饋案件審理中發現的相關線索,并發送了清理虛擬貨幣交易平臺的司法建議.

1900/1/1 0:00:00
DEFI:DeFi 理論:貸款與借款_EFI

銀行會怎樣? 親愛的讀者: 我們的上一份報告提出了一個涵蓋5個深度主題的觀點,指出在未來幾年內DeFi產品和服務的廣泛采用。本周我們將把重點放在DeFi借/貸這一部分.

1900/1/1 0:00:00
ads