DeFi平台Balancer遭黑客攻击全过程技术拆解

区块链资讯PeckShield2020-06-30 15:14:15  阅读 -评论 0

北京时间06月29日凌晨02时03分起,最近因“借贷即挖矿”模式而备受关注DeFi 平台 Balancer 上的 STASTONK 两个 ERC20 通缩代币池遭到了黑客攻击,共计损失了超50万美元。
PeckShield 安全人员介入分析后,迅速定位到问题的本质在于,Balancer 上的通缩型代币和其智能合约在某些特定场景不兼容,使得攻击者可以创建价格偏差的 STA/STONK 流通池并从中获利。
此次黑客实施攻击共计分了四个步骤,具体而言:
1)攻击者通过闪电贷从 dYdX 平台借出了 104,331 个 WETH
2)攻击者反复执行 swapexactMountin() 调用,直至 Balancer 拥有的大部分 STA 代币被消耗殆尽,进而开始下一步攻击。最终 Balancer 仅仅剩余 0.000000000000000001 个 STA。
3)攻击者利用 STA 代币和 Balancer 智能合约存在的不兼容性即记账和余额的不匹配性实施攻击,将资金池中的其他资产耗尽,最终共计获利价值 523,616.52 美元的数字资产
4)攻击者 偿还从 dYdX 借出的闪电贷,并卷走了攻击所得的数字资产。
接下来的篇幅中,我们将逐步解析黑客在该笔闪电贷交易(http://oko.palkeo.com/0x013be97768b702fe8eccef1a40544d5ecb3c1961ad5f87fee4d16fdc08c78106/) 中实施的攻击行为。

Balancer 遭黑客攻击全过程技术拆解

第一步:闪电贷
从 dYdX 闪电贷 104,331 WETH,这部分熟悉 DeFi 借贷模式的读者应该都比较清楚,此处不再赘述。
第二步:清空 Balancer 的 STA 资产
攻击者通过多次 swapExactAmountIn() 调用清空了 Balancer 的 STA 资产,为下一步实施攻击做准备。值得一提的是,我们发现合约代码中每次能够兑换的资产数额其实有上限,然而狡猾的攻击者预先计算了可兑换的 WETH 最大数额,并巧妙的让 Balancer 只剩了 0.000000000000000001 STA。
由于 Balancer 资金池(BPool)各资产间存在“动态平衡”原理,仅剩接近于 0 的 STA 会拉高 STA 的价值,使得任何人都可以用 1 STA 换到大量的其他数字资产。
第三步:攻击获利
经过前两个准备步骤之后,攻击者是时候展现真正技术了!

承上所述,攻击者通过 swapExactAmountIn() 函数将 0.000000000000000001 STA 发送到 BPool,以极高的价值差,立即兑换出了 30,347 个WETH,实现了获利。而此时,BPool 的内部记账机制 _records[STA] 在 BPool 真正收到 0.000000000000000001 STA 之前先加了 1(注:此后攻击者会用gulp()对该数值进行重置)。

另外我们发现,在 swapExactAmountIn() 的底部,_pullUnderlying() 尝试从攻击者端收集相应消耗的 STA。然而,由于 STA 转账时还会烧掉 1% 的手续费,实际BPool 是收不到任何 STA 的。这样就使得 BPool 的实际 STA 余额和内部记账产生不匹配。

接下来是最有趣的一部分,攻击者调用 gulp() 不断重置 _records[STA],使得 BPool 中始终保持 0.000000000000000001 个 STA。因此攻击者可以用极高价的 0.000000000000000001 个 STA 将流通池中的 WETH、SNX、LINK 等其他资产消耗光。

第四步:偿还闪电贷

最终,如上图所示,攻击者偿还了从闪电贷借出的104,331个 WETH。
建议
此次攻击事件再次暴露了 DeFi 可组合性存在的兼容性风险。此前不久,Uniswap 和 Lendf.Me 两个平台就因和 ERC777 标准的兼容性问题,产生了非常严重的黑客攻击事 件。需要警醒的是,在未来 DeFi 行业类似的黑客攻击行为或许会屡见不鲜。
如果问该怎样才能规避这类攻击事件的发生呢?或许有两个优化调整思路:1)STA/STONK 在执行 transfer() 或 transferFrom() 时,当转账数额不足以支付手续费时,应该直接回滚或者返回 False;2) Balancer 应该在每一次 transferFrom() 函数调用后检查 BPool 的余额。
当然,任何安全事件事后采取措施补救都无法弥补已经产生的损失,我们相信最好的解决方案还是事前防备。DeFi 项目开发者应尽可能利用好的代码规范,并可寻求第三方安全公司协助其在上线前进行全面的攻防测试,尽可能找出一切潜在的漏洞。最后,尽可能对 ERC20、ERC777 和其它 DeFi 项目的任何组合行为都做好周密排查。
后续
毫无疑问,Balancer 事件的发生势必也会对 DeFi 社区带来影响,而且这类事情接下来发生的可能性还会很大,在此提醒广大 DeFi 项目开发者应务必重视合约的安全问题。
经我们统计发现,Balancer 在此次攻击事件共计损失了 523,616.52 美元的数字资产,详情列表如下:

