dei230507攻击事件分析(arbitrum为例)

0 总结
1 dei合约漏洞由一次未经完善测试的logic合约更新引入,从更新到事发,存在了约20天

1 一句话原理
攻击者部署并执行攻击合约:通过dei合约的burnFrom函数的编码漏洞,获取了dei流动性交易对合约的approve额度,最终清空dei -> usdc的交易对里共计650万美元左右的虚拟资产
2 攻击事件发生时间点
23-05-05 17点
3 涉及到的地址和合约:
0xb1141785b7b94eb37c39c37f0272744c6e79ca1517529fec3f4af59d4c3c37ef
核心攻击交易
0x189cf534de3097c08b6beaf6eb2b9179dab122d1
攻击者地址
0xe2ee6252509382a2b6504d5a5f7a1c5018a38168
用于攻击的合约(payload)
0xde1e704dae0b4051e80dabb26ab6ad6c12262da0
被攻击的合约(dei稳定币Proxy合约)
0xBC1b62dB243B51dabCd9540473324f36E094EC55
被攻击的合约(dei稳定币logic合约)
0x126bE6a9ec71A1FeA19D2288Ba2Ce4cDC0faCB68
流动性交易对合约
4 简略的攻击流程(整个攻击流程在一次合约交易中完成)

1 调用approve函数,授予dei-usdc流动性交易对合约地址,对当前攻击合约地址很大的transferFrom授权额度
2 调用burnFrom函数,降低dei-usdc流动性交易对合约地址的授权额度
漏洞函数,导致攻击合约拥有了对dei-usdc流动性交易对合约地址的transferFrom授权额度。
3 调用transferFrom函数将dei-usdc流动性交易对合约地址里的dei全部转移到攻击合约地址,但是留下1个DEI
4 调用dei-usdc流动性交易对合约地址里的sync函数,更新其中的dei和usdc的数量关系(1DEI和130万usdc)
5 取出该流动性交易对合约地址里的所有usdc
5 dei合约更新时间轴
deus finance deployer: 0x18b4287fa4155efd149aece678a75bbd69ede0b8

22-11-15 12点
转入手续费 0.095eth
创建多个合约,并初始化dei逻辑合约为尾号ca15
0x3f4a3f3a51b474483f201851c3de134b89d4ca15 : 初始化逻辑合约
0xfcb8981c9da9aed8de846d46b470b8524b69edff: proxyAdmin合约
0xde1e704dae0b4051e80dabb26ab6ad6c12262da0 : proxy合约
23-01-24 12点
创建合约
0x528e6E8A69b148fD77EDC06E1121D7B8056B071C : 新逻辑合约
23-01-24 8点
更新逻辑合约为尾号71c
23-01-25 14点
创建合约
0x1472b3081d81b792e697aea90accbbc4adc5baf9 : 新逻辑合约
更新逻辑合约为尾号baf9
23-04-10 14点
创建合约
0xBC1b62dB243B51dabCd9540473324f36E094EC55 : 新逻辑合约(有问题的合约)
23-04-16 11点
更新逻辑合约为尾号 ec55
23-05-05 19点
创建合约
0x0d768f28b018ba1c53ebfbd8c02db0c14291c97b : 新逻辑合约
更新逻辑合约为 0x1472b3081d81b792e697aea90accbbc4adc5baf9
更新目的:
发生攻击事件,不确定原因,先回滚逻辑合约版本(已经发现了问题,但是还是先稳妥一点,回滚版本)
23-05-05 20点
创建合约
0x7a6F1217C97DE6aE9BF7BC2b526C72a0FB8c4093 : 新逻辑合约
更新逻辑合约为尾号 4093
更新目的:
确认攻击事件的发生原因,注释掉burnFrom函数,避免进一步的攻击事件发生
之后
和攻击者进行聊天交互
参考文档
https://www.aiqubi.com/archives/1226102.html