北京时间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 来防止本次漏洞的发生;
在项目上线之前,找专业的第三方安全企业进行全面的安全审计,而且可以找多家进行交叉审计;
可以发布漏洞赏金计划,发送社区白帽子帮助找问题,先于黑客找到漏洞;
加强对项目的安全监测和预警,尽量做到在黑客发动攻击之前发布预警从而保护项目安全。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!