区块见闻 区块见闻
Ctrl+D收藏区块见闻
首页 > NEAR > 正文

ACK:智能合约安全审计入门篇 —— delegatecall (2)_SOME

作者:

时间:

上篇文章中我们了解了什么是delegatecall函数以及一个基础的漏洞,这篇文章的目的是加深一下大家对delegatecall的印象并带大家一起去玩点刺激的,拿下一个进阶版的漏洞合约。

这里就不再重复之前的基础知识了,不了解或者遗忘的可以再看看上一篇文章:《智能合约安全审计入门篇——delegatecall(1)》。

漏洞示例

contractLib{??uintpublicsomeNumber;??functiondoSomething(uint_num)public{????someNumber=_num;??}}contractHackMe{??addresspubliclib;??addresspublicowner;??uintpublicsomeNumber;??constructor(address_lib){????lib=_lib;????owner=msg.sender;??}??functiondoSomething(uint_num)public{????lib.delegatecall(abi.encodeWithSignature("doSomething(uint256)",_num));??}}

Filecoin去中心化金融服务平台DeFIL2.0的eFIL体量已达153万枚:据官方消息,Filecoin金融服务平台DeFIL2.0数据显示,当前平台eFIL体量已达153万枚,资产总值约1.16亿美金。

DeFIL平台的eFIL自去年11月上线,为用户在以太坊和Filecoin的资金流转提供了便利的通道,在转账时请认真识别资产。DeFIL 2.0的定位是去中心化的Filecoin借贷和金融服务平台,同时打造了一个集算力NFT、永续算力通证、DeFi借贷、流动性挖矿、增强挖矿收益机制、DAO治理等一体化的去中心化金融生态。[2021/9/3 22:57:12]

漏洞分析

这次的攻击目标依然是获得HackMe合约中的?owner?权限,我们可以看到两个合约中除了HackMe合约中的构造函数可以修改合约的?owner?其他地方并没有修改?owner?的函数。我们要如何完成攻击呢?这里需要一点小技巧,大家可以思考一下,刚好也可以验证一下自己对于之前知识的掌握程度以及自己的思维是否活跃。

Galaxy Capital创始人:应专注于BTC、ETH和DeFi代币:加密投资公司Galaxy Capital创始人、前华尔街知名投资经理Mike Novogratz对狗狗币发表看法,他表示:我真的觉得狗狗币太疯狂了,很可能不会有好的结局。因为同样的事情已经发生在Gamestop公司身上,无非就是贪婪和盲从。炒作狗狗币没有目的性,所以需要专注于BTC、ETH和DeFi代币,其实有很多聪明的方式来参与这场加密货币集会。[2021/2/8 19:11:06]

是否有想法呢?没有想法也没关系,我们一起来看攻击是如何完成的:

攻击合约

//SPDX-License-Identifier:MITpragmasolidity^0.8.13;contractAttack{??//MakesurethestoragelayoutisthesameasHackMe??//Thiswillallowustocorrectlyupdatethestatevariables??addresspubliclib;??addresspublicowner;??uintpublicsomeNumber;??HackMepublichackMe;??constructor(HackMe_hackMe){????hackMe=HackMe(_hackMe);??}??functionattack()public{????//overrideaddressoflib????hackMe.doSomething(uint(uint160(address(this))));????//passanynumberasinput,thefunctiondoSomething()belowwill????//becalled????hackMe.doSomething(1);??}??//functionsignaturemustmatchHackMe.doSomething()??functiondoSomething(uint_num)public{????owner=msg.sender;??}}

BitMEX首席执行官:银行低回报时代 DeFi市场可为投资者提供出口:8月27日消息,BitMEX首席执行官Arthur Hayes最近表示,银行的低回报将促使公众寻求风险更高的投资。他将yield farming应用描述为“ DeFi原始银行”,回报、机会和快速利润诱惑将迎来一个包容性银行服务的时代,所有用户都可以储蓄借给感兴趣的各方,并获得至少10%的年利率。他还称,“面临严重的收入不平等,金融投机将激增。你是愿意为一家大型企业工作30年,换取停滞甚至为负的实际收入增长,还是愿意来到金融市场这个智力里玩一玩?”(Decrypt)[2020/8/27]

我们先看攻击流程:

1.Alice部署Lib合约;

2.Alice部署HackMe合约并在构造函数中传入Lib合约的地址;

动态 | 以太坊开发者需要关注DeFi与Ethereum 2.0的网络迁移问题:据CryptoBriefing今日报道,DeFi Pulse数据显示,在DeFi排名前十的产品中,有九款是基于以太坊的,Ethereum 2.0的信标链预计将在今年第一季度推出。从Ethereum到Ethereum 2.0的合并给DeFi生态系统中用户群带来了问题。Token Daily的合伙人Mohamed Fouda对此表示,“如果DeFi应用程序不能轻松迁移到Ethereum 2.0,那么新链上就不会有任何活动。”以太坊倡导者、Weald Technology总经理Jim McDonald也表示,“这无疑是以太坊开发者在2020年要关注的最重要的任务。DeFi严重依赖于网络效应,因此,如果Ethereum 2.0启动较晚,DeFi已经转移到另一个网络,这可能会给Ethereum 2.0的持续使用带来问题。”[2020/1/7]

3.攻击者Eve部署Attack合约并在构造函数中传入HackMe合约的地址;

