最新消息:图 床

智能合約遊戲之殤——God.Game 事件分析

COOL IAM 79浏览 0评论

作者:Sissel@知道創宇404區塊鏈安全研究團隊
時間:2018年8月24日

0x00 前言

  • 購買token
    tx:2. 購買token
    攻擊者購買一定量token,準備攻擊。
    智能合約遊戲之殤——God.Game 事件分析

  • 向攻擊合約轉賬token
    tx:3. transfer(attacker -> attack-contract)
    攻擊者本身購買了少量token,使用遊戲合約中的transfer(),向攻擊合約轉賬。
    智能合約遊戲之殤——God.Game 事件分析

  • 攻擊合約withdraw()
    tx:4. withdraw()
    攻擊合約調用了God的withdraw(),攻擊合約因此獲得了紅利對應以太幣【不重要】
    智能合約遊戲之殤——God.Game 事件分析

  • 攻擊合約transfer()
    tx:5. transfer(attack-contract -> attacker)
    將token轉回,攻擊合約token不變,紅利溢出。
    智能合約遊戲之殤——God.Game 事件分析

  • 攻擊合約reinvest()
    tx:6. reinvest()
    再投資,將紅利買token,可以大量購買token。
    智能合約遊戲之殤——God.Game 事件分析

  • 攻擊合約sell()
    tx:7. sell()
    賣出一部分token,因為發行的token過多,會導致token價值太低,提取以太幣較少。

  • 攻擊合約transfer()
    tx:8. transfer(attack-contract -> 受益者)
    把智能合約賬戶的token轉給受益者(0xc30e)一部分。

  • 受益者sell()+withdraw()
    受益者(0xc30e)賣掉token,並withdraw()紅利,得到以太幣。

  • 0x05 更簡單的攻擊手法

    回顧上述攻擊流程,攻擊成立主要依賴紅利由 token – payout 得到,時常變化,而不是記錄這個特性。

    在交易token時,變化的只是雙方持有的token數,雙方的紅利應該不變,換言之,就是用戶的payout也需要變化才能保證紅利變化。

    漏洞就在於在用戶和合約交易token時,合約方的payout並沒有相應的增加,導致紅利平白無故的多出來,最終導致了憑空生幣。

    這樣一來,我們就可以使用更簡單的攻擊手法。

    下面是詳細的介紹:

    1. 攻擊者 ==轉賬==> 攻擊合約
      合約收到轉賬時,紅利本應為0,卻變得很多,賬戶可用資金變得很多。

    2. 攻擊合約 withdraw()
      把可用的錢提款為eth,token不變。

    3. 攻擊合約 ==轉賬==> 攻擊者
      token原路返回攻擊者,token不變,但合約中多出了 eth 。

    我們發現智能合約在這個過程中,因為接受轉賬未增加payout,導致在第二步中可以提取不少的以太幣,並在第三步將token原路轉回。
    這一過程,合約賬戶便可憑空得到以太幣。而只需要支付一部分手續費以及token的輕微貶值。如此反覆創建新的合約,並按以上步驟,可以提出God.Game中大量的以太幣。

  • God.Game官網
    http://god.game/#/


  • 智能合約審計服務

    針對目前主流的以太坊應用,知道創宇提供專業權威的智能合約審計服務,規避因合約安全問題導致的財產損失,為各類以太坊應用安全保駕護航。

    知道創宇404智能合約安全審計團隊: https://www.scanv.com/lca/index.html

    聯繫電話:(086) 136 8133 5016(沈經理,工作日:10:00-18:00)

    歡迎掃碼諮詢:

    转载请注明:IAMCOOL » 智能合約遊戲之殤——God.Game 事件分析

    0 0 vote
    Article Rating
    Subscribe
    Notify of
    0 Comments
    Inline Feedbacks
    View all comments
    0
    Would love your thoughts, please comment.x
    ()
    x