JAR:Pickle Finance遭攻击损失近2000万美元DAI 未经严格审计的DeFi路在何方?

这一周,“科学家”们很忙。

11月14日,黑客攻击ValueDeFi的MultiStablesVault池子,获得近740?万美金的DAI;11月17日,黑客攻击OriginProtocol凭空铸造2050万枚OUSD。

今天凌晨2时37分,当人们还在熟睡之时,黑客攻击DeFi协议PickleFinance,捞得近2000万美元的DAI。

加密货币再次登上央视?DeFi沦为“科学家”的提款机?

11月18日,比特币冲击18,000美元,加密货币再次登上央视,此前,加密货币被誉为去中心化的金融工具首次登上央视。据央视报道,从投资回报率的角度来看,加密货币是今年真正的“头号”投资产品。“彭博银河加密货币指数”上涨约65%,超过金价逾20%的涨幅,也超过全球股市、债市和大宗商品市场的收益率。涨幅较高的一个关键原因是以太坊币价暴涨,涨幅达到169.40%。

外媒:Yearn Finance合并Pickle或为垄断人才:11月29日消息,高级开发人员Banteg发推表示,尽管Cronje的博客文章将Yearn 和Pickle的工作描述为“合并”,但Pickle公告是“开发人员合作”,并且Yearn Twitter官方帐户将其描述为“共生关系”。 分析师Tyler Reynolds表示,激励、培训和引入新开发人员已成为该协议的优先事项,挖走有才华的开发人员和垄断人才是Yearn的直接举措。(cointelegraph)[2020/11/29 22:29:39]

央视解释道:“以太坊币价格攀升得益于去中心化金融工具的使用增加,以及疫情肆虐后各国出台的巨额刺激措施,让投资者选择了比特币、以太坊等加密货币进行保值。”

一方面,加密货币市场频频发出利好消息;另一方面,DeFi项目因未经严格审计频遭攻击。

慢雾揭秘Pickle Finance被黑过程:2020 年 11 月 22 日,以太坊 DeFi 项目 Pickle Finance 遭受攻击,损失约 2000万DAI。慢雾安全团队跟进相关事件并进行分析,以下为分析简略过程:

1、项目的 Controller 合约中的 swapExactJarForJar 函数允许传入两个任意的 jar 合约地址进行代币的兑换,其中的 _fromJar, _toJar, _fromJarAmount, _toJarMinAmount 都是用户可以控制的变量,攻击者利用这个特性,将 _fromJar 和 _toJar 都填上自己的地址,_fromJarAmount 是攻击者设定的要抽取合约的 DAI 的数量,约 2000万 DAI。

2、使用 swapExactJarForJar 函数进行兑换过程中,合约会通过传入的 _fromJar 合约和 _toJar 合约的 token() 函数获取对应的 token 是什么,用于指定兑换的资产。 而由于 _fromJar 合约和 _toJar 合约都是攻击者传入的,导致使用 token() 函数获取的值也是可控的,这里从 _fromJar 合约和 _toJar 合约 获取到的 token 是 DAI。

3. 此时发生兑换,Controller 合约使用 transferFrom 函数从 _fromJar 合约转入一定量的的 ptoken,但是由于 fromJar 合约是攻击者控制的地址,所以这里转入的 ptoken 是攻击者的假币。同时,因为合约从 _fromJar 合约中获取的 token 是 DAI,然后合约会判断合约里的资金是否足够用于兑换,如果不够,会从策略池中赎回一定量的代币 然后转到 Controller 合约中。在本次的攻击中,合约中的 DAI 不足以用于兑换,此时合约会从策略池中提出不足的份额,凑够攻击者设定的 2000万 DAI 。

4. 兑换继续,Controller 合约在从策略池里提出 DAI 凑够攻击者设定的 2000万 DAI后,会调用 _fromJar 的 withdraw 函数,将攻击者在第三步转入的假 ptoken burn 掉,然后合约判断当前合约中 _toJar 合约指定的 token 的余额是多少,由于 _toJar 合约指定的 token 是 DAI,Controller 合约会判断合约中剩余 DAI 的数量,此时由于 第三步 Control[2020/11/22 21:39:57]

据悉,今年9月10?日酸黄瓜PickleFinance启动流动性挖矿,9月14日V神发推文赞赏该项目,使其代币价格暴涨10倍。而遭到此次攻击后,酸黄瓜损失近价值2000万的DAI,同时24小时内其代币腰斩。

Pickle协议发生程序问题 官方提醒暂时不要提币:9月30日早间,Pickle Finance官方发推称,Pickle协议PIP-8迁移未同步进行产生问题,在区块10958758高度前在代币池进行提款的用户受到影响。官方声明称:

1.Pickle协议上的其他函数未受影响,所发生的问题不是智能合约的问题,只是程序问题;

2.错误致使系统将提现金额计算产生误差,但代币仍在PickleJar(代币池)中,没有丢失;

3.官方将收回资金,并将应得资金余额返回给提款的人;

4.由于受到12小时时间锁的限制,在12小时内官方不能采取任何有效措施,

5.官方将在区块10959175处进行快照,以确定获得补偿的用户。与此同时,官方将不能补偿在此区块之后提款的用户。

6.用户需克制不要将代币从代币池中提出,直到官方发布通知。[2020/9/30]

CoinmarketCap数据显示,PickleFinance代币的价格在24小时内,从22.7美元跌到10.2美元,它的市值在未销毁的情况下,24小时内蒸发了1220万美元。

