>> 国盛证券-区块链行业Web3底层语言(二):Move如何避免闪电贷重入攻击?-221229
| 上传日期: |
2022/12/29 |
大小: |
816KB |
| 格式: |
pdf 共9页 |
来源: |
国盛证券 |
| 评级: |
增持 |
作者: |
宋嘉吉,任鹤义 |
| 行业名称: |
|
| 下载权限: |
无限制-登录即可下载 |
|
|
研究报告全文:证券研究报告行业专题研究2022年12月29日区块链Web3底层语言二Move如何避免闪电贷重入攻击增持维持上一篇报告从底层语言特点对比了Move和Solidity以太坊的优势和特点作为Web3的基础性研究本篇从闪电贷这一最具特色的应用角度出发分析了以太坊和Move分别如何实现闪电贷Move怎样行业走势规避了闪电贷攻击以太坊合约之间的交互是通过互通消息实现的状态一致且允许重入通信沪深30016动态调用这一特点为实现闪电贷提供了基础期间合约之间的函数可以互相来回调用调用过程中会发生控制权转移如果DeFi项目平台合0约有漏洞套利者能够利用其合约的恶意代码调用相应函数进行资产盗取利用合约之间的状态同步信息差在一个流程未结束时双花资产以太坊-16资产只是赋值或者重复执行函数本该不被允许的逻辑进行盗取-322021-122022-052022-082022-12重入攻击的前提是攻击者部署的合约存在恶意代码但最核心的因素是1以太坊合约调用时控制权存在转移这为恶意合约提供了主动权作者2且流程在结束之前可以重入重复调用恶意合约可以利用漏洞反复调用函数实现资产盗取如一笔取款流程未结束时反复提取很多次分析师宋嘉吉执业证书编号S06805190100023加上以太坊账户资产是以数值余额的形式存在因此存在反复盗取资邮箱songjiajigszqcom产双花的可能或者在流程结束之前恶意合约就可以修改相关账户分析师任鹤义资产余额数值实现盗取执业证书编号S0680519040002邮箱renheyigszqcomMove提出了闪电贷的新一种运行流程烫手山芋模式根本上弃用相关研究可重入烫手山芋hot-potato模式是一种没有keystorecopy和drop能力的结构是Move程序在交易执行期间仅使用一次的结构1通信重视优质海缆超跌与运营商重估两大投资由于没有dropkey或store能力因此烫手山芋只能通过调用销毁机会2022-12-25函数来完结流程这就如其名所示意的一样这是一块烫手山芋在2通信后5G时代的破局之路2023年度策略流程中任何处置都是烫手的只能交给销毁函数来完结具体流程2022-12-19如下3通信数据资源进表运营商价值重估的催化剂1闪电贷智能合约在工作时会创建了烫手山芋hot-potato的收2022-12-11据receipt2套利者向闪电贷合约贷款时闪电贷合约发送贷款资金和一个烫手山芋收据receipt3套利者利用贷款资金进行套利操作4套利者还款时调用还款函数repay将资金和收据receipt发给还款函数收据被还款函数接收后销毁闪电贷完成的前提的最后正确还款流程结束在流程结束之前恶意合约可以在以太坊系统实现重复调用修改相应的资产账户赋值实现盗取Move系统闪电贷流程结束的前提除了正确归还资金之外还需要将烫手山芋这个资源进行一次性回收销毁处理这确保了闪电贷的原子性风险提示区块链商业模式落地不及预期监管政策的不确定性请仔细阅读本报告末页声明2022年12月29日内容目录1核心观点32以太坊闪电贷的基础动态调用与可重入33Move与Solidity闪电贷的具体实现有怎样的区别531以太坊闪电贷双刃剑动态调用和可重入性532MOVE的烫手山芋没有重入的闪电贷7风险提示8图表目录图表1通过FURUCOMBO完成闪电贷智能合约执行4图表2TheDAO攻击流程5图表3TheDAO攻击流程6图表4Move闪电贷的烫手山芋模式确保还款7P2请仔细阅读本报告末页声明2022年12月29日1核心观点闪电贷作为以太坊DeFi生态最具特色的应用其基础是以太坊使用的Solidity语言允许动态调用和重入虽然这种动态调用是智能合约开放性可组合性的重要体现但其带来的控制权转移和对合约函数的重复调用带来了不小的安全隐患行业内利用闪电贷攻击有漏洞的DeFi资金池事件时有发生由于Move语言不允许动态调用和重入它使用一种烫手山芋模式很简单地实现了闪电贷因此完全可以避免以太坊那样的安全问题两种系统在生态应用的工作模式有着明显的区别这种差别的根本在于Move底层语言的特点我们在前一篇报告Web3底层语言Move弥补了Solidity哪些不足已有详述本篇报告从闪电贷应用角度来比较一下两者实现应用的不同玩法2以太坊闪电贷的基础动态调用与可重入闪电贷FlashLoan是一种原生的DeFi新产物可以理解为极速贷款用户只需要在同一笔交易区块中完成借贷套利偿还并支付一笔手续费由于是原子交易那么借款人无需抵押任何资产即可实现借贷提供了一种无本金套利方案我们在上一篇报告Web3底层语言Move弥补了Solidity哪些不足中提到的对于模块化和合约组合性方面Solidity如以太坊上面的Contract合约通过library相当于静态库进行消息的传递从而实现Contract合约之间的调用交互而Move语言使用了模块module和脚本script的设计前者类似于Contract合约Move语言的合约组合性则是模块之间的组合通过传递资源即前文提到的resources关于组合性方面Solidity和Move的区别非常明显以太坊合约之间的交互是通过互通消息实现的状态一致且允许重入动态调用就是说合约之间的函数可以互相来回调用调用过程中会发生控制权转移这一特点为实现闪电贷提供了基础具体来说在一个以太坊交易中可以进行转账操作以及其他一些列合约操作通过调用智能合约中的功能函数执行多项复杂功能也就是说一笔基于以太坊的交易可以融合一系列复杂交易将借款套利偿还等一系列交易操作融合到一起成为可能FlashLoan中所有操作都在一个区块时间中完成按照现在的以太坊的出块速度Merge后也就是12秒核心并非是12秒而是这一系列的交易要能够最终盈利并偿还如果没有做到这一点这笔交易就不会被打包写入区块相当于借款人借款套利失败这些操作并不是有效交易只是临时状态即原子交易因此用户必须通过编程将需要执行的所有步骤形成一项智能合约交易并完成借贷使用和偿还的三个步骤上述复杂的交易操作由几个合约之间的动态调用实现且这种调用是可重入的也就是可以反复调用目前用户也可以通过如FURUCOMBO这一类第三方项目对闪电贷完成更简易的插件性编程无需实际编写代码完成智能合约的设计最终实现闪电贷需要的全套操作具体的套利流程如下图所示利用FURUCOMBO平台具体兑价均为示例目前KyberswapP3请仔细阅读本报告末页声明2022年12月29日平台上的价格情况1sUSD09927DAI而Uniswap上1DAI12411sUSD用户发现这两个平台的DAI-sUSD交易对价格存在较大的套利空间即可通过FURUCOMBO的界面设计套利过程包括1从AAVE借贷平台的闪电贷功能借出100DAI2通过Uniswap将100DAI兑换成约122个sUSD代币3通过Kyberswap平台将sUSD代币兑换成约122DAI代币4偿还从AAVE借出的100DAI代币以及手续费009DAI5整个利用闪电贷的套利流程在一个以太坊交易内完成并获利约22DAI图表1通过FURUCOMBO完成闪电贷智能合约执行资料来源docsfurucomboapp国盛证券研究所如果在这一笔以太坊交易内借贷的资金没有得到偿还那么整笔借贷交易不会被打包进入区块中相当于借贷并没有实际发生所以借贷方的资金不会受任何影响中间的借贷和套利过程只是临时状态并未被矿工打包确认基于闪电贷的特性和时效要求目前其最广泛的应用是套利交易套利者无需自身使用资产进行套利操作只需要通过闪电贷获得所需的资金量完成套利交易并及时偿还借贷的资金这极大的降低了套利者的准入门槛因为理论上任何一个人都可以成为套利者并且拥有没有上限的套利资金进行操作从上述流程可以看到以太坊合约控制权在FURUCOMBO闪电合约-套利者账户合约-Uniswap合约-Kyperswap合约-闪电贷合约之间切换且可以进行动态调用相应的函数如果DeFi项目平台合约有漏洞套利者能够利用其合约的恶意代码调用相应函数进行资产盗取利用合约之间的状态同步信息差在一个流程未结束时双花资产以太坊资产只是赋值或者重复执行函数本该不被允许的逻辑进行盗取对于Move生态由于资产并非简单的赋值且禁止动态调用和可重入从根本上杜绝了风险其具体实现我们在后面会阐述P4请仔细阅读本报告末页声明2022年12月29日3Move与Solidity闪电贷的具体实现有怎样的区别31以太坊闪电贷双刃剑动态调用和可重入性从实现方式上来看以太坊EVM基于Solidity具有动态调度可以通过可重入实现闪电贷如我们在上一篇报告Web3底层语言Move弥补了Solidity哪些不足中提到的以太坊Solidity的资产是由相应的合约控制如果把TokenA合约比喻为保险箱保险箱会给所有用户分配一个数值余额来表达用户所有拥有的TokenA资产数量但资产本身还是放在TokenA合约的保险箱内而Move用户账户本身就是一个单独的大保险箱由用户自己控制所有的Token资产都放在这个保险箱内且这些Token并不是以数字的形式存在而是不可复制的权限受用户控制的资源类型因此以太坊EVM实现闪电贷套利的流程是1用户将调用控制权交给闪电贷合约2闪电贷合约调用来自外部的套利合约程序中的执行函数将请求的借款金额发送给套利合约套利合约进行套利操作3套利合约完成套利将借款归还给闪电贷合约执行函数完成工作控制权还给闪电贷合约4闪电贷合约检查还款金额是否正确正确则套利交易成功否则失败在上面这个过程中相应的函数是动态调用的闪电贷合约需要检查归还金额是否正确才会结束因此控制权的转移过程是随时可以发生的也就是可重入的同时需要注意的事以太坊账户资产是以数值余额的形式存在重入会带来双花的可能这也是存在漏洞的地方调用外部合约的主要危险之一是它们可以接管控制而这些来自外部的合约程序一旦有漏洞攻击者可以通过反复调用实现攻击即可重入攻击图表2TheDAO攻击流程资料来源国盛证券研究所整理可重入攻击造就了以太坊历史上最严重攻击之一直接导致了以太坊分叉即2016年6月17日的TheDAO崩溃事件黑客部署了一个合约作为投资者在TheDAO中储存一些ETH然后黑客通过调用TheDAO合约中的withdraw函数使得TheDAO合约给黑客提款由于黑客合约fallback函数存在恶意漏洞其没有结束的逻辑于是TheDAO始终未能完成提款此时TheDAO并不知道黑客收到了提款并将其账户余P5请仔细阅读本报告末页声明2022年12月29日额变为0并拿回控制权黑客通过不断调用withdraw函数发送超过其初始存款ETH数量在闪电贷攻击事件中攻击者往往通过恶意合约实现可重入攻击如2022年3月16日黑客通过闪电贷借款利用借贷项目HundredFinance的漏洞实时重入攻击最终获利约2363ETH具体流程并不复杂由于HundredFinance是先转账后记账黑客通过闪电贷借款利用攻击合约存入HundredFinance借款池实现抵押贷款而攻击合约部署的onTokenTransfer函数在记账之前实现重复调用借款函数重入攻击以一笔抵押资产不断从不同借款池提取借款由于是先转账后记账当记账时流程结束黑客已经实现了攻击并获利攻击的核心是流程未结束之前攻击者合约可以反复调用相关函数实现资产盗取图表3TheDAO攻击流程资料来源国盛证券研究所整理就好比说攻击者合约将资产抵押给A银行项目A借款池进行贷款银行A在未完成记账结算之前就开始放款而银行A完成记账结算流程意味着闪电贷交易要成功原子性这时候资产被A入库记账但由于银行A和其他银行之间的信息不同步合约函数之间的状态不同步攻击者在A银行还未完成资产入库记账时即被攻击合约贷款流程未结束时这时候闪电贷工作流程还未结束合约函数调用还可以进行再次以该资产在BC等其他银行进行抵押贷款重入待流程结束攻击者已经完成闪电贷攻击并获利重入攻击的前提攻击者部署的合约存在恶意代码但最核心的因素是1以太坊合约调用时控制权存在转移这为恶意合约提供了主动权2且流程在结束之前可以重入重复调用恶意合约可以利用漏洞反复调用函数实现资产盗取如一笔取款流程未结束时反复提取很多次3加上以太坊账户资产是以数值余额的形式存在因此存在反复盗取资产双花的可能或者在流程结束之前恶意合约就可以修改相关账户资产余额数值实现盗取可重入是实现闪电贷的基础然而一旦目标合约有漏洞攻击者便可以实施重入攻击这在我们前一篇报告中有详述P6请仔细阅读本报告末页声明2022年12月29日32MOVE的烫手山芋没有重入的闪电贷Move语言禁止动态调用和可重入这从根本上杜绝了重入攻击但Move系统的资产作为资源类型一旦借出就相当于发生了真实转移该如何确保闪电贷顺利还款呢Move提出了闪电贷的新一种运行流程烫手山芋模式根本上弃用可重入烫手山芋hot-potato模式是一种没有keystorecopy和drop能力的结构是Move程序在交易执行期间仅使用一次的结构由于没有dropkey或store能力因此烫手山芋只能通过调用销毁函数来完结流程这就如其名所示意的一样这是一块烫手山芋在流程中任何处置都是烫手的只能交给销毁函数来完结具体流程如下1闪电贷智能合约在工作时会创建了烫手山芋hot-potato的收据receipt2套利者向闪电贷合约贷款时闪电贷合约发送贷款资金和一个烫手山芋收据receipt3套利者利用贷款资金进行套利操作4套利者还款时调用还款函数repay将资金和收据receipt发给还款函数收据被还款函数接收后销毁我们在前一篇报告中已经分析过账户资产和收据receipt都是一种资源类型不能复制丢弃或重用可以被安全地存储和转移因此收据receipt必须被处理且只能使用一次而非像以太坊那样的对账户进行数值赋予处理就行因此烫手山芋模式可以确保被借出的资产资源类型一旦借出就真实发生转移了必须被归还收据receipt作为烫手山芋就好比是定时一个引爆器这里的定时是闪电贷套利作为一个原子交易的时间并非具体的时长资金和引爆器一起绑定被借出而任何一方都无法收留引爆器它必须被还回原处得以拆除否则交易都无法完成因此闪电贷资金可以确保会被归还图表4Move闪电贷的烫手山芋模式确保还款资料来源国盛证券研究所整理闪电贷完成的前提的最后正确还款流程结束在流程结束之前恶意合约可以在以太坊P7请仔细阅读本报告末页声明2022年12月29日系统实现重复调用修改相应的资产账户赋值实现盗取Move系统闪电贷流程结束的前提除了正确归还资金之外还需要将烫手山芋这个资源进行一次性回收销毁处理这确保了闪电贷的原子性从应用角度看Web3的底层代表要在保证开放性可重构的基础上提高代码安全性在Web3中代码不仅包含信息还直接涉及资产调用保证用户资产安全是重中之重否则Web3将是黑暗森林以太坊的生态让大家看到了智能合约的活力下一个时代将在此基础上向安全性合规性继续演进这也是我们当下关注Web3底层语言进化的核心逻辑或者这孕育着下一轮的创新浪潮风险提示区块链商业模式落地不及预期区块链密码学等相关技术和项目处于发展初期存在商业模式落地不及预期的风险监管政策的不确定性区块链项目实际运行过程中涉及到多项金融网络及其他监管政策目前各国监管政策还处于研究和探索阶段并没有一个成熟的监管模式所以行业面临监管政策不确定性的风险P8请仔细阅读本报告末页声明2022年12月29日免责声明国盛证券有限责任公司以下简称本公司具有中国证监会许可的证券投资咨询业务资格本报告仅供本公司的客户使用本公司不会因接收人收到本报告而视其为客户在任何情况下本公司不对任何人因使用本报告中的任何内容所引致的任何损失负任何责任本报告的信息均来源于本公司认为可信的公开资料但本公司及其研究人员对该等信息的准确性及完整性不作任何保证本报告中的资料意见及预测仅反映本公司于发布本报告当日的判断可能会随时调整在不同时期本公司可发出与本报告所载资料意见及推测不一致的报告本公司不保证本报告所含信息及资料保持在最新状态对本报告所含信息可在不发出通知的情形下做出修改投资者应当自行关注相应的更新或修改本公司力求报告内容客观公正但本报告所载的资料工具意见信息及推测只提供给客户作参考之用不构成任何投资法律会计或税务的最终操作建议本公司不就报告中的内容对最终操作建议做出任何担保本报告中所指的投资及服务可能不适合个别客户不构成客户私人咨询建议投资者应当充分考虑自身特定状况并完整理解和使用本报告内容不应视本报告为做出投资决策的唯一因素投资者应注意在法律许可的情况下本公司及其本公司的关联机构可能会持有本报告中涉及的公司所发行的证券并进行交易也可能为这些公司正在提供或争取提供投资银行财务顾问和金融产品等各种金融服务本报告版权归国盛证券有限责任公司所有未经事先本公司书面授权任何机构或个人不得对本报告进行任何形式的发布复制任何机构或个人如引用刊发本报告需注明出处为国盛证券研究所且不得对本报告进行有悖原意的删节或修改分析师声明本报告署名分析师在此声明我们具有中国证券业协会授予的证券投资咨询执业资格或相当的专业胜任能力本报告所表述的任何观点均精准地反映了我们对标的证券和发行人的个人看法结论不受任何第三方的授意或影响我们所得报酬的任何部分无论是在过去现在及将来均不会与本报告中的具体投资建议或观点有直接或间接联系投资评级说明投资建议的评级标准评级说明评级标准为报告发布日后的6个月内公司股价或行业买入相对同期基准指数涨幅在15以上指数相对同期基准指数的相对市场表现其中A股市增持相对同期基准指数涨幅在515之间股票评级场以沪深300指数为基准新三板市场以三板成指针持有相对同期基准指数涨幅在-55之间对协议转让标的或三板做市指数针对做市转让标的减持相对同期基准指数跌幅在5以上为基准香港市场以摩根士丹利中国指数为基准美股增持相对同期基准指数涨幅在10以上市场以标普500指数或纳斯达克综合指数为基准中性相对同期基准指数涨幅在-1010之行业评级间减持相对同期基准指数跌幅在10以上国盛证券研究所北京上海地址北京市西城区平安里西大街26号楼3层地址上海市浦明路868号保利One561号楼10层邮编100032邮编200120传真010-57671718电话021-38124100邮箱gsresearchgszqcom邮箱gsresearchgszqcom南昌深圳地址南昌市红谷滩新区凤凰中大道1115号北京银行大厦地址深圳市福田区福华三路100号鼎和大厦24楼邮编330038邮编518033传真0791-86281485邮箱gsresearchgszqcom邮箱gsresearchgszqcomP9请仔细阅读本报告末页声明
|
|