買以太坊 買以太坊
Ctrl+D 買以太坊
ads
首頁 > MANA > Info

MOVE:從安全角度看 Move 語言特性與可能存在的漏洞_COIN

Author:

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

圖片來源:由無界版圖AI工具生成

此前,Beosin宣布了全新升級的安全審計服務,而現在,Beosin安全團隊正式宣布推出針對Move智能合約的安全審計服務,旨在提前發現并協助項目方修復項目中的安全風險,保障用戶與項目方的資產安全。

1、基礎概念

Move語言最初是由Facebook團隊為Diem區塊鏈而設計開發的一門新語言。而Libra的使命是打造一個簡單的全球貨幣和金融基礎設施,為數十億人提供支持。Move語言旨在提供一個安全、可編程的基礎,可以在此基礎上構建這一愿景。Move必須能夠以精確、可理解和可驗證的方式表達Diem貨幣和治理規則。從長遠來看,Move必須能夠對構成金融基礎設施的各種資產和相應的業務邏輯進行編碼。

那么,如何實現這一愿景呢?在Move的白皮書中提出了設計時考慮的四個關鍵目標:first-class資產、靈活性、安全性和可驗證性。其中first-class資產是實現這一愿景的基礎。要理解first-class資產,我們先來介紹Move語言中的幾個比較重要的基礎概念。

1.1結構體

和其他很多語言一樣,Move語言中的結構體也是使用struct定義。它是自定義類型,也是Move中創建自定義類型的唯一方法。結構體可以包含復雜數據,也可以不包含任何數據,但不允許定義遞歸結構體。結構體由字段組成,可以簡單地理解成「key-value」存儲,其中key是字段的名稱,而value是存儲的內容。

1.2能力

不列顛哥倫比亞省或要求加密交易所運行監控軟件:金色財經報道,加拿大不列顛哥倫比亞省可能要求加密貨幣交易所運行新開發的監控軟件,因為監管機構正在推動對其金融活動的進一步了解。不列顛哥倫比亞省證券委員會(BCSC)與美國數字資產情報公司 Inca Digital 合作,啟動了一項試點項目,以開發一個原型,加拿大的一些平臺也將參與其中。

該委員會指出,與加密貨幣交易所相關的許多行動最終都會出現在區塊鏈上,這對證券監管機構來說是一個新的挑戰。另一方面,鏈下業務涉及交易所向客戶提供的有關其持有量的信息。[2023/7/22 15:51:27]

Move的類型系統非常靈活,每種類型都可以被四種限制符所修飾。這四種限制符我們稱之為abilities,它們的功能分別是:

Copy-被修飾的值可以被復制。

Drop-被修飾的值在作用域結束時可以被丟棄。

Key-被修飾的值可以作為鍵值對全局狀態進行訪問。

Store-被修飾的值可以被存儲到全局狀態。

而Move的基本類型缺省具有store,copy和drop限制,自定義類型缺省情況下結構體不帶任何限制符。

1.3資源

介紹完了結構體和能力,接下來就是Move語言中的核心概念:資源。

如果定義的結構體不能復制也不能丟棄,我們就將它們稱為資源。默認情況下,結構體是線性和短暫的。它們不能復制,不能丟棄,不能存儲在全局存儲中。這意味著所有值都必須擁有被轉移的所有權,并且值必須在程序執行結束時處理。我們可以通過賦予結構體能力來簡化這種行為,允許值被復制或刪除,以及存儲在全局存儲中或定義全局存儲的模式。

知情人士:Binance正探索允許機構客戶將交易抵押品存放在銀行:5月30日消息,據知情人士表示,加密貨幣交易平臺Binance正在討論一項提議,讓部分機構客戶將交易抵押品存放在銀行,而不是加密貨幣平臺,此舉可能有助于降低交易對手風險。

知情人士表示,這家全球最大的加密貨幣交易平臺已與一些專業客戶討論了一項設置,允許他們使用銀行存款作為現貨和衍生品保證金交易的抵押品。總部位于瑞士的FlowBank和總部位于列支敦士登的Frick銀行被認為是這項服務的潛在中介機構。[2023/5/31 11:49:00]

Move語言中的這個屬性對于現實世界中資源的建模非常有用,因為貨幣在理論上是不希望在流通過程中被復制或丟失的。

