BAN:DeFi平台Opyn智能合约漏洞详解:攻击者空手套白狼_banana币发展怎么样

北京时间2020年08月05日,DeFi期权平台Opyn的看跌期权智能合约遭到黑客攻击,损失约37万美元。Opyn是一个通用期权协议,于今年2月份转型为保险平台,通过oTokens为DeFi平台提供可交易的ETH看跌期权,以此锚定ETH市场价格,为高波动性的DeFi市场提供相对的稳定性。PeckShield安全团队获悉Opyn平台遭受攻击后,迅速定位到问题关键点在于:攻击者发现Opyn智能合约行权接口对接收到的ETH存在某些处理缺陷,其合约并没有对交易者的实时交易额进行检验,使得攻击者可以在一笔对自己发起真实的交易之后,再插入一笔伪装交易得卖方所抵押的数字资产,进而实现空手套白狼。简单来说,由于OpynETHPut智能合约中的行权函数exercise()没有对交易者的ETH进行实时校验。根据Opyn平台的业务逻辑,看跌期权的买方给卖方转移相应价值的ETH,即可获得卖方抵押的数字资产。狡猾的攻击者,先向自己发起伪装的交易,利用这笔ETH可以重复使用的特性,再次向卖方用户发起转账,进而取卖方已经抵押的数字资产。下面为您详细分析漏洞原因及攻击过程。漏洞详细过程分析

IBM多项混合云、AI及区块链产品被列入中国信通院《开源供应商全景观察》报告:10月27日消息,IBM宣布其多项基于企业级开放技术的混合云、AI及区块链产品获中国信息通信研究院批准并采纳,列入其最新发布的《开源供应商全景观察》报告。这是信通院2021年5月公布“首批可信开源供应商名录”以来发布的第二批可信开源厂商及产品名单。[2021/10/27 21:01:46]

先来说说,Opyn平台的业务逻辑:当用户使用Opyn合约行权即买卖期货时,需要买方向卖方转入相应数量的ETH或者ERC20Token,然后合约将销毁买方对应的oToken,而后买方将获得卖方已经抵押的资产。例如:小王认为行情进入了下跌趋势,看到Opyn上挂着一个小李对ETH330美元的看跌期权,于是进入交易系统,向小李转账一个ETH,获得小李抵押的等额数字资产。若此刻行情已经跌至了300美元,小王便可获得其中的差价。

中国联通完成区块链BaaS及应用+量子通信测试验证:12月25日消息,中国联通近日在“京雄量子加密干线”上成功完成区块链BaaS及应用+量子通信的验证测试。测试团队跨京雄量子加密干线部署区块链BaaS基础设施节点与联盟区块链应用,在量子信息安全保障下验证区块链账本数据同步、共识、账本数据读写、智能合约管理、区块链节点管理等区块链及应用操作,相关功能及稳定性达到业务运行预期,充分验证了量子通信+区块链结合的安全性、可行性与稳定性,为量子通信+区块链技术在金融、政务、供应链、智慧城市等多领域的落地提供了全新的应用示范。(C114通信网)[2020/12/25 16:29:31]

声音 | 中国软件行业协会邹均:区块链是保护管理数字资产的重要工具:据中国企业报消息,第十七届中国企业发展论坛中国区块链企业峰会近日在京召开。中国软件行业协会区块链分会专家委员会主任邹均在会上表示,区块链作为数字经济时代的重要技术,可以帮助企业进行数字化转型,不单可以在生态中建立信任、改善生产关系,而且可以提升数字经济的生产力,因为区块链是保护管理数字资产的重要工具,也是改善营商环境,促进产业互联网的可信协同的重要工具。[2019/12/24]

图1.exercise()函数中循环执行传入的vaults地址列表如上面的合约代码片段所示,行权函数exercise()的内部是一个循环,依据参数中传递的vaultsToExerciseFrom中的地址数量依次调用真正的行权逻辑_exercise()函数。

动态 | 2018年中国区块链市场支出规模预计达1. 6亿美元:据36氪消息,根据IDC《全球半年度区块链支出指南》数据显示,2017年中国区块链市场支出规模约为8300万美元,预计2018年中国区块链市场支出规模达1. 6亿美元。现阶段区块链的总体市场规模较小,这是因为市场上的区块链项目多处于尝试阶段,投入不大。另一方面,很多企业已经认识到了区块链的潜力,计划在未来增加预算,受此影响,中国区块链市场将迎来快速增长,2022年的市场支出规模预计达到14.2亿美元,2017–2022年的年均复合增长率为76.3%。[2018/11/12]

图2.重用传入合约的ETH来获得抵押资产函数处理ERC20Token时,和大部分的DeFi项目做法一样,使用transferFrom(),如代码1882行所示,从msg.sender转账到address(this)。但是当函数处理的资产为ETH时,处理的方式就完全不一样了。因为在Solidity中,msg.value的意思是合约调用者在调用具有payable接口时所转给该合约的ETH数量,仅是一个量值,所以在合约代码的1879行中,检查msg.value==amtUnderlyingToPay仅能确保合约确实收到了amtUnderlyingToPay数量的ETH,并不会对msg.value的值造成任何影响。但是正如上面讲到的在exercise()中会循环调用_exercise()函数,这导致尽管合约实际只收到一次ETH,然而在循环过程中却可以重复使用。攻击点就在这里,由于合约少了一步对ETH实时数量的检验,使得攻击者可以先伪造一笔指向自己的交易,然后再把已经花掉的本金再次利用,和平台其他用户完成一笔正常交易。

图3.攻击交易分析在图3中,我们通过Bloxy浏览器显示的调用过程来展示攻击的过程。由于攻击者吃掉了很多笔订单,我们以其中一笔交易为例,向大家展示其攻击逻辑:1、攻击者先从Uniswap购入了75oETH为进一步调用函数行权做好筹备;2、攻击者创建了一个Vault地址,作为看空期权卖方,并且抵押24,750USDC铸造出75oETH,但并未卖出这些期权,等于自己同时买入了以330的价格卖出75ETH的权利;3、攻击者在Opyn合约中调用了exercise(),在持有150oETH看空期权的情况下,先向自己的Vault地址转入了75个ETH,获得自己事先抵押的24,750个USDC,再重利用了这75个ETH,成功吃掉了另一个用户的24,750个USDC,进而实现非法获利。修复建议

PeckShield安全团队建议,在Solidity中,合约可使用一个局部变量msgValue来保存所收到ETH。这样,在后续的步骤中通过操作msgValue,就能准确的标记有多少ETH已经被花费,进而避免资产被重复利用。此外,我们还可以使用address(this).balance来检查合约余额来规避msg.value被重复使用的风险。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

区块博客

[0:0ms0-3:339ms