DEFI:区块链安全 | 用户余额无故消失?Opyn ETH Put逻辑漏洞技术分析

事件简述

8月5日凌晨四点,有用户在opyn论坛反馈自己的账户余额无故消失,并有用户发现可疑的交易信息,如下图所示:

Opyn项目方再对情况初步分析后做出回应表示:已经转移了资金,并正在寻找问题原因

截至发稿前,官方发文回应此次事件:遭到黑客攻击,并已对可能遭受攻击的资产进行转移,但此次漏洞只涉及ETH合约,并不影响其他合约。如下图所示:

浙江宁波将区块链技术融入不动产登记:近日,浙江省宁波市不动产登记中心与某公司就区块链技术在不动产登记、不动产抵押贷款领域的多业务协同创新和推广应用签订了全面合作框架协议,标志着宁波开启“链上登记+链上金融”集成化“政银”服务模式创新。(法制日报)[2020/11/3 11:29:16]

成都链安-安全实验室第一时间对本次事件进行跟踪分析,以下是态势感知系统检测盗的攻击者合约地址:

0xe7870231992ab4b1a01814fa0a599115fe94203f

0xb837531bf4eb8ebfa3e20948bd14be067c18cbd3

动态 | 日本经济产业省发布“大学、研究机构采用区块链技术的可能性”主题报告:据日本经济产业省官网消息。4月23日,日本经济产业省发布了以“大学、研究机构采用区块链技术的可能性”为主题的调查报道。 报告提到,虽然区块链技术仍处于发展之中,但其可以根据需要应用于各个领域,有必要分析该技术投入实用的需求和问题,并确保区块链的持久性。在“学位、履历管理”领域,区块链技术可用于“正确核实任何已不复存在的发行人过去曾签发的证书”,这在现有制度下是很难做到的。而在“研究数据可信度担保”领域,海内外已有一些组织正运行着具有一定可性度的中心化系统,只要这些系统具有成本优势且功能正常,就没有必要强行应用区块链技术。 报告总结到,随着(日本)加密货币交易市场的日益活跃,以金融机构为中心的区块链技术应用研究开发、技术实验也日趋活跃。从国际竞争力的角度考虑,有必要稳步发展区块链技术,并将标准化工作与推广切实联系起来。[2019/4/23]

0xb72e60ea1d0c04605f406c158dce9ac6ae6d224c

分析 | 美国科技巨头进军区块链较慢 但未来仍有可能继续担当领头羊:据链塔智库,美国科技巨头进入区块链较慢,投资机构表现更为谨慎。美国区块链专利申请量全球排名第二;50所高校开设了区块链课程,为人才储备提供支持。从稳定币的发布及人才储备来看,未来在区块链领域,美国仍有可能继续担当领头羊角色。[2018/9/17]

攻击者攻击方式还原:

攻击者调用合约向合约发送n个USDC增加抵押,并得到合约币oETH

攻击者调用合约发送ETH进行抵押,并销毁oETH以赎回自己的USDC

攻击者赎回自己抵押的ETH。

如下图所示:

行情 | 美股区块链概念股普遍收跌:柯达收平,Accenture收跌0.97%,Overstock.com收跌4.41%;Riot Blockchain收跌3.09%,Marathon Patent收涨0.16%,Square收跌3.93%,Seven Stars Cloud收涨3.19%。[2018/6/28]

在步骤二中,攻击者调用exercise函数,并向其传递了两个地址A、B和两倍自己应得的USDC,程序正常执行,这导致地址B的资金受损。

技术分析

以交易0x56de6c4bd906ee0c067a332e64966db8b1e866c7965c044163a503de6ee6552a为例,攻击者通过合约0xe7870231992ab4b1a01814fa0a599115fe94203f对合约0x951D51bAeFb72319d9FBE941E1615938d89ABfe2发动攻击,此笔交易中共获利$9907。如下图所示:

百度肖伟:希望借助区块链建立百度百科的公信力:百度区块链首席架构师肖伟今日表示,百度百科是一个开放的平台,百度希望通过区块链建立和社会垂直行业建立一些联盟,通过区块链网络多中心共识以及用户评价确保内容质量,建立公信力,从而保证百度百科的权威性。[2018/4/27]

攻击者首先调用了addERC20CollateralOption函数,向合约中发送了9900个USDC,如下图所示:

此函数中的addERC20Collateral(msg.sender,amtCollateral);负责代理转账USDC;函数中的issueOTokens(amtToCreate,receiver);负责铸币oETH,此笔交易铸币30个oETH并发送给了攻击者,如下图所示:

在此完成后,攻击者的vault参数进行了变化。vault.oTokensIssued和vault.collateral分别更新300000000和9900000000为如下图所示:

然后攻击者开始将oETH兑换出来。

调用exercise,构造参数oTokensToExercise为60,vaultsToExerciseFrom为两个地址,其中一个是也满足条件的他人地址。如下图所示:

Exercise函数运行_exercise(vault.oTokensIssued,vaultOwner);分支,将30oETH相应比例的USDC发送给调用者,如下图所示:

我们可以注意到,在最终转账时,_exercise是将USDC转给了msg.sender,也就是攻击者。

我们回头看exercise中存在者for循环,攻击者输入的oTokensToExercise为60,所以合约再验证了第二个地址符合条件的情况下,依旧会将余额转给msg.sender,也就是攻击者。这就使得攻击者可以获得两次USDC,从而获得利润。

总结建议

此次事件攻击者利用了exercise函数的逻辑缺陷。此函数在进行最后转账前并未验证调用者是否有权限赎回此地址的USDC,只是简单的验证了地址是否可以赎回。属于代码层的逻辑漏洞,并且根据官方回复,此合约是经过安全审计的。成都链安在此提醒各项目方:

项目上线前应当进行足够有效的安全审计,最好是多方审计

对于合约的应当设置暂停合约交易等功能,在发生安全事件时,可以以保证资金安全

安全是一个持续的过程,绝非一次审计就能保平安,与第三方安全公司建立长期的合作至关重要

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

链链资讯

[0:31ms0-3:70ms