1.4模塊

Move語言中,代碼都是以模塊的形式進行組織的。如何理解模塊呢?抽象的理解,Move語言中的模塊/資源/方法之間的交互與傳統的面向對象語言中的類/對象/方法之間的關系非常相似。

而與其他區塊鏈語言相比,Move中的模塊類似于其他區塊鏈中的智能合約。開發者在模塊中聲明資源類型和方法,這些類型和方法定義了創建、銷毀和更新已聲明資源的規則。

1.5泛型

Move因為是靜態語言,所以為了保證擴展性,Move選擇了泛型編程的范式。

以Aptos為例,只要查看你持有的資產是0x1::coin::CoinStore?這樣的類型,就可以知道該資產是由標準模組0x1::coin所定義。比如說Aptos的原生幣AptosCoin的類型是0x1::aptos_coin::AptosCoin,意思是0x1帳號之下的aptos_coin模塊所定義的AptosCoin類型,不過這個類型并沒有賦予key能力,所以不能成為資源,他只提供一個種類,而這個類型可以作為泛型來使用,像是被0x1::coin::CoinStore使用。

分析:硅谷銀行1610億美元存款中超93%沒有保險:3月10日消息,據記者Max Reyes分析,硅谷銀行最近提交給監管機構的一份文件顯示,該行1610億美元的存款中有93%以上沒有保險。[2023/3/11 12:55:14]

那么,0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>?就是0x1帳號下coin模塊所定義的CoinStore類型,記錄地址下某種coin的資產狀態。所以你的地址下任何0x1::coin::CoinStore?的資產都通用相同邏輯、有一樣的行為,都是定義在0x1::coin這個模塊里。

2.安全性

2.1設計安全

Move在白皮書中明確表示,Move必須拒絕不滿足關鍵屬性的程序,例如Resource安全、類型安全和內存安全。我們如何選擇一個可執行的表示,以確保在區塊鏈上執行的每個程序都滿足這些屬性?兩種可能的方法是:

(a)使用帶有檢查這些屬性的編譯器的高級編程語言

(b)使用低級無類型匯編并在運行時執行這些安全檢查。

Move采取了介于這兩個極端之間的方法。Move的可執行格式是一種類型化的字節碼,它比匯編高級,但比源語言低。字節碼由字節碼驗證器在鏈上檢查Resource、類型和內存安全性,然后由字節碼解釋器直接執行。這種選擇允許Move提供通常與源語言相關的安全保證,但無需將源編譯器添加到受信任的計算庫或將編譯成本添加到交易執行的關鍵路徑中。

除此之外,Move在設計時內置了很多安全特性,例如算數溢出、默認可見性導致的權限泄露等等。

2.2底層安全

Tornado Cash團隊成員:Tornado Cash DAO已關閉:8月14日消息,Tornado Cash(TC)團隊一名成員在接受采訪時表示,Tornado Cash DAO已被關閉,因為它“無法與美國抗衡”,并且貢獻者害怕被起訴。“多重簽名已關閉DAO,防患于未然,除非一切都平靜下來。”

Tornado Cash DAO多簽錢包刪除,DAO資金已返還給治理合約。TC成員聲稱“沒有人做錯任何事”,關閉DAO是“為了保護成員的安全,以避免法律問題”,因為這種情況“對所有開發人員來說都是危險的”,即使是Tornado Cash生態系統之外的開發人員也是如此。

TC成員還表示,他們認為Tornado Cash聯合創始人Roman Storm“幾天前”在荷蘭尋找律師,“肯定是為了Alexey”。TC成員在其被捕前得知的信息表明,Alexey可能已經知道即將發生的事情。

據此前報道,被荷蘭當局逮捕的男子被證實是Tornado Cash開發者Alexey Pertsev。(Cryptoslate)[2022/8/14 12:24:15]

2.2.1資源

在現實社會中,資產有兩個屬性難以用數字表示:

1)稀缺性。必須控制系統中資產發行的數量。必須禁止復制現有資產,而創建新資產是一項特權操作。

2)訪問控制。系統參與者必須能夠使用訪問控制策略保護資產。

