火星链 火星链
Ctrl+D收藏火星链
首页 > 区块链 > 正文

区块链:深入理解 EVM 存储机制及安全问题

作者:

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

前言

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

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

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

EVM存储结构

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

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

Bondly获OKEx Blockdream Ventrues投资 双方将深入探索NFT领域:据官方消息,Bondly已获OKEx Blockdream Ventrues(OKEx BDV)投资,双方将深入探索NFT领域,为NFT优质区块链项目发展提供服务和资源支持。一方面,Bondly将通过NFT形式为OKEx BDV合作的优质项目提供LaunchPad服务;另一方面,双方共同把优秀品牌带到Bprotect,也将以NFT创新形式与OKExChain生态资产进行品牌合作。

Bondly是一种可互操作、透明、便捷的资产兑换协议,旨在彻底改变传统的资产托管方法,并使每个艺术创作人都能进入自己的数字市场,旗下产品包括BSwap(NFT发售平台)、Bondly LaunchPad(IDO平台)、BProtect(NFT交易平台)。OKEx BDV初始资金1 亿美金,致力于发现和投资最前沿的产品技术创新类区块链项目,投资方向包括基础设施、交易及金融项目、公链生态类项目、应用类流量入口等。[2021/5/6 21:28:39]

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

吉林省法院部署2020年工作:要深入推进区块链技术创新应用:2月28日,吉林省法院召开网络安全和信息化领导小组2020年第一次会议,听取2019年全省法院网络安全和信息化建设情况汇报,研究部署2020年工作。会议要求,要以重点任务为抓手,全面加快智慧法院建设工作。深入推进区块链技术创新应用,全面加快业务场景的创新应用研发。(新浪网)[2020/2/29]

各个存储位置的含义

Code

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

Storage

动态 | 中国联通将深入开展区块链等前瞻安全技术研究:据通信世界网消息,中国联通网研院副院长朱常波表示,中国联通高度重视网络安全能力建设,提出了‘全方位、高智能、重演进、大生态’的网络安全总体发展战略。其中,高智能是指要充分利用大数据、人工智能等创新技术,建设全面感知、精准处置的决策响应中枢,实施积极主动的防御模式;重演进是指提前布局5G、 SDN等新型网络架构安全研究,深入开展量子加密、区块链等前瞻安全技术研究,积极探索自主可控的创新技术,重构未来网络的安全能力。[2018/12/18]

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

中国科技大学原党委书记郭传杰:要促进区块链等技术在教育领域的深入应用:5月30日,第四届“互联网+教育”创新周在北京闭幕。中国科技大学原党委书记郭传杰表示,要促进人工智能、云计算、大数据、区块链、物联网等技术在基础教育研究领域的深入应用,提升互联网和教育的深度融合及创新。[2018/6/2]

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

标签:区块链NFTDRESTO区块链dapp开发框架apenft币近期的前景DreamTeamHillstone Finance

区块链热门资讯
TPS:AOFEX關於開啟BEP20(BSC)-USDT和HRC20(HECO)-USDT充提業務的公告

尊敬的用戶:AOFEX現已開啟BEP20(BSC)-USDT和HRC20(HECO)-USDT充值和提幣業務.

1900/1/1 0:00:00
RAN:币安上市SuperRare(RARE)

亲爱的用户:币安将于2021年10月11日14:00上线SuperRare,并开通RARE/BTC、RARE/BNB、RARE/BUSD、RARE/USDT交易对.

1900/1/1 0:00:00
Mdex:ZBG关于上线GLC/QC交易对的公告

公告编号2021100802各位关心ZBG的投资者们和项目方:ZBG将于HKT2021年10月8日15:00开放GLC/QC交易对,感谢您的支持!风险提示:加密货币资产是创新的投资产品.

1900/1/1 0:00:00
SDT:AOFEX第24期新項目上線銷毀24,038 OT

尊敬的用戶:AOFEX於2021年10月10日上線GDRT,按AOFEX新項目上線計畫對OT進行銷毀。截至目前,AOFEX已累計銷毀9,129,842OT.

1900/1/1 0:00:00
TMA:BitMart上线 Star Atlas (ATLAS)

亲爱的BitMart用户:BitMart将于2021年10月6日上线代币StarAtlas(ATLAS)。届时将开通ATLAS/USDT交易对.

1900/1/1 0:00:00
MAKE:MakerDAO 创始人:万字长文解读全新代币经济系统「人马座引擎」

MakerDAO创始人RuneChristensen近日发布长文《清洁货币》,提议推出名为SagittariusEngine的全新代币经济系统,以释放DeFi的超能力.

1900/1/1 0:00:00