前言
EVM是一個輕量級的虛擬機,其設計初衷就是提供一種可以忽略硬件、操作系統等兼容性的虛擬的執行環境供以太坊網絡運行智能合約。
簡單來說EVM是一個完全獨立的沙盒,在EVM中運行的代碼是無法訪問網絡、文件系統和其他進程的,以此來避免錯誤的代碼能讓智能合約毀滅或者影響外部環境。
在此基礎上,知道創宇區塊鏈安全實驗室帶大家一起深入理解EVM的存儲機制和安全問題。
EVM存儲結構
可以看到EVM存儲數據分為兩類:
存儲在code和storage里的數據是non-volatile(不容易丟失的)
FTC因隱私和安全問題對推特進行更深入審查:金色財經報道,據知情人士透露,在埃隆·馬斯克收購推特后,美國聯邦貿易委員會(FTC)對該公司的隱私和數據安全做法進行更深入的調查。FTC律師在上個月詢問了兩名推特前高管——前首席隱私官Damien Kieran和首席網絡安全官Lea Kissner。這次調查標志著FTC至少第三次就其隱私和數據安全做法對推特進行審查,審查可能導致數百萬美元的罰款,以及FTC對馬斯克本人施加義務的新命令,這些義務將適用于其所有公司,即使他卸任CEO或離開推特也仍然有效。(金十)[2022/12/21 21:57:32]
存儲在stack,args,memory里數據是volatile(容易丟失的)
SBF:尚未對競標Celsius的可能性進行深入研究:10月12日消息,在 DC 金融科技周上,SBF 表示,我們可能會或可能不會最終參與 Celsius 的破產事件,但我認為我們已經做出了目前會采取的大部分舉措,Celsius 仍處于排他期,該公司可能會提出自己的重組計劃,一旦失效將面臨拍賣。此前有消息稱,SBF 對參與 Celsius 競拍感興趣。(The Block)[2022/10/12 10:32:01]
各個存儲位置的含義
Code
code部署合約時儲存data字段也就是合約內容的空間,即專門存儲智能合約的二進制源碼的空間
廣州市市長郭永航帶隊深入調研“元宇宙”產業發展:金色財經報道,智度股份(000676)官微消息,3月2日上午,廣州市市委副書記、市長郭永航帶領市政府領導班子一行考察智度股份與國光電器(002045),深入一線調研“元宇宙”產業發展情況,并就企業在“元宇宙”領域的技術、人才、市場以及創新等方面情況進行了充分交流。(同花順)[2022/3/3 13:35:08]
Storage
Storage是一個可以讀寫修改的持久存儲的空間,也是每個合約持久化存儲數據的地方。Storage是一個巨大的map,一共2^256個插槽(slot),每個插糟有32byte,合約中的“狀態變量”會根據其具體類型分別保存到這些插槽中。
重慶市與華為簽署協議 在區塊鏈等領域展開深入合作:4月29日,重慶市政府與華為技術有限公司簽署全面深化戰略合作框架協議。華為將深度參與重慶數字經濟建設,重點支持重慶新一代人工智能創新發展,共同打造重慶市(兩江新區)未來智能汽車科技城,重點建設智能超算中心,共建5G工業領域聯合實驗室,在數據中心、物聯網、區塊鏈、工業互聯網、新型智慧城市、智慧水利、智能終端、5G、智慧園區、機器視覺、人才培養等領域展開全面深入合作。(證券時報)[2020/4/30]
Stack
stack即所謂的“運行棧",用來保存EVM指令的輸入和輸出數據。可以免費使用,沒有gas消耗,用來保存函數的局部變量,數量被限制在16個。stack的最大深度為1024,其中每個單元是32byte。
Args
args也叫calldata,是一段只讀的可尋址的保存函數調用參數的空間,與棧不同的地方的是,如果要使用calldata里面的數據,必須手動指定偏移量和讀取的字節數。
Memory
Memory一個簡單的字節數組,主要是在運行期間存儲數據,將參數傳遞給內部函數。基于32byte進行尋址和擴展。
EVM數據存儲概述
前面已經說過Storage是每個合約持久化存儲數據的地方其儲存數據的方式是通過插槽來實現的,現在就具體介紹它是怎么實現的:
狀態變量
1.對于大小在32字節以內的變量(常量),以其定義的順序作為它的索引值來存儲。即第一個變量的索引為key(0),第二個變量的索引為key(1)...
2.對于連續較小的值,可能被優化存儲在同一個位置,比如:合約中前四個狀態變量都是uint64類型的,則四個狀態變量的值會被打包成一個32字節的值存儲在0位置。
未優化:
pragmasolidity^0
??functionm()?externalreturns(uint256,uint256){????Infostorageinfo;????info
??functiontest(bytes32_name,address?_mappedAddress)public{????Personperson;????person.name=_name;????person.mappedAddress=_mappedAddress;????require(unlocked);?}}
漏洞合約分析:
可以看到該合約在函數部分創建新的結構體時沒有進行初始化,由此我們可以利用該函數進行對owner的修改。不過使用該函數我們還要通過require驗證,不過這也不難因為狀態變量unlocked也同樣在我們可控的范圍內。
具體操作:
調用test函數分別傳入向_name傳入:0x0000000000000000000000000000000000000000000000000000000000000001(真值)
_mappedAddress傳入:0xfB89eCb0188cb83c220aADDa1468C1635208e821(個人地址)
傳參前:
傳參后:
可以看到已經成功更改了地址。
總結
可以看到EVM的存儲器就是一個key=>value的健值數據庫,存儲的數據可以通過校驗和來確保一致。但是其也是和智能合約語言進行交互的,當其中一些規則發生沖突很可能就被別有用心的人用來作惡,所以規范的使用智能合約語言是避開漏洞的必要條件。
自JAT上線以來,全球用戶、礦工以及生態合作伙伴規模迅速并持續增大,主鏈網絡全面升級勢在必行。為更好支持JAT全球用戶和JAT于全球的落地應用發展,全球區塊鏈公鏈網絡JAT(JumboAdver.
1900/1/1 0:00:00尊敬的XT用戶: 因DCR、DEL錢包維護,XT.COM現已暫停DCR、DEL充提業務。給您帶來的不便,請您諒解!感謝您對XT.COM的支持與信任.
1900/1/1 0:00:00吳說作者|談叔 本期編輯|ColinWuCoinbase收到來自SEC的“宣戰”本月,Coinbase的CEO和聯合創始人BranArmstrong發了一系列的推.
1900/1/1 0:00:00又到了每月安全盤點時刻!鏈必安-區塊鏈安全態勢感知平臺輿情監測顯示,2021年9月,各類安全事件仍然頻發,成都鏈安科技統計9月發生較典型安全事件超『29』起.
1900/1/1 0:00:00Browsers3000是由ProtocolLabs舉辦的為期五周的黑客松活動,專注于為Web3瀏覽器的未來構建去中心化解決方案。下面是開發ION團隊成員DanielBuchner的演講摘要.
1900/1/1 0:00:00前言 在以太坊上,我們可以通過部署智能合約來實現我們需要的功能,合約代碼中我們往往需要定義一些變量,這就涉及到了智能合約變量的存儲機制.
1900/1/1 0:00:00