欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

数字彗星揭秘GodGame盗币

程序员文章站 2022-07-18 14:32:36
GodGame盗币案技术分析,2018年8月22日,GOD.GAME官方发布消息,合约遭受攻击,所有的投注ETH被盜走。盗走ETH的黑客地址为0xC30E89DB73798E4CB3b204Be0a4C735c453E5C74。...

god game盗币案技术分析

1、案件描述:

2018年8月22日,god.game官方发布消息,合约遭受攻击,所有的投注eth被盜走。盗走eth的黑客地址为0xc30e89db73798e4cb3b204be0a4c735c453e5c74。

数字彗星揭秘GodGame盗币

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。

数字彗星揭秘GodGame盗币

经过数字彗星安全团队对函数withdraw()进行分析,发现函数内对红利进行计算、累加后,交易给合约调用者。

数字彗星揭秘GodGame盗币

如何提高_dividends的值,从代码看,可以通过以下2个方式:

方式1:在226行通过函数mydividends()

追踪函数mydividends(),对函数的实现进行分析

数字彗星揭秘GodGame盗币

追踪函数dividendsof(),对函数进行分析

数字彗星揭秘GodGame盗币

提升profitpershare_的值可以通过函数sell()的276行

数字彗星揭秘GodGame盗币

通过对整个合约代码的检查,我们发现profitpershare_的值没有任何一个地方进行降低的,就此,我们可以断定,黑客使用同一个地址频繁的买入和卖出(通过调用函数sell())token,就可以将profitpershare_的值调到很大。攻击者再使用同一个地址调用方法withdraw(),因为mydividends值直接由profitpershare_的值决定,这样,交易数额就提升了。

方式2:在233行累加合约调用者的红利

方式1已经可以达到提升交易额的目的,此方式不做分析。

4、总结

针对上述问题,数字彗星安全团队建议:对于合约的转账数量,需要进行严密逻辑验证。

另外,数字彗星安全团体通过使用自研分析引擎(https://safecomet.com/audit.html)进行分析,发现合约中还存在其他问题,如:溢出漏洞。

数字彗星分析引擎结果:

数字彗星揭秘GodGame盗币

经过团队成员对引擎结果进行初步审计,认为该合约存在一定数量的潜在安全问题。详细如下:

error:共18个,其中17个确实存在安全风险。

问题1:溢出漏洞

1)行157:

数字彗星揭秘GodGame盗币

其150、153、154、155行均采用了safemath提供的api进行数学运算,但157行未使用。其中magnitude 的值声明为第77行

数字彗星揭秘GodGame盗币

该值固定已经很大,再与_dividends进行相乘,极可能溢出。

2)行:167

数字彗星揭秘GodGame盗币

3)行:189

数字彗星揭秘GodGame盗币

4)行:192

数字彗星揭秘GodGame盗币

5)行:230

数字彗星揭秘GodGame盗币

6)行:233

数字彗星揭秘GodGame盗币

7)行:271

数字彗星揭秘GodGame盗币

8)行:315

数字彗星揭秘GodGame盗币

9)行:317

数字彗星揭秘GodGame盗币

10)行:322

数字彗星揭秘GodGame盗币

11)行:324

数字彗星揭秘GodGame盗币

12)行:332

数字彗星揭秘GodGame盗币

13)行:333

数字彗星揭秘GodGame盗币

14)行:708

数字彗星揭秘GodGame盗币

15)行:718

数字彗星揭秘GodGame盗币

16)行:721

数字彗星揭秘GodGame盗币

17)行:734

数字彗星揭秘GodGame盗币

warnning:共3个,其中问题1个可能引起安全风险,其他2个是对代码编写风格的建议。

问题1:使用^可能会导致有未知的bug被最新的编译器触发。

行1:

数字彗星揭秘GodGame盗币

问题2:事件和函数名归一化后(lowercase)相同

行288:

函数名transfer和行58的事件名transfer归一化后名称相同。

数字彗星揭秘GodGame盗币
数字彗星揭秘GodGame盗币

问题3:使用了内联汇编

数字彗星揭秘GodGame盗币

数字彗星安全团队建议使用safemath安全运算库替换当前的算数运算。数字彗星安全团队提供严格的智能合约审计服务,尽力保护区块链投资者和交易平台资产,维护区块链行业积极健康发展。