2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

EOS dapp ハッキング事件と解説

Last updated at Posted at 2018-12-23

事件内容

12月18日の夜から19日の早朝まで、複数の EOS トップ DApp が攻撃されました。
EOSMax、ToBet、BigGame、および BetDice がトランザクションロールバック攻撃を受け、それぞれ 55,000 EOS、22000 EOS、14903.18 EOS、および 200000 EOS を失いました。
さらに、ハッカーはリプレイ攻撃の脆弱性を悪用してクイズゲーム TRUSTBET を攻撃し、11501 EOS を得ています。
現在 EOS の価格は 18 中国元で計算すると、合計約 546 万中国元の 303404.18 EOS 失いました。

ハッカーは攻撃で得た EOS を 2000 程度のアカウントを作って送金しようとしているので、追跡対応が難航しています。

参考リンク

事件分析

事件が起きたあと、いくつの分析が出ていましたが、 Jerry@EOS LIVEさんが ToBet のコントラクトを使って実際の動きを再現できたので、事実と一番近いじゃないかと思われます。再現手順は EOS DApp ハッキング解析 ブラックリストによるなりまし攻撃(原创| EOS DApp 攻击重现之利用黑名单账号进行欺骗攻击
)
でまとめられています。

攻撃が成り立つのは、下記の前提があります

  • API ノードには、ブラックリスト機能が動いていない、かつ、デフォルトの SPECULATIVE モードで実行している
  • ゲームコントラクトの実装は
    • トランザクションがロールバックする時、次のトランザクションはロールバックされたトランザクション同じ結果になる
    • ゲーム結果に従って賞金を送金する処理が非同期アクションで行っている、かつ、元のトランザクションと関連していない

攻撃流れ

EOS DApp ハッキング解析 ブラックリストによるなりまし攻撃(原创| EOS DApp 攻击重现之利用黑名单账号进行欺骗攻击
)
 の再現手順を参考し、アカウント名は下記としています。

アカウント名 説明
attack 攻撃処理が仕込んでいるコントラクト
blacklist ブラックリストに入っているアカウント
tobetioadmin 攻撃ターゲットのゲームコントラクト

攻撃の流れは下記になっています

  • 攻撃者は API ノードに対して attack コントラクトで、 blacklist アカウントの権限で tobetioadminEOS を送金トランザクションを送信する
  • ゲームコントラクトが送金を受けるとゲームをプレイする
  • プレイヤーが勝つと、非同期アクションで EOSattack アカウントに返金する
  • BP ノードが送金トランザクションを受けた時、blacklist アカウントがブラックリストに入っているのでトランザクションを拒否したため、トランザクションがロールバックされる

結果的に、attack アカウントからの送金がロールバックされたにも関わらず賞金がもらってしまいました

シーケンス図

Screen Shot 2018-12-23 at 16.04.34.png

対策

  • API ノード側
    • 実行のモードをちゃんと意識して、dapp 側に明示的に提示しておくほうが良い
  • dapp 側
    • 非同期アクションで処理を実行するときに、必要がある場合は、元のトランザクションと関連させて、元のトランザクションのステータスをちゃんと確認する

まとめ

BP 以外のノードでは、dapp 側のリクエストに対するレスポンスを早くするため、デフォルトのモードでは、トランザクションのリクエストを受けたら、ステートデータを更新するようにしています。
EOS は、このように、パフォーマンスのためいろいろ工夫していますが、気をつけないと膨大な被害が受けてしまいました。

この辺の実装の詳細と影響範囲は、もっと公式なドキュメントなどで dapp 開発者に告知してほしいですね。

2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?