主页 > imtoken苹果版下载官网怎样 > Web3底层语言(二):Move如何避免闪贷重入攻击?

Web3底层语言(二):Move如何避免闪贷重入攻击?

概括

之前的报告从底层语言的特点比较了Move和Solidity(以太坊)的优势和特点。 作为Web3的基础研究,本文从闪贷最具特色的应用出发,分析以太坊和Move分别是如何实现闪贷的,以及Move是如何避免闪贷攻击的?

以太坊合约之间的交互是通过消息的交换实现状态一致,并允许重入和动态调用。 该特性为闪贷的实现提供了基础。 在此期间,合约之间的函数可以来回调用对方——在调用期间发生控制权转移。 如果DeFi项目平台合约存在漏洞,套利者可以利用合约的恶意代码调用相应的函数来窃取资产——利用合约间状态同步信息的差异,在一个流程未结束时双花资产(以太坊资产只是Assignment),或者重复执行函数(不应该允许的逻辑)来窃取。

重入攻击的前提是攻击者部署的合约中存在恶意代码,但核心因素是:

1)以太坊合约调用时存在控制权转移,为恶意合约提供了主动权;

2)并且在进程结束前可以重新进入(重复调用)进程。 恶意合约可以利用漏洞重复调用函数实现资产窃取(如多次重复提现,但提现流程结束前);

3)另外,以太坊账户资产以数字余额的形式存在,因此存在重复资产盗窃(双花)的可能,或者恶意合约可以修改相关账户资产余额的值,从而实现盗窃过程。结束。

Move提出了闪贷新的操作流程——烫手山芋模型,基本摒弃了重入性。 “hot-potato”模式是一种没有key、store、copy、drop能力的结构,是Move程序在事务执行过程中只使用一次的结构。 由于没有drop、key和store能力,烫手山芋只能通过调用“销毁”函数来完成这个过程——顾名思义,这是一个烫手山芋,过程中的任何处置都是“烫手山芋”。 ,只能交给销毁函数来完成。 具体过程如下:

1)闪电贷智能合约在运行时会创建一个“烫手山芋”收据(receipt);

2)当套利者向闪贷合约进行贷款时,闪贷合约发送贷款资金和烫手山芋收据(receipt);

3)套利者利用贷款资金进行套利操作;

4)当套利者还款时,会调用还款函数(repay),将资金和收据(receipt)发送给还款函数,收据被还款函数接收后销毁。

闪贷完成的前提是最终正确还款和流程结束。 在流程结束前,恶意合约可以在以太坊系统中实施重复调用,修改相应的资产账户分配,从而实现盗窃。 除了资金的正确返还之外,Move系统闪贷流程结束的前提是一次性回收销毁烫手山芋资源,保证了闪贷的原子性。

风险提示:区块链商业模式落地不及预期; 监管政策的不确定性。

比特币美式期权平台_比特币期权30秒_比特币李笑比特币身价

比特币李笑比特币身价_比特币美式期权平台_比特币期权30秒

一、核心思想

作为以太坊DeFi生态最有特色的应用,闪电贷基于以太坊使用的Solidity语言,允许动态调用和重入。 虽然这种动态调用是智能合约开放性和可组合性的重要体现,但由此带来的控制权转移和合约功能的重复调用,带来了不小的安全隐患。 行业存在漏洞利用闪电贷攻击DeFi资金池事件时有发生。 由于Move语言不允许动态调用和重入,它使用“烫手山芋”模型非常简单地实现闪贷,因此可以完全避免类似以太坊的安全问题。

两个系统在生态应用中的工作模式存在明显差异。 这种差异的根源在于Move底层语言的特点。 在我们之前的报告《Web3底层语言:Move弥补了Solidity的哪些短板? 》已经详尽介绍。本报告从闪贷申请的角度比较了两者应用的不同实现方式。

2.以太坊闪电贷的基础:动态调用和可重入

闪电贷是一种全新的原生DeFi产品,可以理解为极速借贷。 用户只需在同一笔交易(区块)中完成借贷、套利、还款和支付手续费。 由于是原子交易,借款人无需抵押任何资产即可变现贷款,提供无本金套利方案。

在我们之前的报告《Web3底层语言:Move弥补了Solidity的哪些短板? " 中提到:

