Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【慢雾科技】以太坊 Solidity 未初始化存储指针安全风险

【慢雾科技】以太坊 Solidity 未初始化存储指针安全风险

作者头像
辉哥
发布于 2018-08-10 06:38:06
发布于 2018-08-10 06:38:06
1.1K0
举报
文章被收录于专栏:区块链入门区块链入门
引子

看到安比实验室有篇文章在说《警惕!Solidity缺陷易使合约状态失控》的问题,原文链接可以在参考链接中获取。

这个问题实际上之前在慢雾区中,爱上平顶山(山哥)和 keywolf 就有对一篇外文进行了翻译,可以在 SlowMist 的 GitHub 中找到(地址见参考链接),这篇译文《Solidity 安全:已知攻击方法和常见防御模式综合列表》里面就有讲到。

其实就是 Unintialised Storage Pointers(未初始化的存储指针)的安全问题,EVM中会将数据存储为 storage 或 memory ,在函数中局部变量的默认类型取决于它们本身的类型,未进行初始化的 storage 变量,会指向合约中的其他变量,从而改变其他变量的值,常见的场景就是指向状态变量,改变状态变量的值,导致漏洞的产生。

1,分析过程

依据 Solidity 官方手册上的介绍,以及经过实验得到了一些总结分析。

这里要注意结构体,数组和映射的局部变量,在官方手册中有提到这些类型的局部变量默认是放在 storage 中的,因此这些局部变量可能都存在相同的问题。(本文分析了结构体和数组的 Unintialised Storage Pointers 问题,而 mapping 暂未找到存在问题的案例)

而 struct 中在和局部变量进行赋值操作的时候,是保存成一个引用

如下是问题代码,struct 在函数中被声明但是没有初始化,根据官方文档中可以知道,struct 在局部变量中默 认是存放在 storage 中的,因此可以利用 Unintialised Storage Pointers 的问题, p 会被当成一个指针,并默 认指向 slot[0] 和 slot[1] ,因此在进行 p.name 和 p.mappedAddress 赋值的时候,实际上会修改变量 testA , test B 的值。

同理数组也有同样的问题,如下是问题代码:

2,解决方案

结构体 Unintialised Storage Pointers 问题的正确的解决方法是将声明的 struct 进行赋值初始化,通过创建一 个新的临时 memory 结构体,然后将它拷贝到 storage 中。

数组 Unintialised Storage Pointers 问题的正确解决方法是在声明局部变量 x 的时候,同时对 x 进行初始化操作。

Solidity 编译器开发团队不出意外将在下一个版本(Solidity 0.4.25)中对存在 Unintialised Storage Pointers 问题的代码进行修复,否则将无法正常通过编译。

开发人员需要关注 Solidity 0.4.25 版本的发布,并且使用 Solidity 0.4.25 编写代码。

最后,本篇未涉及的 mapping 未初始化存储指针的安全问题和案例,期待能够和师傅们一起研究讨论。

3, 参考链接

