買以太坊 買以太坊
Ctrl+D 買以太坊
ads

MOV:從安全角度看 Move 語言特性與可能存在的漏洞_move幣是什么幣

Author:

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

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

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

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

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

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

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

Klaytn v1.10.2 已發布,預計于4月完成硬分叉升級:3月17日消息,Klaytn已經發布Klaytn v1.10.2,該版本包括一個硬分叉升級,所有Baobab/Crypress節點都必須在目標區塊高度前完成升級。

Baobab測試網將于區塊119145600(預計北京時間4月6日03:20)完成硬分叉,Crypress主網將于區塊119750400(預計北京時間4月17日00:01)完成硬分叉。硬分叉實現KIP-103,這是KGP-6的技術規范,將實施 TreasuryRebalance,并對相關內容進行改進、修復與維護等。[2023/3/17 13:11:12]

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

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

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

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

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

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

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

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

Paradigm為審計DAO Code4rena提供600萬美元代幣購買資金:金色財經報道,加密風投公司Paradigm正在資助Code4rena DAO,該DAO通過600萬美元的代幣購買為尋找漏洞的獨立審計人員提供激勵。

據悉,Code4rena于去年成立,致力于通過眾包任務并將人員與他們獨特的專業領域相匹配來解決困擾傳統審計模式的低效率問題。目前,DAO已經有3500名審計員(在平臺上被稱為“監督員”)參與了217次審計。Code4rena曾與OpenSea、Blur、zkSync、Aave、Trader Joe、Sushi和Chainlink等業內知名公司合作。[2023/3/17 13:09:04]

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

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

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

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

BitKeep已上線賠付申領頁面,并以站內信形式向受損用戶推送:2月6日消息,Web3多鏈錢包BitKeep昨日在電報群公告中表示,針對729 APK安裝包遭黑客劫持導致部分用戶資金被盜,BitKeep將提前墊付被盜款項,目前賠付申領頁面已正式上線。公告稱:“黑客攻擊發生在2022年12月26日03:00-06:15 (UTC+8),我們統計受影響地址和資產數據后,決定將以USDT幣種-BEP20形式發放賠付資金。”官方提醒道,賠付頁面僅以站內信的形式向受影響用戶推送。

金色財經此前報道,BitKeep錢包因APK版本劫持而被盜,被盜資金價值達800萬美元。1月19日消息,BitKeep稱2月將上線賠付入口并賠付50%資金,3月底完成剩余資金賠付。[2023/2/6 11:49:32]

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

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

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

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

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

美聯儲9月加息75個基點的概率為68%:8月8日消息,據CME“美聯儲觀察”,美聯儲到9月份加息50個基點的概率為32%,加息75個基點的概率為68%;到11月份累計加息75個基點的概率為18%,累計加息100個基點的概率為52.3%,累計加息125個基點的概率為29.7%。[2022/8/8 12:08:58]

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

2.2.1 資源

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

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

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

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

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

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

谷歌招聘Web3社區及合伙經理:金色財經報道,谷歌云發布Web3崗位,招聘Web3社區及合伙經理,需滿足以下要求:3年社區管理經驗;3年跨功能程序/項目及navigating programs技術管理經驗;多鏈/層協議經驗;多個DeFi協議(如Aave、Curve、Uniswap、Pancakeswap等)經驗。此外,工作職責要求為,幫助制定跨越整個 Web3 生態系統的多樣化和強大的開發人員社區的戰略。代表 Google Cloud 授權 Web3 開發人員并支持跨公共區塊鏈的合作伙伴。[2022/6/3 3:59:41]

2.2.3 靜態調用

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

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

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

圖源自 jolestar.eth

Solidity:

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

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

Move:

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

Solidity: 

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

在基于 MoveVM 的鏈中,代碼存儲在 Account resource 的 code module 里面。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

撰文:Beosin

來源:DeFi之道

DeFi之道

個人專欄

閱讀更多

金色早8點

金色財經

去中心化金融社區

CertiK中文社區

虎嗅科技

區塊律動BlockBeats

念青

深潮TechFlow

Odaily星球日報

騰訊研究院

Tags:MOVEMOVOINCOImove幣是什么幣MOVXkucoin30多人BitcoinFast

歐易交易所app官網下載
CPI:美林時鐘模型研究:加密貨幣當前現狀_加密貨幣

原文標題:《美林時鐘模型研究》原文作者:Huobi Research當前加密貨幣領域生態越來越豐富、參與者越來越多樣化且沉淀資金越來越多.

1900/1/1 0:00:00
API:盤點2022年最活躍的5家加密投資機構_AND

原文:《2022年最活躍的 5 家加密投資機構》 作者:wesly 縱觀整個2022年,加密投融資領域完成了從狂熱到寒冬的180度大轉彎.

1900/1/1 0:00:00
FIN:從 OFAC 及 FinCEN 看 Web3 隱私與金融監管的沖突_web4幣怎么樣

在 Web2 數字信息時代,數據安全與隱私保護已經成為我們最關注的問題之一。由于互聯網平臺的壟斷性,以及用戶對自身數據價值的模糊,造成了用戶在 Web2 時代沒有任何隱私,互聯網平臺肆意占有用戶.

1900/1/1 0:00:00
區塊鏈:孫宇晨攜手火必:區塊鏈與華人的雙向奔赴_USD

文:孟永輝 從「火幣」到「火必」,火幣進行了品牌升級。剛剛擔任火必全球顧問委員會成員的孫宇晨,同樣出席了這次品牌升級會.

1900/1/1 0:00:00
HAI:從Mt.Gox到FTX 同樣的輪回還要上演多少次?_CWEB價格

原文:Kyper創始人Loi Luu博客 編譯:Kyle 2014 年的 Mt. Gox 黑客事件是大多數人準備退出比特幣的時候,也是我開始區塊鏈之旅的時候.

1900/1/1 0:00:00
IRIS:RGB 魔法:比特幣上的客戶端合約_區塊鏈存證說法錯誤的是

原文:《RGB MAGIC: CLIENT-SIDE CONTRACTS ON BITCOIN》 編譯:btcstudy “智能合約” 這個術語的歷史比區塊鏈和比特幣還更久.

1900/1/1 0:00:00
ads