》为了模块化和合约组合,Solidity(如以太坊)上的Contract合约通过库(相当于静态库)传递消息,从而实现Contract合约之间的调用和交互。Move语言使用模块(module)和脚本(script)设计,前者类似于Contract合约,Move语言的合约构成是模块之间的组合,通过传递资源(也就是上面说的资源)。关于构成,Solidity和Solidity的区别移动很明显。”

以太坊合约之间的交互是通过互通消息实现状态一致,并允许重入和动态调用,这意味着合约之间的函数可以来回调用——在调用过程中会发生控制权的转移。 该特性为闪贷的实现提供了基础。

具体来说,在一个以太坊交易中,可以进行转账操作等一系列合约操作,通过调用智能合约中的函数函数,可以执行多种复杂的功能——也就是说,一个基于以太坊的交易可以集成一系列的复杂交易:可以集成借贷、套利、还款等一系列交易操作。 闪电贷中的所有操作都在一个区块时间内完成。 按照以太坊目前的出块速度,Merge后需要12秒。 还款,如果不这样做,交易就不会被打包写入区块,相当于借款人借钱,套利(失败)。 这些操作不是有效的事务,而只是临时状态——即原子事务。 因此,用户必须对所有需要执行的步骤进行编程,形成智能合约交易,完成借用、使用、还款三个步骤。

上述复杂的交易操作是通过多个合约之间的动态调用实现的,这种调用是可重入的(即可以重复调用)。

目前,用户还可以通过FURUCOMBO等第三方项目完成更简单的闪贷插件编程,无需实际编写代码即可完成智能合约的设计,最终实现闪贷所需的全套操作。 具体套利流程如下图所示(使用FURUCOMBO平台,具体价格交易所为例)。 目前 Kyberswap 平台上的价格情况是 1 sUSD = 0.9927 DAI,而 Uniswap 上 1 DAI = 1.2411 sUSD。 DAI-sUSD交易对的价格存在较大的套利空间,可以通过FURUCOMBO的接口设计套利流程。 包括: 1、通过AAVE借贷平台的闪贷功能借出100 DAI; 2. 通过Uniswap将100个DAI兑换成约122个sUSD代币; 3、通过Kyberswap平台将sUSD代币兑换成约122个DAI代币; 4. 偿还从AAVE借出的100个DAI代币,手续费为0.09个DAI; 5. 使用闪电贷的整个套利过程在一笔以太坊交易中完成,利润约为22 DAI。

比特币李笑比特币身价_比特币美式期权平台_比特币期权30秒

如果在本次以太坊交易中借入的资金没有被偿还,那么整个借贷交易就不会被打包进区块,也就是说借贷实际上并没有发生,因此借款人的资金不会受到任何影响——中间借贷并且套利过程只是暂时的状态,并没有被矿工打包确认。 基于闪电贷的特点和时效性要求,其应用最为广泛的是套利交易。 套利者无需动用自有资产进行套利操作,只需要通过闪贷获得所需的资金额度即可完成套利交易,并及时偿还借入的资金。 这大大降低了套利者的进入门槛,因为理论上任何人都可以成为套利者,拥有无限的套利资金进行操作。

从以上流程可以看出,以太坊合约的控制权在FURUCOMBO闪电合约-套利账户合约-Uniswap合约-Kyperswap合约-闪电借贷合约之间进行了切换,可以动态调用相应的函数。 如果DeFi项目平台合约存在漏洞,套利者可以利用合约的恶意代码调用相应的函数来窃取资产——利用合约之间的状态同步信息差异,在一个流程结束前双花资产(以太坊) assets are only assigned),或者重复执行函数(不应该允许的逻辑)来窃取。

对于Move生态来说,由于资产不是简单的赋值,禁止动态调用和重入,从根本上杜绝了风险。 后面我们会详细说明它的具体实现。

3、Move和Solidity闪电贷在具体实现上有什么区别?

3.1.以太坊闪电贷双刃剑:动态调用和重入

从实现上看,以太坊EVM(基于Solidity)具有动态调度,可以通过重入实现闪贷。 比如我们之前的报告《Web3底层语言:Move弥补了Solidity的哪些短板? " 中提到:

“以太坊(Solidity)的资产由相应的合约控制。如果将Token A合约比作一个保险箱,保险箱会为所有用户分配一个数字余额来表示用户拥有的Token A资产的数量,但是资产本身还是存放在Token A合约的保险箱里。Move用户账户本身就是一个独立的大保险箱,由用户自己控制,所有的Token资产都放在这个保险箱里。而这些Token不存在于数字中形式,但不能复制具有用户控制权限的资源(类型)。”

