DEUS Finance 漏洞分析 (第一次被黑2022-03-15)
• 攻击者钱包地址 https://ftmscan.com/address/0x1ed5112b32486840071b7cdd2584ded2c66198dd • 攻击合约地址 https://ftmscan.com/address/0xb8f5c9e18abbb21dfa4329586ee74f1e2b685009 • 攻击交易 https://ftmscan.com/tx/0xe374495036fac18aa5b1a497a17e70f256c4d3d416dd1408c026f3f5c70a3a9c • Oracle合约 https://ftmscan.com/address/0x5CEB2b0308a7f21CcC0915DB29fa5095bEAdb48D#code • DeiLenderSolidex 合约地址 https://ftmscan.com/address/0xec1fc57249cea005fc16b2980470504806fca20d
从交易记录分析攻击过程,因为各交易分析工具均不支持解析Fantom交易,只能从代币转移过程以及交易日志记录分析其利用过程。
之所以可确认是进行清算步骤,是因为日志信息中显示合约0xec1fc5的RemoveCollateral 、Repay 两个函数同时被调用,在其函数liquidate中正好有这两个日志记录。
在liquidate函数中是通过isSolvent函数判断借贷人的资产是否需要被清算,而在isSolvent函数中是通过预言机获取资产价值是否大于贷款价值。
预言机的地址为0x5CEB2b0308a7f21CcC0915DB29fa5095bEAdb48D,查看其公式为: ((dei.balanceOf(address(pair)) + (usdc.balanceOf(address(pair)) 1e12)) 1e18) / pair.totalSupply(); 其中pair地址为0x5821573d8f04947952e76d94f3abc6d7b43bf8d0 ,正好是之前闪电贷获取DEI的地址。池子是参考uniswap协议实现的,其中totalsupply指的是提供的总流动性凭证,只要用户不提取或注入资金,totalsupply的大小应保持不变。以上公式的意义是指存款人的pair凭证提取资金时可以兑换的DEI、USDC的数量。
通常情况下用户往池中存入代币后,预言机给出的价格是保持不变的。但是池子是可以提供闪电贷的,只要大量借出DEI或USDC,而totalsupply没有变化(因为此时并未有人存款或取款),最终导致通过预言机获取的价格变小,错误认为借款人资不抵债而被清算。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!