0
+
29,287
微信扫码分享

安全公司拆解Balancer遭黑客攻击过程,DeFi 可组合性的兼容风险再鸣警钟

Jun 30, 2020 11:32:48 AM
PeckShield
+关注
最近因“借贷即挖矿”模式而备受关注DeFi 平台 Balancer 上的 STA 和 STONK 两个 ERC20 通缩代币池遭到了黑客攻击,共计损失了超50万美元。

原标题:《PeckShield:DeFi平台Balancer遭黑客攻击全过程技术拆解

北京时间06月29日凌晨02时03分起,最近因“借贷即挖矿”模式而备受关注DeFi 平台 Balancer 上的 STA 和 STONK 两个 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 美元的数字资产,详情列表如下:

  • 安全
PeckShield
+关注
评论

精选专题

404,125人看过
16篇文章
产业区块链
产业区块链
277,990人看过
9篇文章
DeFi生态项目暴涨
DeFi生态项目暴涨
374,077人看过
20篇文章
世界数字矿业大会
世界数字矿业大会
214,131人看过
20篇文章
Telegram叫停TON区块链
Telegram叫停TON区块链
版权申明
1、本网(www.PANewsLab.com)所有内容,凡注明"来源:PANews"的所有文字、图片和音视频资料,版权均属PANews所有,任何媒体、网站或个人在转载本站内容时必须注明"稿件来源:PANews",违者本网将依法追究责任。
凡本网注明"来源:XXX(非PANews) "的文/图等稿件,本网转载出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。
2、除注明"来源:PANews"的内容外,本网以下内容亦不可任意转载:(a) 本网所指向的非本网内容的相关链接内容;
(b) 已作出不得转载或未经许可不得转载声明的内容;
(c) 未由本网署名或本网引用、转载的他人作品等非本网版权内容;
(d) 本网中特有的图形、标志、页面风格、编排方式、程序等;
(e) 本网中必须具有特别授权或具有注册用户资格方可知晓的内容;
(f) 其他法律不允许或本网认为不适合转载的内容。
3、转载或引用本网内容必须是以新闻性或资料性公共免费信息为使用目的的合理、善意引用,不得对本网内容原意进行曲解、修改,同时必须保留本网注明的"稿件来源",并自负版权等法律责任。
4、转载或引用本网内容不得进行如下活动:
(a) 损害本网或他人利益;
(b) 任何违法行为;
(c) 任何可能破坏公秩良俗的行为;
(d) 擅自同意他人继续转载、引用本网内容;
5、转载或引用本网版权所有之内容须注明“转自PANews”字样,并标明本网网址www.PANewsLab.com
(a) 转载或引用本网中的署名文章,请按规定向作者支付稿酬。
(b) 对于不当转载或引用本网内容而引起的民事纷争、行政处理或其他损失,本网不承担责任。
(c) 本网以“法定许可”方式使用作品,已与知识产权所有者签署合作协议并支付报酬。如有未尽事宜请相关权利人直接与本网媒体合作部联系,联系邮箱:info@panony.com
(d) 对不遵守本声明或其他违法、恶意使用本网内容者,本网保留追究其法律责任的权利。
我知道了
用户协议
欢迎您使用PANews软件及相关服务!
用户在接受PANews服务之前,请务必仔细阅读本条款并同意本声明。
用户直接或通过各类方式(如站外API引用等)间接使用PANews服务和数据的行为,都将被视作已无条件接受本声明所涉全部内容;若用户对本声明的任何条款有异议,请停止使用PANews所提供的全部服务。

隐私政策
本应用尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务,本应用会按照本隐私权政策的规定使用和披露您的个人信息。但本应用将以高度的勤勉、审慎义务对待这些信息。除本隐私权政策另有规定外,在未征得您事先许可的情况下,本应用不会将这些信息对外披露或向第三方提供。本应用会不时更新本隐私权政策。 您在同意本应用服务使用协议之时,即视为您已经同意本隐私权政策全部内容。本隐私权政策属于本应用服务使用协议不可分割的一部分。

适用范围
(a) 在您注册本应用帐号时,您根据本应用要求提供的个人注册信息;
(b) 在您使用本应用网络服务,或访问本应用平台网页时,本应用自动接收并记录的您的浏览器和计算机上的信息,包括但不限于您的IP地址、浏览器的类型、使用的语言、访问日期和时间、软硬件特征信息及您需求的网页记录等数据;
(c) 本应用通过合法途径从商业伙伴处取得的用户个人数据。

