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

事件背景

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

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

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

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

私钥存储安全建议私钥尽量手抄,确保私钥的准确性,多次校验;多个安全地方存储不要截屏和拍照,会同步到云端不要拷贝粘贴,会同步到云端不要使用邮件传输或存储私钥不要将私钥发到群里不要将私钥导入未知的第三方网站


上一篇:很抱歉没有了
下一篇:很抱歉没有了