因此,以太坊EVM实现闪电贷套利的过程为:

1)用户将调用控制权交给闪电贷合约;

2)闪贷合约调用外部套利合约程序中的执行函数,将请求的借贷金额发送给套利合约,套利合约执行套利操作;

3) 套利合约完成套利,将贷款返还给闪贷合约,执行函数完成工作,将控制权交还给闪贷合约;

4)闪电贷合约检查还款金额是否正确。 如果正确则套利交易成功,否则失败。

上述过程中,动态调用了相应的函数,闪贷合约在结束前需要检查还款金额是否正确,因此控制权的转移可以随时发生,即可重入——在同时,需要注意的是,以太坊账户的资产是以数字余额形式存在的,重新进入会带来双花的可能性,这也是漏洞所在。 调用外部合约的主要危险之一是它们可以接管控制权,一旦这些外部合约程序出现漏洞,攻击者可以通过重复调用实施攻击,即重入攻击。

比特币李笑比特币身价_比特币期权30秒_比特币美式期权平台

重入攻击创造了以太坊历史上最严重的攻击之一,直接导致了以太坊的分叉,也就是2016年6月17日The DAO的崩溃。黑客部署了一个合约,在The DAO中存入一些ETH DAO 作为“投资者”。 然后黑客调用The DAO合约中的withdraw函数,导致The DAO合约为黑客取款。 因为黑客合约(fallback function)存在恶意漏洞——它没有结束逻辑,所以The DAO一直无法完成提现(这时候,The DAO并不知道黑客收到了提现,并把它的帐户余额为 0)并重新获得控制权。 黑客通过不断调用 withdraw 函数发送了超过其初始存入的 ETH。

在闪电贷攻击中,攻击者往往通过恶意合约实施可重入攻击。 例如,2022年3月16日,黑客通过闪电贷借钱,并利用借贷项目百融的漏洞进行实时重入攻击,最终获利约2363 ETH。 具体过程并不复杂。 由于百财金融先转账后记录,黑客通过闪电贷借款,利用攻击合约存入百财金融借贷池实现抵押借贷,攻击合约部署的onTokenTransfer函数实现借贷前的多次调用bookkeeping Function(重入攻击),使用一个质押资产从不同的贷款池中不断提取贷款。 由于先转账后入账,当入账时(流程结束),黑客就实现了攻击并获利。 攻击的核心是:在进程结束前,攻击者的合约可以重复调用相关函数,实现资产窃取。

比特币美式期权平台_比特币李笑比特币身价_比特币期权30秒

例如,攻击者的合约将资产抵押给A银行(项目A的借贷池)进行贷款,A银行在完成记账结算前就开始放贷,而A银行完成记账结算过程就意味着闪贷交易必须是成功(Atomicity),此时资产被A放入仓库进行记账。 但是由于A银行与其他银行之间的信息不同步(合约函数之间的状态不同步),攻击者还没有完成A银行的资产入库记账(即A银行的借贷流程时)被攻击的合约还没有结束,这个时候闪电贷的工作流程还没有结束,合约函数调用仍然可以进行),资产用于其他银行的抵押贷款(再入)等如B和C。流程结束后,攻击者完成了闪电贷攻击,获利了。

重入攻击的前提是攻击者部署的合约存在恶意代码,但核心因素是:

1)以太坊合约调用时存在控制权转移,为恶意合约提供了主动权;

2)并且在进程结束前可以重新进入(重复调用)进程。 恶意合约可以利用漏洞重复调用函数实现资产窃取(如多次重复提现,但提现流程结束前);

3)另外,以太坊账户资产以数字余额的形式存在,因此存在重复资产盗窃(双花)的可能,或者恶意合约可以修改相关账户资产余额的值,从而实现盗窃过程。结束。

“可重入”是实现闪电贷的基础,但一旦目标合约出现漏洞,攻击者就可以实施重入攻击。 这在我们之前的报告中有详细说明。

3.2. MOVE的“烫手山芋”:无需重入的闪电贷

Move语言禁止动态调用和重入,从根本上杜绝了重入攻击。 但是,作为一种资源,Move系统的资产一旦借出,就相当于真正的转移。 如何保证闪贷的顺利还款?