声明:链世界登载此文仅出于分享区块链知识,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不构成投资建议。投资者据此操作,风险自担。此文如侵犯到您的合法权益,请联系我们kefu@lianshijie.com

参与讨论 (0 人参与讨论)

相关推荐

技术标准丨基于区块链的数字身份认证体系简介

不久前,公易联提交的《Standard for blockchain-based digital identity system framework》已在IEEE立项,该标准旨在建立完善的基于区块链的数字身份体系。但我们应当注意到,在区块链的发展过程中,身份证明的需求是客观存在的。

PeckShield:6月共发生安全事件20起,DeFi安全问题再次凸显

PeckShield:6月共发生安全事件20起,DeFi安全问题再次凸显

PeckShield 在此建议,DeFi 项目方在上线之前,应当尽可能寻找对 DeFi 各环节产品设计有深入研究的团队做一次完整的安全审计,以避免潜在存在的安全隐患。

PeckShield:6月共发生安全事件20起,DeFi安全问题再次凸显

4)针对2起异常天价以太坊手续费转账行为,PeckShield 安全公司研究人员认为,这可能是来自韩国的山寨交易所 GoodCycle 遭到了黑客勒索攻击。

闪电网络最新漏洞分析:仅需攻击85个节点便可窃取闪电节点通道资金

闪电网络最新漏洞分析:仅需攻击85个节点便可窃取闪电节点通道资金

提出一种闪电网络的系统性攻击,攻击者通过对闪电网络进行系统攻击,可窃取锁定在支付通道中的资金。针对不同数量的受攻击通道和区块大小,成功窃取的 HTLC 的数量。

中信银行打造“区块链”信用证结算!

中信银行打造“区块链”信用证结算!

科技不会改变金融的实质,但却能让金融服务更高效,能让资金供、需方信息不对称的问题更好地解决。近期,中信银行首个区块链项目——基于区块链的国内信用证信息传输系统(简称BCLC)(一期)成功上线,这是国内银行业第一次将区块链技术应用于信用证结算领域。 据中信银行国际业务部总经理助理张栩青介绍,将现在流行的区块链技术应用在国内信用证中,改变了银行传统信用证业务模式,信用证的开立、通知、交单、承兑报文

中国信息技术部门成立区块链研究实验室

中国信息技术部门成立区块链研究实验室

暴走时评:本月初,中国政府对国内的ICO和数字货币交易所的打击在世界范围内引起了强大反响,但政府已经多次声明不会将区块链与数字货币划等号,依然非常重视区块链技术在中国的发展。鉴于中国工业和信息化部成立了一个专门研究区块链的实验室,这一论调也得到了进一步的证实。 虽然中国政府最近在大力打击比特币交易所和ICO,但仍然致力于开发区块链在其他领域的潜力。 据财新网报道,中国工业和信息化部已经成立了一

 分布式账本中的生命科学

分布式账本中的生命科学

生物科学是医学领域涉及遗传研究,疾病预防和生活方式治疗(lifestyle treatments)的学科。它已经存在了很长时间,但区块链技术的基础设施应用给该学科提供了重大进步的可能性。 根据Pistoia Alliance进行的2016年6月份高级制药和生命科学领袖调查,83%的受访者表示,他们预计在五年内将全面采用区块链技术。 Pistoia Alliance是一个全球性的非营利组织,致

区块链vs.核能:日本最大电力公司东京电力(TEPCO)寻求使用区块链减轻对核电的依赖

区块链vs.核能:日本最大电力公司东京电力(TEPCO)寻求使用区块链减轻对核电的依赖

东京电力公司 (TEPCO) 对于能源过度中心化的风险可以说绝不陌生。 也许最著名的就是2011年发生的福岛核电站事故,这个日本最大的能源公司如今正在寻求区块链技术来防止这种灾难再次发生。 然而,从使用微型风车的分布式风力发电到用于存储在电力成本低时购买的电力的智能电池,可替代能源项目一直以来都属于个人慈善事业。 然而,TEPCO风险投资部门主管Jeffrey Char认为区块链能够帮助为这

麦妖榜
更新日期 2019-09-03
排名用户贡献值
1牛市来了30910
2BitettFan24187
3等待的宿命23810
4区块大康20369
5六叶树20310
6linjm122719429
7天下无双16192
8lizhen00215280
9让时间淡忘14586
10yelanyi050511349
返回顶部 ↑