您了解并同意,以下信息不适用本隐私权政策:
(a) 您在使用本应用平台提供的搜索服务时输入的关键字信息;
(b) 本应用收集到的您在本应用发布的有关信息数据,包括但不限于参与活动、成交信息及评价详情;
(c) 违反法律规定或违反本应用规则行为及本应用已对您采取的措施。

信息使用
(a) 本应用不会向任何无关第三方提供、出售、出租、分享或交易您的个人信息,除非事先得到您的许可,或该第三方和本应用(含本应用关联公司)单独或共同为您提供服务,且在该服务结束后,其将被禁止访问包括其以前能够访问的所有这些资料。
(b) 本应用亦不允许任何第三方以任何手段收集、编辑、出售或者无偿传播您的个人信息。任何本应用平台用户如从事上述活动,一经发现,本应用有权立即终止与该用户的服务协议。
(c) 为服务用户的目的,本应用可能通过使用您的个人信息,向您提供您感兴趣的信息,包括但不限于向您发出产品和服务信息,或者与本应用合作伙伴共享信息以便他们向您发送有关其产品和服务的信息(后者需要您的事先同意)。

信息披露 在如下情况下,本应用将依据您的个人意愿或法律的规定全部或部分的披露您的个人信息:
(a) 经您事先同意,向第三方披露; (b) 为提供您所要求的产品和服务,而必须和第三方分享您的个人信息;
(c) 根据法律的有关规定,或者行政或司法机构的要求,向第三方或者行政、司法机构披露;
(d) 如您出现违反中国有关法律、法规或者本应用服务协议或相关规则的情况,需要向第三方披露;
(e) 如您是适格的知识产权投诉人并已提起投诉,应被投诉人要求,向被投诉人披露,以便双方处理可能的权利纠纷;
(f) 在本应用平台上创建的某一交易中,如交易任何一方履行或部分履行了交易义务并提出信息披露请求的,本应用有权决定向该用户提供其交易对方的联络方式等必要信息,以促成交易的完成或纠纷的解决。
(g) 其它本应用根据法律、法规或者网站政策认为合适的披露。信息存储和交换本应用收集的有关您的信息和资料将保存在本应用及(或)其关联公司的服务器上,这些信息和资料可能传送至您所在国家、地区或本应用收集信息和资料所在地的境外并在境外被访问、存储和展示。

Cookie的使用
(a) 在您未拒绝接受cookies的情况下,本应用会在您的计算机上设定或取用cookies ,以便您能登录或使用依赖于cookies的本应用平台服务或功能。本应用使用cookies可为您提供更加周到的个性化服务,包括推广服务。
(b) 您有权选择接受或拒绝接受cookies。您可以通过修改浏览器设置的方式拒绝接受cookies。但如果您选择拒绝接受cookies,则您可能无法登录或使用依赖于cookies的本应用网络服务或功能。
(c) 通过本应用所设cookies所取得的有关信息,将适用本政策。

信息安全
(a) 本应用帐号均有安全保护功能,请妥善保管您的用户名及密码信息。本应用将通过对用户密码进行加密等安全措施确保您的信息不丢失,不被滥用和变造。尽管有前述安全措施,但同时也请您注意在信息网络上不存在“完善的安全措施”。
(b) 在使用本应用网络服务进行网上交易时,您不可避免的要向交易对方或潜在的交易对本隐私政策的更改。
(c) 如果决定更改隐私政策,我们会在本政策中、本公司网站中以及我们认为适当的位置发布这些更改,以便您了解我们如何收集、使用您的个人信息,哪些人可以访问这些信息,以及在什么情况下我们会透露这些信息。
(d) 本公司保留随时修改本政策的权利,因此请经常查看。如对本政策作出重大更改,本公司会通过网站通知的形式告知。请您妥善保护自己的个人信息,仅在必要的情形下向他人提供。如您发现自己的个人信息泄密,尤其是本应用用户名及密码发生泄露,请您立即联络本应用客服,以便本应用采取相应措施。
不同意
同意
免密码登录
密码登录
社交账号登录