因此,Move引入了資源來表示資產。而在區塊鏈應用中,代幣就是一種資源,資源必須要存儲在賬戶下面,且在交易過程中,資產必須要流向一個地方,要么轉移到另一個地址,要么被銷毀,代幣不可被復制或被使用多次或被「懸掛」。此處可以把資源的操作類比成c++中的唯一指針。

a16z:加密仍處于早期階段,相當于互聯網的1995年:5月17日消息,a16z發布2022年加密貨幣概括報告。該報告指出,加密貨幣正處于第四個價格創新(price-innovation)周期之中,加密貨幣的價格可能會不穩定,但對于創業者來說,Web3仍然比Web2好。

2021年,Web3為創作者帶來的人均收益達到174,000美元,遠超Web2平臺(例如Spotify:636美元/藝術家,YouTube:2.47美元/頻道。)

DeFi也提升了金融的包容性。以太坊仍在Web3上占據主導地位,但競爭對手正在增多,包括Solana、Polygon、BNBChain、Avalanche和Fantom等區塊鏈的開發人員正在尋求復制以太坊的成功。

該報告總結部分表示,加密仍處于早期階段,a16z估計目前以太坊擁有700萬到5000萬的活躍用戶,相當于互聯網的1995年。[2022/5/17 3:22:41]

2.2.2先字節驗證,后合約執行

Move在設計時就設計為一種可執行的字節碼語言,其具有內置的安全算法和字節碼驗證器,可以防止許多常見錯誤。即Move中的合約代碼要能被執行,必須先被驗證,這使得合約可以免受編譯器的潛在故障和可能遭遇到的攻擊。Kre?imirKlas在其《SmartContractDevelopment—Movevs.Rust》中表示:「Move?的顯著特征是可執行的字節碼表示,為所有程序提供了資源安全保證。考慮到合約的開放部署模型,這一點至關重要——回想一下,任何合約都必須容忍與不可信代碼進行任意交互。如果源碼級線性可以被可執行級別上不受信任的代碼違反,那么其價值就很有限。」

2.2.3靜態調用

在區塊鏈中,合約的調用方式可以分為靜態調用和動態調用。若程序調用必須在運行時才能確定被調用的目標,則稱該調用為動態調用;反之,在運行前即可確定被調用目標,且在運行時無法變更該目標,則稱該調用為靜態調用。

Move采用靜態調用方式。即Move實現的合約在部署時,其執行邏輯已經被確定。那么我們可以通過靜態分析字節碼,得到合約所有可能路徑上操作的狀態,在區塊瀏覽器或錢包里提示給用戶。

因此,錢包提供商可以在錢包設計中,在預執行合約時把合約執行后的狀態變更提示給用戶,讓用戶可以知道這個交易操作了自己的哪些重要資產,以及執行后的結果。如下圖,在StarMask中的實現效果:

圖源自jolestar.eth

3.Move與Solidity的比較

3.1賬戶模型

Solidity:

在大多數以太坊ERC-20合約中,每個地址的余額都存儲在一個類型的狀態變量mapping(address=>uint256)中,該狀態變量存儲在特定智能合約的全局存儲中。其結構如下圖所示:

圖源:https://github.com/move-language/move/tree/main/language/documentation/tutorial

Move:

Move中,類比solidity智能合約的模塊瑟吉歐沒有自己存儲空間的。相反,Move的「全局存儲」是由地址索引的,每個地址下存儲了Move模塊和Move資源,而資源存儲是類型到值的映射。其結構如下圖所示:

圖源:https://github.com/move-language/move/tree/main/language/documentation/tutorial

3.2代碼存儲

Solidity:?

在基于EVM的鏈中,所有智能合約都有一個獨特的地址,稱為「合約擁有地址」。合約賬戶與部署者賬戶存在于在同一級別,代碼hash存儲在合約賬戶地址中,合約部署后不與部署者地址綁定。

Move:

在基于MoveVM的鏈中,代碼存儲在Accountresource的codemodule里面。

3.3安全隔離

Solidity:

智能合約的運行環境是鏈的節點給構造出的沙箱環境,多個合約程序是運行在同一個進程內的不同的虛擬機沙箱。智能合約之間的調用是同一個進程內不同的智能合約虛擬機之間的調用,安全完全依賴于智能合約虛擬機之間的隔離。

Move:

