宇宙链 宇宙链
Ctrl+D收藏宇宙链
首页 > Luna > 正文

深入理解 EVM 存储机制及安全问题

作者:

时间:1900/1/1 0:00:00

前言

EVM是一个轻量级的虚拟机,其设计初衷就是提供一种可以忽略硬件、操作系统等兼容性的虚拟的执行环境供以太坊网络运行智能合约。

简单来说EVM是一个完全独立的沙盒,在EVM中运行的代码是无法访问网络、文件系统和其他进程的,以此来避免错误的代码能让智能合约毁灭或者影响外部环境。

在此基础上,知道创宇区块链安全实验室带大家一起深入理解EVM的存储机制和安全问题。

EVM存储结构

可以看到EVM存储数据分为两类:

存储在code和storage里的数据是non-volatile(不容易丢失的)

存储在stack,args,memory里数据是volatile(容易丢失的)

各个存储位置的含义

Code

code部署合约时储存data字段也就是合约内容的空间,即专门存储智能合约的二进制源码的空间

Storage

Storage是一个可以读写修改的持久存储的空间,也是每个合约持久化存储数据的地方。Storage是一个巨大的map,一共2^256个插槽(slot),每个插糟有32byte,合约中的“状态变量”会根据其具体类型分别保存到这些插槽中。

Polygon Studios CEO:Polygon将于2023年深入参与PFP和艺术领域:12月27日消息,Polygon Studios 首席执行官 Ryan Wyatt 表示:2022 年 Polygon 与 OpenSea、Magic Eden、Coinbase、Robinhood 和 Phantom 建立或扩大了合作关系,并参与了游戏、DeFi 和音乐领域。Polygon 将在 2023 年深入参与 PFP 和艺术领域。[2022/12/28 22:11:26]

Stack

stack即所谓的“运行栈",用来保存EVM指令的输入和输出数据。可以免费使用,没有gas消耗,用来保存函数的局部变量,数量被限制在16个。stack的最大深度为1024,其中每个单元是32byte。

Args

args也叫calldata,是一段只读的可寻址的保存函数调用参数的空间,与栈不同的地方的是,如果要使用calldata里面的数据,必须手动指定偏移量和读取的字节数。

Memory

Memory一个简单的字节数组,主要是在运行期间存储数据,将参数传递给内部函数。基于32byte进行寻址和扩展。

国务院办公厅卢向东:区块链等新技术与政府业务深入融合:10月12日,第三届数字中国建设峰会数字政府分论坛在福州召开。国务院办公厅电子政务办公室主任卢向东表示,党中央、国务院作出推进数字政府建设的重要决策部署,意义重大,影响深远。目前推进数字政府建设已经具备良好的支撑条件。当前,5G网络覆盖范围不断拓展,云计算统筹优化基础设施资源,物联网、大数据、人工智能、区块链等新技术与政府业务深入融合,新一代信息技术为数字政府建设提供了强有力的技术保障。(经济参考报)[2020/10/15]

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的健值数据库,存储的数据可以通过校验和来确保一致。但是其也是和智能合约语言进行交互的,当其中一些规则发生冲突很可能就被别有用心的人用来作恶,所以规范的使用智能合约语言是避开漏洞的必要条件。

标签:TORATORSTORORATorah NetworkPatientorySTORE币Coral Farm

Luna热门资讯
XT关于理财专区升级的公告

尊敬的XT用户: 为给用户提供更好的交易体验感,XT现已对理财专区进行升级维护,维护期间资金将无法查看且其他功能也将无法正常使用。待升级完成将公告通知.

1900/1/1 0:00:00
Gate.io BABYDOGE/USDT流动性矿池今日新增额外限时奖励7,451,564,828,610 BABYDOGE

此前Gate.ioBABYDOGE/USDT流动性矿池已开启自动做市商AMM模式,为鼓励更多用户积极参与,今日中午12:00,BABYDOGE/USDT流动性矿池奖励新增额外7,451,564,828.

1900/1/1 0:00:00
去中心化内容发布平台 Mirror 开放写作功能

巴比特讯,去中心化内容发布平台Mirror已向所以有以太坊地址的人开放,任何人都可以在Mirror连接自己的钱包并开始写作,接下来几周内Mirror也将继续开放经济区块,并定期发布更新体验.

1900/1/1 0:00:00
捷克贵族Lobkowicz家族将举办NFT拍卖,以筹集修复包含贝多芬手稿等文物的资金

据彭博社9月30日报道,捷克共和国一个有600年历史的波西米亚贵族家族Lobkowicz将于下月在布拉格的Lobkowicz宫拍卖一系列NFT,以筹集其艺术品收藏和祖传城堡的修复费用.

1900/1/1 0:00:00
MEXC關於上線BNX杠桿交易、持倉PoS服務及API交易功能的公告

尊敬的用戶: 為滿足用戶的多樣化交易需求,MEXC現已上線BNX杠桿交易、API交易及持倉PoS服務.

1900/1/1 0:00:00
为什么说美国比特币ETF有75%的机会在10月获得批准?

比特币ETF一直是加密领域备受关注的话题。投资机构努力争取美国证券交易委员会批准该国首个比特币ETF是一场异常艰苦的战斗.

1900/1/1 0:00:00