这一周,“科学家”们(利用技术实力和知识门槛专薅?DeFi?的羊毛的黑客)很忙。 11月14日,黑客攻击?Value DeFi?的?MultiStablesVault?池子,获得近?740?万美金的?DAI;11月17日,黑客攻击Origin Protocol?凭空铸造?2050万?枚OUSD。 今天凌晨 2 时 37 分,当人们还在熟睡之时,黑客攻击 DeFi 协议 Pickle Finance(酸黄瓜),捞得近 2000 万美元的 DAI。 加密货币再次登上央视?DeFi沦为“科学家”的提款机? 11月18日,比特币冲击 18,000 美元,加密货币再次登上央视,此前,加密货币被誉为去中心化的金融工具首次登上央视。 据央视报道,从投资回报率的角度来看,加密货币是今年真正的“头号”投资产品。“彭博银河加密货币指数”上涨约65%,超过金价逾20%的涨幅,也超过全球股市、债市和大宗商品市场的收益率。涨幅较高的一个关键原因是以太坊币价暴涨,涨幅达到169.40%。 央视解释道:“以太坊币价格攀升得益于去中心化金融工具(DeFi)的使用增加,以及疫情肆虐后各国出台的巨额刺激措施,让投资者选择了比特币、以太坊等加密货币进行保值。” 一方面,加密货币市场频频发出利好消息;另一方面,DeFi 项目因未经严格审计频遭攻击。 据悉,今年 9 月 10?日 酸黄瓜 Pickle Finance 启动流动性挖矿,9 月 14 日 V神发推文赞赏该项目,使其代币价格暴涨 10 倍。而遭到此次攻击后,酸黄瓜损失近价值 2000 万的 DAI,同时 24 小时内其代币腰斩。 CoinmarketCap 数据显示, Pickle Finance 代币(Pickle)的价格在24小时内,从 22.7 美元跌到 10.2 美元,它的市值在未销毁的情况下, 24小时内蒸发了 1220 万美元。 发生了什么? PeckShield 通过追踪和分析发现,攻击者通过StrategyCmpdDaiV2.getSuppliedUnleveraged() 函数查询资产余额 1972万 美元; 随后,攻击者利用输入验证漏洞将 StrategyCmpdDaiV2 中的所有 DAI 提取到 Pickle Jar:这个漏洞位于 ControllerV4.swapExactJarForJar() 函数中,其中包含两个既定的伪 Jar。在未验证既定 Jar 的情况下,此步骤会将存入的所有 DAI 提取到 Pickle Jar,并进行下一轮部署。 接下来,攻击者调用 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[_targets[i]?的检查。也就是说,能被完全控制的是参数? _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[0]?(此处的?0?也是 add_liquidity()?函数的参数 curveUnderlyingIndex),然后,liquidity 被打包到 callData 里再传给 withdraw()?函数,使得 withdraw()?函数取出的?_asset 就是 cDAI 的地址。值得注意的是,如果 want == _asset ,蓝色框里的函数就不执行,此设计的目的在于 want (也就是 DAI)是不允许被取出的,所以攻击者刻意取出对应的 cDAI。 最后,执行回 ControllerV4.swapExactJarForJar() 函数, 所提取的cDAI 被存入恶意的?_toJar . 在 _toJar.deposit() 函数里, 所有 950,818,864.8211968 枚 cDAI 立即转入黑客地址。 未经严格审计的DeFi能走多远? 针对此次?Pickle Finance(酸黄瓜)被攻击事件,其审计公司?Haechi?发推文称,今年?10?月对其代码进行了一次审计,但是攻击者利用的漏洞发生在新创建的智能合约中,而不是接受安全审计的智能合约中。与此次漏洞攻击相关的代码存在于?controller-v4.sol?中的?swapExactJarForJar,而非此前审计的?controller-v3.sol?中,该智能合约不包含?swapExactJarForJar。 对此,PeckShield 相关负责人表示:“有一些 DeFi 项目在做过第一次智能合约安全审计后,可能会为了快速上线主网,省略审计新增的智能合约,这种省略或能争取短时的利益,但就像此次攻击一样最终因小失大。DeFi 们在上线之前一定要确保代码进行彻底地审计和研究,防范各种可能发生的风险。” 未经严格审计即上线的 DeFi 项目能走多远? —- 编译者/作者:PeckShield 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
PickleFinance遭攻击损失近2000万美元DeFi路在何方?
2020-11-23 PeckShield 来源:区块链网络
- 上一篇:OK提币事件尘埃落定“持豆人”有救了
- 下一篇:供应链金融|艾鸥科技参访宁波银行
LOADING...
相关阅读:
- AngelEX合约对冲+聚合跟随正式版本荣耀上线2020-11-23
- 由于近期突破关键交易区间,Chainlink价格可能即将大幅上涨2020-11-23
- 至尊所BestDEx合约持仓情况2020年11月23日10:00播报2020-11-23
- 领峰环球:怎样选择外汇交易系统就看这几点2020-11-23
- Ripple推动XRP与加密货币在世界各地的政府中2020-11-23