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

LOC:科普 | 智能合约安全审计入门篇 —— 溢出漏洞

作者:

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

By:小白@慢雾安全团队

背景概述

上周写了智能合约安全审计入门篇——重入漏洞,这次我们接着来说一个同样很经典的漏洞——?溢出漏洞。

前置知识

首先我们还是先来看看溢出是什么:

算术溢出或简称为溢出分为两种:上溢和下溢。所谓上溢是指在运行单项数值计算时,当计算产生出来的结果非常大,大于寄存器或存储器所能存储或表示的能力限制就会产生上溢,例如在solidity中,uint8所能表示的范围是0-255这256个数,当使用uint8类型在实际运算中计算255+1是会出现上溢的,这样计算出来的结果为0也就是uint8类型可表示的最小值。同样的,下溢就是当计算产生出来的结果非常小,小于寄存器或存储器所能存储或表示的能力限制就会产生下溢。例如在Solidity中,当使用uint8类型计算0-1时就会产生下溢,这样计算出来的值为255也就是uint8类型可表示的最大值。

民盟中央建议加速元宇宙科普和立法:3月4日消息,民盟中央已起草了《关于“元宇宙”技术发展的提案》,并将提交全国政协十三届五次会议。在提案中,民盟中央建议,在科普层面需加速知识传播,法律层面则需加快立法步伐。民盟中央拟提交的提案指出,目前,在新兴网络层面,相关政策法规相对缺失。“元宇宙”在未来将会带动形成全新的网络形态,当遇到突发舆情,全虚拟的环境、场景将更难进行源头追踪、问题疏导。因此建议应尽早加快立法研究,尽快形成与技术、市场发展相适应的治理模式和法律基础,全面提升我国社会治理的水平。建议组织相关部门,针对“元宇宙”相关需求、风险进行立法研究,并尽快发布。此前消息,民进中央拟向全国政协十三届五次会议提交《关于积极稳妥推进元宇宙技术和产业发展的提案》。建议推进元宇宙技术产业发展,建立相关监管治理体系。(华夏时报)[2022/3/4 13:37:12]

如果一个合约有溢出漏洞的话会导致计算的实际结果和预期的结果产生非常大的差异,这样轻则会影响合约的正常逻辑,重则会导致合约中的资金丢失。但是溢出漏洞是存在版本限制的,在Solidity<0

欧易OKEx将于3月18日推出DeFi系列科普视频:据欧易OKEx官方消息显示,欧易OKEx将正式推出DeFi系列科普视频《欧易DeFi20讲》,本系列节目由欧易OKEx亚太区CEO马克金主讲。该视频首期将于3月18日11:00(HKT)推出,用户可以在欧易OKEx官方学院、金色财经观看。

《欧易DeFi20讲》主要包含DeFi入门指南、全景解读DeFi生态及如何参与DeFi三个篇章,可以轻松使用户了解DeFi原理,洞察DeFi价值,掌握DeFi热点,更多详情请关注欧易OKEx官方学院。[2021/3/18 18:55:59]

functionincreaseLockTime(uint_secondsToIncrease)public{lockTime+=_secondsToIncrease;}

动态 | 央行官微旧文重发“再科普”:范一飞详解数字货币:据中国经济网消息,今日,央行官微公众号头条重新发布央行副行长范一飞在2018年1月25日题为《关于央行数字货币的几点考虑》的文章,对央行数字货币再次进行科普。同时,微信公众号第二条发布支付司副司长穆长春8月10日在第三届中国金融四十人伊春论坛上的演讲。近年来,各主要国家和地区央行及货币当局均在对发行央行数字货币开展研究,新加坡央行和瑞典央行等已经开始进行相关试验,人民银行也在组织进行积极探索和研究。[2019/8/21]