动态 | DeFi项目锁仓达15亿美元,Edgeware近一周增长超5倍:据DAppTotal.com DeFi专题页面数据显示:截至目前,已统计的23个DeFi项目共计锁仓资金达15亿美元,其中EOSREX锁仓6.58亿美元,占比43.99%,排名第一位;Maker锁仓4.43亿美元,占比29.64%,排名第二位;排名第三位的是Edgeware,锁仓2.3亿美元,占比15.41%;Compound,Dharma、Bancor、Augur等其他DeFi类应用共占比10.96%。过去一周,整体而言:1、增速相对较快的DeFi项目有Edgeware、Nuo、Compound等;2、Edgeware一个基于Polkadot的高并发智能合约平台,目前锁仓85.6万个ETH,近一周增长超5倍;3、受市场行情回暖的影响,DeFi项目总锁仓资金环比增加30.48%。[2019/6/17]

4.攻击者调用Attack.attack()函数将HackMe合约中的owner变为自己。

咋回事儿呢?其实这个攻击方式就是很巧妙的运用了delegatecall这个函数修改storage类型变量时的特征:delegatecall函数的执行环境是调用者的环境并且对于storage类型变量的修改是根据被调用合约变量存储的插槽位置来修改的。

1.Attack.attack()函数先将自己的地址转换为uint256类型第一次调用HackMe.doSomething()函数;

2.HackMe.doSomething()函数使用delegatecall函数带着传入的Attack合约的地址调用了Lib.doSomething()函数;

3.可以看到Lib.doSomething()函数将合约中存储位置为slot0的参数改为传入的值,这样当HackMe合约使用delegatecall调用Lib.doSomething()函数时也将改变自己在slot0位置存储的变量的值,也就是将lib参数改为我们传入的Attack合约的地址。此时之前在HackMe.lib参数中存储的Lib合约的地址就被修改成我们传入的Attack合约的地址了;

4.Attack.attack()函数再次调用HackMe.doSomething()函数,由于在上一步我们已经将HackMe.lib变量修改为Attack合约的地址了,这时HackMe.doSomething()函数将不再调用之前的Lib合约而是用delegatecall去调用Attack.doSomething()函数。此时我们再来观察Attack合约的写法,发现其变量的存储位置故意和HackMe合约保持一致,并且不难发现Attack.doSomething()函数的内容也被攻击者写为owner=msg.sender,这个操作修改了合约中存储位置为slot1的变量。所以HackMe合约使用delegatecall调用Attack.doSomething()函数就会将合约中存储位置为slot1的变量owner修改为msg.sender也就是Eve的地址,至此攻击者完成了他的攻击。

修复建议

作为开发者

1.?在使用delegatecall时应注意被调用合约的地址不能是可控的;

2.?在较为复杂的合约环境下需要注意变量的声明顺序以及存储位置。因为使用delegatecall进行外部调用时会根据被调用合约的数据结构来修改本合约相应slot中存储的数据,当数据结构发生变化时这可能会造成非预期的变量覆盖。

作为审计者

1.在审计过程中遇到合约中有使用delegatecall时需要注意被调用的合约地址是否可控;

2.当被调用合约中的函数存在修改storage变量的情况时需要注意变量存储插槽的位置,避免由于数据结构不一致而导致本合约中存储的storage变量被错误的覆盖。

来源:金色财经

标签:ACKEFIDEFISOMEETHBACK币Paradise DefiDeFi WarriorSOME币

NEAR热门资讯
ETH:富士币圈-06.25 ETH晚盘分析:关注1150附近支撑 短期看空趋势_300价格

????1小时K线图趋势分析,目前ETH依旧处于上行趋势通道1080-1320内运行,白盘首先关注1150附近趋势支撑位,建议回踩1130-1150区间不破可以做多一次.

AME:被人称为下一个Shib的GHC到底是什么?_ghc币的最新消息

数字货币圈的消息流传的很迅速,通常都会一石激起千层浪,然而新兴GameFi+Metaverse项目GHC率先打响了第一炮,作为GameFi与Metaverse的结合体,GHC的价值早已非同寻常.

AAVE:DeFi还能回到巅峰状态吗?_DEFI

所有的胜利,都是来自对信仰的坚持。相信相信的力量,这里从未让你我失望。欢迎关注星空价值投资,总要有人,仰望星空市场对于价格的彻底破坏,显性表现自然是“价格暴跌”,但真正的摧毁性来自“叙事”的崩塌.

比特币:知名区块链公司入局智能手机,这会给行业带来什么变化?_DAOrayaki

SolanaLabs联合创始人AnatolyYakovenko宣布了一套产品,旨在挖掘区块链与智能手机集成的潜力.

Solana:链游+电竞!宇宙富豪打造新模式_SOL

宇宙富豪从推出游戏到与网红合作,在这几个月的时间,宇宙富豪的粉丝团体逐渐扩大,数量也是呈现系数式增长。数据显示,越来越多的玩家已经加入了社区,宇宙富豪在社区的人数增长方面有取得非常好的进展.

比特币:大饼 以太多单反弹无力 后市有待突破箱体大幅下跌_SIN

BTC??ETH即将破位小箱体区间: 小周期技术结构来看,日线级别一直没有连阳修复,碎阴下行,节奏缓慢弱势修复,四小时级别通道缩口向下打开,下破后修复只是节奏上的缓慢,并没有多头反攻的能力.