1)《警惕!Solidity 缺陷易使合约状态失控》 2)《Solidity 安全:已知攻击方法和常见防御模式综合列表》 3) Solidity 官方-常见问题 4)Solidity 官方-结构定义

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.08.08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
技术趣味史-Java语言的身世
时间回到 1990 年 12 月,一个叫做 帕特里克·诺顿 的大佬被他公司 Sun 开发的 C++ 和 C语言编译器搞得头大,主要是因为当时 C语言 对一些硬件和系统的支持性并不好,导致一些 API (函数) 特别难用。在这之后,他又和公司另外几位大佬开展一个名为 Green 的计划(之前被称为 Stealth 计划),其中一位大佬就是被称为 “Java 之父” 的 詹姆斯·高斯林。几个大佬高瞻远瞩,觉得未来是智能电器时代,所以决定开展用于电器领域的技术研究。
Wizey
2018/12/17
5900
技术趣味史-Java语言的身世
Cobalt Strike已死?如何真正意义上的入门免杀
本文章以原生的cs为基础进行免杀来进行简单的闲谈和讲解,内容版本从 cs4.5-cs4.9.1。
乌鸦安全
2024/03/15
3.7K0
Cobalt Strike已死?如何真正意义上的入门免杀
二次开发CobaltStrike
默认的CobaltStrike内存在多处流量特征,在马儿与服务端建立连接时进行流量交互.此间存在多处可疑特征已被各大杀软记录在册 如:卡巴斯基,诺顿,迈克菲等,但国内杀软并无此功能. 所以在客户端进行免杀的同时服务端在流量交互方面也需要特征去除,才产生了二次开发后CobaltStrike. 此次二开为CobaltStrike4.1版本.
天钧
2021/04/26
1.8K0
二次开发CobaltStrike
Petya勒索蠕虫完全分析报告
目录 第一章 前言 第二章 Petya老样本简介 第三章 Petya新样本详细介绍 第四章 Petya勒索蠕虫感染传播趋势分析 第五章 Petya横向移动及传播技术分析 1. 提升权限,设置执行标记 2. MBR修改 3. 设置重启计划任务 4. 遍历IP 5. 释放并运行资源 6. 枚举网络资源 7. 使用永恒之蓝漏洞攻击 8. 文件加密 9. 清除日志并重启 第六章 Petya勒索加密技术分析 1. 篡改MBR 2. 加密文件 第七章 Petya勒索杀毒软件攻防分析 第八章 总结 第一章 前言 2017
FB客服
2018/02/28
1.2K0
Petya勒索蠕虫完全分析报告
新型Android恶意软件可对手机造成物理损坏
由于最近加密货币价格大幅上涨,无论是黑客还是网站管理员都在越来越多地使用基于JavaScript的挖矿脚本,通过利用访客PC的CPU能力来挖掘比特币或其他加密货币。 就在上周,AdGuard的研究人员发现,一些流行的视频流站点,包括openload,Streamango,Rapidvideo和OnlineVideoConverter都利用了访客的CPU来挖掘Monero加密货币。 现在,俄罗斯网络安全公司卡巴斯基实验室的研究人员发现了一个潜伏在假冒反病毒和色情应用中的新型Android恶意软件,它能够执
FB客服
2018/02/26
9100
新型Android恶意软件可对手机造成物理损坏
第三讲 直流电路常用定理
电路的一般分析方法,功能强大,适用于对一个复杂电路的全域分析,但是人工解方程、工作量超乎想象。不过有时候我们并不需要对一个电路做全域分析。这里介绍直流电路中的几个常用的定理,使用这些定理可以简化电路分析,特别是对于一个复杂电路中局部电路或个别支路的分析,非常有效。因为是初学,虽然讲的是直流电路,当然这些定理也可推广到交流电路。
华东子
2024/11/12
1550
第三讲 直流电路常用定理
​国内优秀公共 DNS 服务
诺顿以其出色的防病毒,互联网安全服务和产品而闻名。他们的 DNS 服务器也不会令人失望。
用户8418197
2021/12/26
12.6K0
优思学院|平衡计分卡是什么?
平衡计分卡(Balanced ScoreCard, BSC)是一种管理系统,它为内部业务流程和外部结果提供反馈,以持续改进战略绩效和结果。通过整合内部流程和外部结果的衡量指标,平衡计分卡支持在战略绩效和结果水平上的持续改进。
用户2865703
2023/03/22
4720
优思学院|平衡计分卡是什么?
原来用户隐私是这样被泄露:超八成搜索网站将信息出售
互联网时代给用户带来了极大地便利,但也让个人隐私信息无处躲藏。打开电商购物平台,APP的精准推荐总是让人感到不安;打开搜索平台,跳出的智能搜索记录着浏览行为;打开娱乐软件,推荐算法让用户逐渐沉迷其中......
FB客服
2022/11/14
3750
原来用户隐私是这样被泄露:超八成搜索网站将信息出售
九大减小数据泄密负面影响方法
数据泄密是公司企业最担心的问题,也是不得不面临的严峻现实。但是除了准备好一项数据泄密响应计划外,IT部门怎样才能最有效地预防和缓解数据泄密事件呢?不妨看看下面九个方法。   1. 落实一项到位的信息安
安恒信息
2018/04/09
6610
科技爱好者周刊:第 95 期
本杂志开源(GitHub: ruanyf/weekly),欢迎提交 issue,投稿或推荐你的项目。
ruanyf
2020/02/25
8080
这次,我被粉丝给喷了。。。
推荐阅读: 《定了,安排!最后倒计时 3 天!》 《我上班没有被卷死,没想到自由职业反而被卷死了。。。》 1 揭秘被喷 是这样子的,我这段时间不是都在B站更新视频么,昨天刚好发布了一个:揭秘培训机构 6 大坑人套路的视频。 然后呢。 这位读者可能看到了,应该是非常不认可我的观点,于是把视频转发到了我的读者群里面。 昨晚已经23点了,在群里噼里啪啦对我批判了一番,然后自己就退群了,完全不给解释的机会。 其实我觉得视频内容还行吧,只是说了一下线下培训机构现状,并没有否定培训机构的价值。 并且呀。 我也是从培
纯洁的微笑
2022/03/04
2340
无需免杀获取域控hash小技巧
对mimikatz进行免杀后抓取出网机器中的明文及Hash信息,恰好域管曾登录过这台机器,利用抓取到的域管信息去连接域控机器。
小生观察室
2021/09/17
8740
无需免杀获取域控hash小技巧
谷歌系进军网络安全:字母表开出第13家子公司,名叫编年史
谷歌母公司Alphabet(字母表)成立了旗下第13个子公司:Chronicle LLC(编年史)。 1月24日,Alphabet宣布了这项消息。Chronicle是一家网络安全公司,致力于用人工智能(AI)改善企业的网络安全。 据路透社1月25日报道,Chronicle会向财富杂志500强公司销售网络安全软件。此举意味着,谷歌母公司即将成为企业计算机市场中强有力的竞争对手。 上述报道中介绍,Chronicle基于这样一种假定:利用人工智能,机器学习软件能够筛选和分析大量数据,比传统方法更快、更精准地检
企鹅号小编
2018/02/02
5400
谷歌系进军网络安全:字母表开出第13家子公司,名叫编年史
Java 之父 Jame:差点把 Java 命名成了 Silk(丝绸)
Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。Java语言中的许多库类名称,多与咖啡有关:如JavaBeans(咖啡豆)、NetBeans(网络豆)以及ObjectBeans(对象豆)等等。SUN和JAVA的标识也正是一杯正冒着热气的咖啡。
纯洁的微笑
2019/05/06
5620
Java 之父 Jame:差点把 Java 命名成了 Silk(丝绸)
怎么完全卸载赛门铁克_Symantec卸载方法,赛门铁克卸载「建议收藏」
1、首先在服务里面设置所有Symantec开头的系统服务为禁止(控制面板-管理工具-服务),重启后在命令行运行:smc -stop;(stop需要密码就关掉先)
全栈程序员站长
2022/08/10
13.6K1
一文辨析 Java、JSP、JavaScript
Java 是印度尼西亚“爪哇岛”的英文名,因气候环境,地理位置等因素盛产咖啡而闻名。Java 语言中的许多命名都与其有关:如JavaBeans。所以 Sun 和 Java 的 Logo 是个非常形象的图标—冒热气儿的咖啡
攻城狮杰森
2022/06/03
4060
一文辨析 Java、JSP、JavaScript
解决ccSvcHst.exe CPU占用超50%的问题,及其缘由
无意中发现任务管理器中一个非常奇特的进程,迅速吃掉了我50%的cpu资源,并且是持续性的,于是上google一番查找,终于有了新的发现。
全栈程序员站长
2022/07/09
1.3K0
怎么完全卸载赛门铁克_如何干净彻底卸载诺顿?
诺顿有那么难卸载吗?我来教你如何彻底卸载诺顿! 本方法跟重装的新系统差不多,没痕迹!
全栈程序员站长
2022/09/06
3.6K0
实战 | 记一次Bypass国外杀毒的主机渗透经历
这个好,直接jboss,一般可先尝试弱口令后台部署war包,后门文件进行压缩,改名为“.war”:
HACK学习
2021/06/24
2.2K0
实战 | 记一次Bypass国外杀毒的主机渗透经历
推荐阅读
相关推荐
技术趣味史-Java语言的身世
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档