作者:Beosin
1月9日凌晨,Truebit Protocol于5年前部署的未开源合约遭受攻击,损失8,535.36 ETH(价值约2640万美元)。Beosin安全团队对本次安全事件进行了漏洞与资金追踪分析,并将结果分享如下:
攻击手法分析
本次事件我们以最主要的一笔攻击交易作为分析,交易哈希为: 0xcd4755645595094a8ab984d0db7e3b4aabde72a5c87c4f176a030629c47fb014
1. 攻击者调用getPurchasePrice()获取价格
2. 随后调用存在缺陷的函数0xa0296215(),并将msg.value值设置得极小
由于合约未开源,通过反编译的代码推测该函数是存在算术逻辑漏洞,如整数截断出现问题,导致攻击者成功铸造了大量TRU代币。
3. 攻击者通过burn函数将铸造的代币“卖回”给合约,从合约储备中提取了大量 ETH。
此过程再重复4次,每次msg.value值增加,直至将合约中的ETH几乎全部提取。
被盗资金追踪
根据链上交易数据,Beosin通过旗下区块链链上调查与追踪平台BeosinTrace进行了详尽的资金追踪,并将结果分享如下:
目前,被盗的8,535.36 ETH经过转移,绝大部分分别存放在了0xd12f6e0fa7fbf4e3a1c7996e3f0dd26ab9031a60和0x273589ca3713e7becf42069f9fb3f0c164ce850a。
其中地址0xd12f持有4,267.09 ETH,地址0x2735持有4,001 ETH。攻击者发起攻击的地址(0x6c8ec8f14be7c01672d31cfa5f2cefeab2562b50)还存有267.71 ETH,三个地址暂未有更进一步的资金转移。
被盗资金流向分析图 by Beosin Trace
以上地址均已被Beosin KYT标记为高风险地址,以攻击者地址为例:
Beosin KYT
结语
本次被盗资金涉及5年前未开源的智能合约,对于此类合约,项目方应对合约进行升级,引入紧急暂停、参数限制以及新版本的Solidity安全特性。此外,安全审计依然是合约必不可少的环节。通过安全审计,Web3企业可以尽可能全面地检测智能合约代码,发现并修复潜在漏洞,提高合约安全性。
*Beosin将提供本次所有资金流向与地址风险的完整分析报告,欢迎通过官方邮箱[email protected]领取。