SPiCE代币化区块链基金在马来西亚扶桑交易所上市:金色财经报道,SPiCE Venture Capital已将其代币化区块链基金(SPiCE VC)在马来西亚扶桑交易所(Fusang Exchange)上市。该公司董事Tal Elyashiv表示,扶桑将向亚洲的全球投资者、家族办公室和机构介绍SPiCE VC。[2020/9/2]

发生了什么?

PeckShield通过追踪和分析发现,攻击者通过StrategyCmpdDaiV2.getSuppliedUnleveraged()函数查询资产余额1972万美元;

随后,攻击者利用输入验证漏洞将StrategyCmpdDaiV2中的所有DAI提取到PickleJar:这个漏洞位于ControllerV4.swapExactJarForJar()函数中,其中包含两个既定的伪Jar。在未验证既定Jar的情况下,此步骤会将存入的所有DAI提取到PickleJar,并进行下一轮部署。

声音 | Epic Games创始人:Fortnite接受门罗币支付是“偶然”:据The block消息,游戏团队Epic Games创始人、在线视频游戏Fortnite的创造者Tim Sweeney在twitter上发帖称,“实际上,Fortnite商店对加密货币的短暂尝试是偶然的。我们与合作伙伴合作开设了一家商品店,并启用了Monero(门罗币)付款方式”。目前,Fortnite的官方商店已经取消了Monero的支付选项。不过,Sweeney补充说,Epic Games的许多员工都是加密货币技术的“超级粉丝”,“在将该技术推广到包括年轻玩家在内的广大用户之前,还要在波动性和反欺诈方面做大量工作。”此前消息,在线视频游戏Fortnite的商品店已开始“独家”接受Monero(XMR)作为加密货币支付选项,Monero官方推特也公布了这一消息。[2019/1/7]

接下来,攻击者调用earn()?函数将提取的DAI部署到StrategyCmpdDaiV2中。在内部缓冲区管理中,黑客调用了三次earn()函数,在StrategyCmpdDaiV2中生成共计950,818,864.8211968枚cDAI;

第一次调用earn()函数存入1976万枚DAI,铸造903,390,845.43581639枚cDAI;

第二次调用earn()函数存入98.8万枚DAI,铸造45,169,542.27179081枚cDAI;

第3次调用earn()函数存入4.9万枚DAI,铸造2,258,477.11358954枚cDAI;

随后,攻击者调用?ControllerV4.swapExactJarForJar()?函数,利用任意代码执行将?StrategyCmpdDaiV2?中的所有?cDAI?提取出来,这一步中,_execute()?函数有两个参数:_target和?_data,_target?指的是目标地址,即图中橘色所示部分;_target?是一个加白的地址,攻击者没办法任意控制此地址,此处他们利用的是?CurveProxyLogic,该加白的合约(能通过?262?行?approvedJarConverter?的检查。也就是说,能被完全控制的是参数?_data,即图中紫色所示部分,_data?中包含?_execute()?函数可调用的add_liquidity()?函数,以及传给?add_liquidity()?的所有参数。

此时,咱们回到橘色框里的curve、curveFunctionSig、curvePoolSize、curveUnderlyingIndex、underlying,其中curve是一个地址,它表示橘色框里倒数第二行中的curve.call()?函数可以执行任意一个合约,因此,攻击者把curve设置成StrategyCmpdDaiV2,curveFunctionSig表示除了刚刚指定合约外,还可以指定要调用此合约的函数,通过此操作攻击者成功调用StrategyCmpdDaiV2.withdraw()?函数。

接下来就是组织蓝色框中的函数StrategyCmpdDaiV2.withdraw()?的参数?_asset,蓝色框中的?_asset实际上是橘色框框里的liquidity,liquidity由传入函数add_liquidity()?的underlying得来,underlying是另一个伪造的合约地址,它的balanceOf()?函数会返回cDAI的地址。攻击者将cDAI的地址设置成liquidity?,然后,liquidity被打包到callData里再传给withdraw()?函数,使得withdraw()?函数取出的?_asset就是cDAI的地址。值得注意的是,如果want==_asset,蓝色框里的函数就不执行,此设计的目的在于want是不允许被取出的,所以攻击者刻意取出对应的cDAI。

最后,执行回ControllerV4.swapExactJarForJar()函数,所提取的cDAI被存入恶意的?_toJar.在_toJar.deposit()函数里,所有950,818,864.8211968枚cDAI立即转入黑客地址

未经严格审计的DeFi能走多远?

针对此次PickleFinance被攻击事件,其审计公司Haechi发推文称,今年10月对其代码进行了一次审计,但是攻击者利用的漏洞发生在新创建的智能合约中,而不是接受安全审计的智能合约中。与此次漏洞攻击相关的代码存在于controller-v4.sol中的swapExactJarForJar,而非此前审计的controller-v3.sol中,该智能合约不包含swapExactJarForJar。

对此,PeckShield相关负责人表示:“有一些DeFi项目在做过第一次智能合约安全审计后,可能会为了快速上线主网,省略审计新增的智能合约,这种省略或能争取短时的利益,但就像此次攻击一样最终因小失大。DeFi们在上线之前一定要确保代码进行彻底地审计和研究,防范各种可能发生的风险。”

未经严格审计即上线的DeFi项目能走多远?

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

地球链

[0:15ms0-0:874ms