Force DAO 任意铸币攻击事件复盘分析 | 零时科技

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

事件背景

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 来防止本次漏洞的发生;

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

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

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

私钥存储安全建议

  • 私钥尽量手抄,确保私钥的准确性,多次校验;
  • 多个安全地方存储
  • 不要截屏和拍照,会同步到云端
  • 不要拷贝粘贴,会同步到云端
  • 不要使用邮件传输或存储私钥
  • 不要将私钥发到群里
  • 不要将私钥导入未知的第三方网站
点赞 1
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

1 条评论

请先 登录 后评论
零时科技
零时科技
0xbD0b...A354
专注区块链生态安全