脆弱性を再度侵入しますか? スターズアリーナへの攻撃を分析する

背景

Slow MistEyeシステムのセキュリティ警告によると、2023年10月7日、Avalancheオンチェーンソーシャルプロトコルであるスターズアリーナが攻撃され、約290万ドルの損失が発生しました。 スローミストのセキュリティチームは攻撃を簡単に分析し、以下の結果を共有しました。

関連情報

攻撃者のアドレス:

攻撃契約:

攻撃トレード:

攻撃コア

攻撃者は、再入の脆弱性を悪用して、預金シェアに対応する価格を改ざんします。 その後、販売時に、価格計算の悪意のある操作への依存によって同様の価格操作が発生します。 リエントラント時に更新された株価を正確に計算することにより、攻撃者は契約の資金を盗みます。

トランザクション分析

攻撃トランザクションに再入呼び出しがあることがわかり、コードを逆コンパイルして呼び出しメソッドを段階的に分析します。

! [再び再入? 【スターズアリーナ襲撃事件の分析】(https://img-cdn.gateio.im/webp-social/moments-69a80767fe-98a298d9bb-dd1a6f-69ad2a.webp)

攻撃者は最初に攻撃コントラクト(0x7f283および0xdd9af)を作成し、Stars Arenaの0xe9ccf3a3メソッドを呼び出します:攻撃コントラクトを通じて契約を共有し、次に1つのAVAXトークンを預けます。

! [再び再入? スターズアリーナ攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-fccaa140dd-dd1a6f-69ad2a.webp)

逆コンパイルされたコードの段階的なトレースによると、攻撃者が最初に使用する0xe9ccf3a3メソッドは、0x326cメソッドと0x2058メソッドを呼び出すデポジットのような関数です。 0x326cメソッドはパラメータとしてのみ返される呼び出しですが、0x2058メソッドはある種のトークンの購入または交換を処理する関数に似ており、メソッドは0xe9ccf3a3から渡されたAVAXトークンの量とアドレスを使用して、次の操作と株式と手数料の計算を計算します。

! [再び再入? 【スターズアリーナ攻撃の分析】(https://img-cdn.gateio.im/webp-social/moments-69a80767fe-9279aef172-dd1a6f-69ad2a.webp)

0x2058メソッドの92行目の呼び出しロジックに従うと、0x1a9bメソッドは計算関数であり、計算結果は価格に似た値であり、その戻り値は新しく計算されたv24 / 0xde0b6b3a7640000または_initialPriceであることがわかります。

0x307c メソッドと 0x30ef メソッドの次の 109、110、および 116 行には低レベル呼び出しへの呼び出しがあり、0x30ef呼び出しは依然として g1 (つまり、着信 0xdd9af 攻撃コントラクト アドレス) への外部呼び出しです。 この関数には再入可能ロック制約がなく、外部呼び出しが実行された後、このメソッドは後続の if 判定のみを実行して field0.length パラメーターと field0 パラメーターを更新します。 ここで再入が起こっていることは間違いありません。

! [再び再入? スターズアリーナ攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-3c9611d0bb-dd1a6f-69ad2a.webp)

攻撃者が再入呼び出しで構築するデータを見てみましょう。

! [再び再入? スターズアリーナ襲撃の分析] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-ce911c42e9-dd1a6f-69ad2a.webp)

再入外部は0x5632b2e4メソッドを呼び出し、攻撃者が構築した4つのパラメーターを渡して、153005ce00を10進数で910000000000に変換します。

前述のように、0x5632b2e4メソッドへの外部呼び出しは、if(g0 == _getMyShares[アドレス(g1)][msg.sender]) 判定の前に実行されます。 現時点では、field0.lengt の値は 0 であり、更新されません。 このようにして、攻撃者は0x5632b2e4メソッドの判断をバイパスし、外部呼び出しが行われたときに構築されるmsg.senderの次の4つのパラメータ、つまり攻撃コントラクト0xdd9afの状態を変更します。

! [再び再入? スターズアリーナ攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-53695512db-dd1a6f-69ad2a.webp)

これを行った後、攻撃者は自分の株を売るためにsellSharesを呼び出し、266,102.97278 AVAXを取得しました。

! [再び再入? スターズアリーナ襲撃の分析] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-54e5a2f231-dd1a6f-69ad2a.webp)

sellShares 関数をさらに詳しく説明すると、この関数は最初に、前の 0x2058 メソッドで呼び出された 0x1a9b メソッド (ある種のトークンの購入または交換を処理する関数) を呼び出します。 0x1a9bメソッドの0x2329メソッドが所有者を更新することがわかります_9f[g0] 、およびこのパラメーターは、再入時に攻撃者によって構築された 910000000000 に変更されています。

! [再び再入? 【スターズアリーナ攻撃の分析】(https://img-cdn.gateio.im/webp-social/moments-69a80767fe-60823d09ab-dd1a6f-69ad2a.webp)

0x1a9bメソッドに戻り、以前に悪意を持って構築された値に基づいて再計算します (計算された金額については注を参照してください)。

! [再び再入? スターズアリーナ攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-764b869b64-dd1a6f-69ad2a.webp)

上記の計算の後、新しく計算された株式に対応する価格が変更され、結果は274,333.061476814e18になります。 一連の料金が請求された後、攻撃者は悪意のある構造を使用して、株式を変更せずに価格を操作し、株式を売却して、利益を上げることに成功します。

まとめ

この攻撃の中心にあるのは、再入性攻撃によって引き起こされる価格計算依存関係の更新であり、同様の悪意のある価格操作につながります。 Slow Mist セキュリティ チームは、コントラクトを展開する前に、プロジェクト チームが複数のセキュリティ会社による監査を受けることを提案しています。 同時に、コーディング時には、チェック-効果-相互作用のコーディング仕様を可能な限り満たし、再入防止ロックを追加する必要があります。

原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • コメント
  • 共有
コメント
0/400
コメントなし
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)