Move的做法則是通過MoveVM讓采用Move語言的區塊鏈具備確定性,將合約調用放在同一個虛擬機沙盒中,通過編程語言內部的安全性對智能合約的狀態進行隔離,而非依賴虛擬機進行隔離。

3.4合約升級

Solidity:

EVM中合約升級的方法是將合約數據和邏輯分析:代理合約負責轉發交易到邏輯合約,并保存合約數據;邏輯合約負責實現功能邏輯。升級時,只需要重新部署新版本的邏輯合約,并將代理合約中的邏輯合約實例指向新版本邏輯合約實例即可。此時,邏輯合約升級并不會影響合約原來已有的數據。?

如下圖,代碼存儲字段指定的是代理能合約被調用時做delegatecall的合約代碼,合約升級本質上是部署一個新的邏輯合約,并改變code字段以重定向delegatecall。

Move:

Move語言中對于合約升級,其實現是在系統模塊code.move中執行升級邏輯,在代碼部署前檢查升級策略和兼容性。在兼容性檢查后,寫在resource中的代碼通過一個原生函數調用被替換,并將執行新的邏輯。

圖片截取自:https://github.com/aptos-labs/aptos-core/blob/main/aptos-move/framework/aptos-framework/sources/code.move#L132

4.Move程序可能出現的漏洞點

1)開發者在使用Aptos、Sui,或者其他基于Move的blockchain中獨特的Framework進行開發時,應保持一定程度的安全意識,確保供應鏈安全。

2)函數權限問題。對于一些函數調用的權限要仔細劃分,因為一些關鍵函數會涉及到治理,嚴重的會影響到資金安全,針對這種函數調用需要對調用者進行鑒權。

3)業務邏輯在設計和代碼實現時,均需注意其中的邏輯問題。

4)關于Move系項目,在模塊升級時需要注意的點:

根據合約升級政策,代碼的所有者對升級權限有完全的控制權。

代碼的owner在初始部署后是不可改變的。

部署者的地址在部署后永遠擁有升級權限。

原文標題:《Beosin|正式推出針對Move智能合約的安全審計服務,從安全角度看Move語言》

撰文:Beosin

來源:DeFi之道

Tags:MOVMOVECOINCOIMOVONmove幣是什么幣apecoin幣作為貨幣總量固定Bitcoin BEP2

MANA
比特幣:金色早報 | NEAR基金會發布透明度報告_區塊鏈通俗易懂的例子有哪些

頭條 ▌NEAR基金會發布透明度報告:每年5%的通脹率中的90%將發送給驗證者以作為質押獎勵支付金色財經報道,NEAR基金會發布透明度報告。報告稱,在創世時,NEAR區塊鏈有十億個代幣.

1900/1/1 0:00:00
NFT:金色Web3.0日報 | 數字藏品綜合價值周指數保持平穩_COI

DeFi數據 1、DeFi代幣總市值:396.9億美元 DeFi總市值及前十代幣數據來源:coingecko2、過去24小時去中心化交易所的交易量25.

1900/1/1 0:00:00
NFT:在Web3世界暢游的10條安全建議_METAWEB3PA幣

原文:《十點建議,助你在Web3安全摸索》如果你初來乍到Web3的世界,你要學習的第一件事是:保持懷疑,保持敬畏,保持求知欲;路途自由美好,但路邊也險象環生.

1900/1/1 0:00:00
REA:機構預測未來5年AR設備出貨量將達6000萬臺 當前AR市場究竟發展如何?_REAL

在經歷了2015年-2016年的產業泡沫之后,AR/VR借助火熱的元宇宙概念,又重新出現在了大眾視野中.

1900/1/1 0:00:00
X2Y2:再次征收NFT版稅 零版稅先鋒X2Y2向Opensea低頭_ENS

上周,NFT市場針對版稅問題的立場又迎來一個新變化——最早放棄征收NFT版稅轉向“自定義”版稅的NFT市場?X2Y2?又更改了選擇,宣布將強制執行所有藏品的版稅,以獲得更統一、更流暢的用戶體驗.

1900/1/1 0:00:00
EDA:金色晨訊 | 12月7日隔夜重要動態一覽_MED

21:00-7:00關鍵詞:Tether、沃倫、Grayscale、TerraformLabs、zhusu1.民主黨參議員沃倫:正在起草一項全面的加密貨幣法案;2.

1900/1/1 0:00:00
ads