Force DAO 任意铸币攻击事件复盘分析

阅读量330059

发布时间 : 2021-04-08 17:30:48

 

事件背景

Force DAO 是 DeFi 投资策略的去中心化自治组织,致力于在 DeFi 世界识别 alpha,Force 以 DAO 的方式,致力于通过遵循社区提出的策略,并通过强有力的激励措施,以产生卓越的回报。

零时科技监控到消息,北京时间2021年4月4日,Force DAO社区用户发推文称Force DAO遭到黑客攻击,任意用户可铸币FORCE,攻击者利用此漏洞共铸币数千万枚FORCE代币,零时科技安全团队及时对该安全事件进行复盘分析。

 

事件分析

通过初步分析,Force DAO遭受攻击的原因如下:

该漏洞主要问题在xFORCE合约代码ForceProfitSharing.sol上,该错误使任何人都可以调用“ deposit ”功能,而无论他们是否持有FORCE令牌,这意味着可以在不锁定任何令牌的情况下从xFORCE合约中铸造xFORCE令牌。

然后,任何人都可以通过调用xFORCE合约中的“ withdraw ”功能将这些xFORCE令牌交换为FORCE代币。

具体代码分析如下:

首先看看xFORCE合约代码ForceProfitSharing.sol中的deposit方法:

在用户进行 deposit 操作时,xFORCE 为用户铸造 xFORCE 代币,并通过 FORCE 代币合约的 transferFrom 函数将用户的 FORCE 代币转入 ForceProfitSharing 合约中,注意这里并没有进行判断是否成功调用force.transferFrom 函数。

接下来跟进,来看看FORCE 代币合约的 transferFrom 方法:

FORCE 代币合约的 transferFrom 函数调用了doTransfer函数,在doTransfer函数中,使用 if-else 逻辑来检查用户的授权额度,当用户的授权额度不足时 transferFrom 函数返回 false,而 ForceProfitSharing 合约的 deposit 方法中并未对其返回值进行检查。

结果导致了xFORCE合约中 deposit 的逻辑正常执行,xFORCE 代币被顺利铸造给用户,接下来用户可以通过xFORCE的 withdraw 函数将这些xFORCE令牌交换为FORCE代币。

xFORCE的 withdraw 函数代币如下:

但由于 force.transferFrom 函数执行失败,用户的 FORCE 代币并未被真正转账给 ForceProfitSharing 合约中,最终造成 FORCE 代币被大量铸造。

通过初步分析,Force DAO遭受攻击的过程如下:

其中一个黑客攻击者的钱包地址:

https://etherscan.io/address/0x9d9c3695c54601929cd72d34a52935268eb9b00b

首先,用户调用xForce合约的 deposit 方法,传入较大amout值,此时用户成功获得大量xFORCE令牌,但是amout值较大,导致force.transferFrom返回false。

合约地址:

https://etherscan.io/address/0xe7f445b93eb9cdabfe76541cc43ff8de930a58e6

交易hash:

https://etherscan.io/tx/0xdf05020d5d3c3a975627ce29f24b4eb8ccb8807f9f9c9aa05e644c61fe5f0141

然后,用户再调用xForce合约的 withdraw 方法,由于上面已经获得大量xFORCE令牌,这里传入等值的xFORCE令牌数量,然后获得对应的FORCE代币。

交易hash:

https://etherscan.io/tx/0x3b60252b36d2de2930a64f360926bfcba44d12ff44719de3c6dd486b9dafe118

最后,此攻击者将FORCE代币转移至1inch V3,然后获得ETH。

交易hash:

https://etherscan.io/tx/0x03c84e3f7d9c117260a49bab6bd9cb1b2d7e1cbc6d9362e74c10ef6d48a987e6

此漏洞共被5位攻击者利用,其中一位白帽攻击者,地址如下:

https://etherscan.io/address/0xf88a427c5bf29acf58497c0088cbf7ca9836b7b2

已归还获取的FORCE,但是其他几位攻击者已经从中套利,并在其钱包地址中仍然拥有FORCE代币未出售。

其他几位恶意攻击者钱包地址如下:

https://etherscan.io/address/0x9d9c3695c54601929cd72d34a52935268eb9b00b

https://etherscan.io/address/0xe29a07002c7be4299b51a2892799cc4a372994dd

https://etherscan.io/address/0x0608576ea47b265f1f16b8b8383d0508f703a0cb

https://etherscan.io/address/0x00000b20f0f6a3a212aa6b85106709cd5941457c

 

总结

该攻击事件中,主要原因在于 FORCE 代币合约的 transferFrom 函数使用了 if-else 方式判断,但外部合约 xForce 在对其进行调用时并未严格的判断其返回值,导致任意用户恶意铸币漏洞发生。

此漏洞为典型的“假充值”漏洞,已经被强调很长时间,但是目前仍然存在,所以合约代码安全极为重要,安全审计不可忽视,在零时科技安全团队在审计过程中也曾多次发现过此类问题,并及时和项目方人员对接,规避了此类问题的发生。

 

安全建议

DeFi今年确实备受关注,黑客攻击也不断发生。针对频频发生的黑客攻击事件,我们给出以下的安全建议:

合约代币尽量使用标准的Open Zeppelin ERC-20 来防止本次漏洞的发生;

在项目上线之前,找专业的第三方安全企业进行全面的安全审计,而且可以找多家进行交叉审计;

可以发布漏洞赏金计划,发送社区白帽子帮助找问题,先于黑客找到漏洞;

加强对项目的安全监测和预警,尽量做到在黑客发动攻击之前发布预警从而保护项目安全。

 

私钥存储安全建议

私钥尽量手抄,确保私钥的准确性,多次校验;

多个安全地方存储

不要截屏和拍照,会同步到云端

不要拷贝粘贴,会同步到云端

不要使用邮件传输或存储私钥

不要将私钥发到群里

不要将私钥导入未知的第三方网站

本文由零时科技原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/237227

安全客 - 有思想的安全新媒体

分享到:微信
+11赞
收藏
零时科技
分享到:微信

发表评论

内容需知
  • 投稿须知
  • 转载须知
  • 官网QQ群8:819797106
  • 官网QQ群3:830462644(已满)
  • 官网QQ群2:814450983(已满)
  • 官网QQ群1:702511263(已满)
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 360网络攻防实验室 安全客 All Rights Reserved 京ICP备08010314号-66