Move提出了闪贷新的操作流程——烫手山芋模型,基本摒弃了重入性。 “hot-potato”模式是一种没有key、store、copy、drop能力的结构,是Move程序在事务执行过程中只使用一次的结构。 由于没有drop、key和store能力,烫手山芋只能通过调用“销毁”函数来完成这个过程——顾名思义,这是一个烫手山芋,过程中的任何处置都是“烫手山芋”。 ,只能交给销毁函数来完成。 具体过程如下:

1)闪电贷智能合约在运行时会创建一个“烫手山芋”收据(receipt);

2)当套利者向闪贷合约进行贷款时,闪贷合约发送贷款资金和烫手山芋收据(receipt);

3)套利者利用贷款资金进行套利操作;

4)当套利者还款时,会调用还款函数(repay),将资金和收据(receipt)发送给还款函数,收据被还款函数接收后销毁。

我们在之前的报告中已经分析过,账户资产和收据都是“不可复制、不可丢弃、不可重复使用,可以安全存储和转移”的资源类型,因此收据必须经过处理(且只能使用一次) ,而不是像以太坊那样给账户赋值。 因此,烫手山芋模型可以保证借出的资产(资源类,借出后实际转移)必须归还。 收据(receipt)作为烫手山芋,就像一个定时雷管(这里的定时指的是闪贷套利作为原子交易的“时间”,而不是具体的时长),资金与雷管绑定在一起被借出。 由于雷管双方都无法占有,必须归还拆除——否则交易无法完成,闪贷资金保证返还。

比特币李笑比特币身价_比特币美式期权平台_比特币期权30秒

闪贷完成的前提是最终正确还款和流程结束。 在流程结束前,恶意合约可以在以太坊系统中实施重复调用,修改相应的资产账户分配,从而实现盗窃。 除了资金的正确返还之外,Move系统闪贷流程结束的前提是一次性回收销毁烫手山芋资源,保证了闪贷的原子性。

从应用的角度来看比特币期权30秒,Web3的底层代表应该在保证开放性和可重构性的基础上提高代码安全性。 在Web3中,代码不仅包含信息,还直接涉及资产调用,保证用户资产安全是重中之重,否则Web3就是一片黑暗森林。 以太坊的生态让大家看到了智能合约的生命力。 在此基础上比特币期权30秒,下一个时代将继续向安全合规方向演进。 这也是我们当前关注Web3底层语言演进的核心逻辑,或者说这孕育着下一波创新浪潮。

风险提示

区块链商业模式落地不及预期:区块链、密码学等相关技术和项目处于早期发展阶段,存在商业模式落地不及预期的风险。

监管政策的不确定性:区块链项目的实际运行涉及多项金融、网络等监管政策。 目前各国的监管政策还处于研究探索阶段,没有成熟的监管模式,行业面临监管。 政策不确定性的风险。

本文节选自《Web3底层语言(二):Move如何避免闪电贷重入攻击? 国盛证券研究所 2022 年 12 月 29 日发布。”,详见相关报告。

宋家吉 S0680519010002 songjiaji@gszq.com

任和义 S0680519040002 renheyi@gszq.com

特别声明:《证券期货投资者适当性管理办法》将于2017年7月1日起正式实施。本微信制作材料仅供国盛证券客户中的专业投资者使用。 请不要以任何形式转发此信息。 如果您不是国盛证券客户中的专业投资者,为保证服务质量和控制投资风险,请取消关注,不要订阅、接受或使用本文件中的任何信息。 由于本订阅账号访问权限设置难度较大,给您带来的不便敬请谅解! 感谢您的理解和合作。

重要声明:本认购账户由国盛证券通讯组设立。 本订阅号并非国盛传播团队研究报告发布平台。 本订阅号所载信息仅供专业投资机构使用,仅供在新媒体背景下及时交流研究意见。 本认购号所载信息节选自国盛证券研究所发布的研究报告或已发布报告的后续解读。 如因报告节选导致出现歧义,以报告发布日的完整内容为准。 此信息仅代表报告发布当日的判断。 相关分析意见和推测如有变更,恕不另行通知。

本信息不构成对特定证券在特定价格、特定时间点、特定市场表现的判断或投资建议,不能等同于指导特定投资的操作意见。 如果普通个人投资者使用这些信息,他们可能会因缺乏解读服务而导致对报告中的关键假设、评级、目标价格等的理解出现歧义,从而造成投资损失。 因此,个人投资者还必须寻求专业投资顾问的指导。 本资料仅供参考,收件人不应仅依赖本资料中的信息来代替自己的独立判断,而应独立作出投资决策并自行承担投资风险。