God Game盗币案技术分析
1、案件描述:
2018年8月22日,GOD.GAME官方发布消息,合约遭受攻击,所有的投注ETH被盜走。盗走ETH的黑客地址为0xC30E89DB73798E4CB3b204Be0a4C735c453E5C74。
2、合约概况
2.1 合约名称
God
2.2 合约地址
0xc30e89db73798e4cb3b204be0a4c735c453e5c74
2.3etherscan链接
https://etherscan.io/address/0xCA6378fcdf24Ef34B4062Dda9F1862Ea59BaFD4d
3、细节分析
数字彗星安全团队成员对合约的交易记录进行查询,发现黑客通过函数withdraw()于Aug-20-2018 04:57:26 PM +UTC 转走了243.88Eth。
经过数字彗星安全团队对函数withdraw()进行分析,发现函数内对红利进行计算、累加后,交易给合约调用者。
如何提高_dividends的值,从代码看,可以通过以下2个方式:
方式1:在226行通过函数myDividends()
追踪函数myDividends(),对函数的实现进行分析
追踪函数dividendsOf(),对函数进行分析
提升profitPerShare_的值可以通过函数sell()的276行
通过对整个合约代码的检查,我们发现profitPerShare_的值没有任何一个地方进行降低的,就此,我们可以断定,黑客使用同一个地址频繁的买入和卖出(通过调用函数sell())Token,就可以将profitPerShare_的值调到很大。攻击者再使用同一个地址调用方法withdraw(),因为myDividends值直接由profitPerShare_的值决定,这样,交易数额就提升了。
方式2:在233行累加合约调用者的红利
方式1已经可以达到提升交易额的目的,此方式不做分析。
4、总结
针对上述问题,数字彗星安全团队建议:对于合约的转账数量,需要进行严密逻辑验证。
另外,数字彗星安全团体通过使用自研分析引擎进行分析,发现合约中还存在其他问题,如:溢出漏洞。
数字彗星分析引擎结果:
经过团队成员对引擎结果进行初步审计,认为该合约存在一定数量的潜在安全问题。详细如下:
Error:共18个,其中17个确实存在安全风险。
问题1:溢出漏洞
1)行157:
其150、153、154、155行均采用了SafeMath提供的API进行数学运算,但157行未使用。其中magnitude 的值声明为第77行
该值固定已经很大,再与_dividends进行相乘,极可能溢出。
2)行:167
3)行:189
4)行:192
5)行:230
6)行:233
7)行:271
8)行:315
9)行:317
10)行:322
11)行:324
12)行:332
13)行:333
14)行:708
15)行:718
16)行:721
17)行:734
Warnning:共3个,其中问题1个可能引起安全风险,其他2个是对代码编写风格的建议。
问题1:使用^可能会导致有未知的bug被最新的编译器触发。
行1:
问题2:事件和函数名归一化后(lowercase)相同
行288:
函数名transfer和行58的事件名Transfer归一化后名称相同。
问题3:使用了内联汇编
数字彗星安全团队建议使用SafeMath安全运算库替换当前的算数运算。数字彗星安全团队提供严格的智能合约审计服务,尽力保护区块链投资者和交易平台资产,维护区块链行业积极健康发展。