functionwithdraw()public{require(balances>0,"Insufficientfunds");require(block

金色财经独家分析 监管机构、媒体、业界提示风险 区块链科普道阻且长:新华社今日发文表示,近来“区块链”类案件频发,不法分子以“投资虚拟货币周期短、收益高、风险低”为借口,取用户信任并诱使其转账进行投资。无独有偶,同日消息,腾讯手机管家安全专家也提醒此类风险,并从技术上提出防建议。在美国,监管机构警示加密货币欺诈现象普遍承诺高收益而不披露潜在风险。金色财经独家分析,不法分子假借新技术之名进行,一方面是抓住民众趋利的心理,一方面反映出区块链科普的欠缺。区块链是新兴科技和底层技术并有改变社会生产关系的潜力,应该进行系统性的科普教育,当前,部分大学已经开始设置了区块链课程,但对于普通民众仍然有科普的需求,人们应该了解到系统和正确的知识,不仅要了解区块链的好,也要明确局限和弊端,以在高收益的诱惑下,保持清醒客观。[2018/4/11]

}

漏洞分析

我们可以看到,TimeLock合约充当了时间保险库。用户可以将代币通过deposit函数存入该合约并锁定,且至少一周内不能提现。当然用户也可以通过increaseLockTime函数来增加存储时间,用户在设定的存储期限到期前是无法提取TimeLock合约中锁定的代币的。首先我们发现这个合约中的increaseLockTime函数和deposit函数具有运算功能,并且合约支持的版本是:0

fallback()externalpayable{}

functionattack()publicpayable{timeLock

}

这里我们将使用Attack攻击合约先存入以太后利用合约的溢出漏洞在存储未到期的情况下提取我们在刚刚TimeLock合约中存入并锁定的以太:

1.首先部署TimeLock合约;

2.再部署Attack合约并在构造函数中传入TimeLock合约的地址;

3.调用Attack.attack函数,Attack.attack又调用TimeLock.deposit函数向TimeLock合约中存入一个以太,之后Attack.attack又调用TimeLock.increaseLockTime函数并传入uint类型可表示的最大值加1再减去当前TimeLock合约中记录的锁定时间。此时TimeLock.increaseLockTime函数中的lockTime的计算结果为2^256这个值,在uint256类型中2^256这个数存在上溢所以计算结果为2^256=0此时我们刚刚存入TimeLock合约中的一个以太的锁定时间就变为0;

4.这时Attack.attack再调用TimeLock.withdraw函数将成功通过block.timestamp>lockTime这项检查让我们能够在存储时间未到期的情况下成功提前取出我们刚刚在TimeLock合约中存入并锁定的那个以太。

下面是攻击流程图:

修复建议

到这里相信大家对溢出漏洞都有自己的理解了,那么下面我们就以开发者和审计者的角度来分析如何预防溢出漏洞和如何快速找出溢出漏洞:

作为开发者

1.使用SafeMath来防止溢出;

2.使用Solidity0.8及以上版本来开发合约并慎用unchecked因为在unchecked修饰的代码块里面是不会对参数进行溢出检查的;

3.需要慎用变量类型强制转换,例如将uint256类型的参数强转为uint8类型由于两种类型的取值范围不同也可能会导致溢出。

作为审计者

1.首先查看合约版本是否在Solidity0.8版本以下或者是否存在unchecked修饰的代码块,如果存在则优先检查参数的溢出可能并确定影响范围;

2.如果合约版本在Solidity0.8版本以下则需要查看合约是否引用了SafeMath;

3.如果使用了SafeMath我们需要注意合约中有没有强制类型转换,如果有的话则可能会存在溢出的风险;

4.如果没有使用SafeMath且合约中存在算术运算的我们就可以认为这个合约是可能存在溢出风险的,在实际审计中还要结合实际代码来看。

标签:TIMIMETIMELOCOptimus AITIME币time币未来价值ABLOCK币

Polygon热门资讯
VIN:P2E游戏公司AAGV完成1250万美元私募融资,Shima Capital等领投

据CoinDesk12月2日消息,Play-to-Earn游戏公司AAGVentures完成1250万美元私募融资.

1900/1/1 0:00:00
ANC:华西证券:元宇宙正从概念迈向产业应用初期,下一个互联网时代已经到来

智通财经获悉,12月7日,受元宇宙正从概念迈向产业应用初期消息影响,A股元宇宙概念股再度冲高,截至发稿,中文在线拉升涨超15%,川网传媒、佳创视讯、恒信东方、中青宝、宝通科技等股拉升上涨.

1900/1/1 0:00:00
OHO:科技日报:元宇宙是风口也是虎口

来源:科技日报记者?刘艳元宇宙席卷一切,科技巨头纷纷表态,但依然跳不出着眼于自身业务领域的投射,如同看一场又一场盲人摸象。元宇宙呈现的是什么,还处在比拼想象力的阶段.

1900/1/1 0:00:00
MIN:为什么DAO将成为创作者经济的未来

原文标题:《WhyDAOsAretheFutureoftheCreatorEconomy》原文编译:0x137什么样的组织架构最适用于创作者经济?是传统公司架构?是DAO?还是半去中心化组织?每.

1900/1/1 0:00:00
VER:元宇宙概述(3):我们为什么需要元宇宙

——元宇宙的突然火爆引发了大众的参与和学习,于是我准备从宏观角度出发,逐步为大家分享关于这方面的内容。 元宇宙因科技的加速而崛起,却因人类的贪婪而放缓.

1900/1/1 0:00:00
元宇宙:“高能链”开路,B站的元宇宙梦要怎么圆?

来源:财联社|区块链日报记者董宇佳B站的“元宇宙”梦有了实质性进展,其被曝正在测试元宇宙相关业务的“高能链”.

1900/1/1 0:00:00