# OrionProtocolのリエントランシー攻撃の分析2023年2月2日午後、イーサリアムとバイナンススマートチェーン上のオリオンプロトコルは、契約の脆弱性によりリ入攻撃を受け、約290万ドルの損失を被りました。攻撃者は自作のトークン契約のコールバック機能を利用し、取引の過程で入金関数を繰り返し呼び出すことで、資金が誤って累積されて引き出されました。## 攻撃プロセス1. 攻撃者は最初にカスタムトークン契約を作成し、必要な転送と承認操作を行いました。2. 攻撃者はあるDEXのswapメソッドを通じて借入を行い、その後ExchangeWithAtomic.swapThroughOrionPoolメソッドを呼び出してトークンの交換を行います。交換パスはUSDC → 攻撃者が作成したトークン → USDTに設定されています。3. 交換プロセス中に、攻撃者のトークン契約が transfer 関数を利用してコールバックを引き起こし、ExchangeWithAtomic.depositAsset 関数を繰り返し呼び出すことで、預金額が誤って累積される。4.最後に、攻撃者は引き出し機能を通じて余分な資金を引き出し、攻撃を完了します。! [PoCによるOrionProtocolリエントランシー攻撃分析](https://img-cdn.gateio.im/social/moments-730464b2d4d7f6e0ff21a0289a2d5d680192837465674839201## 脆弱性分析この脆弱性は主に doSwapThroughOrionPool と ExchangeWithAtomic コントラクトの _doSwapTokens 関数に存在します。 主な質問は次のとおりです。1. コントラクトは転送が実行された後にcurBalance変数を更新します。2. 再入攻撃を効果的に防ぐことができず、転送プロセス中にコールバック関数を実行することを許可します。これにより、攻撃者はcurBalanceが更新される前にdepositAsset関数を繰り返し呼び出すことができ、資金の計算エラーが発生します。! [PoCによるOrionProtocolリエントランシー攻撃分析])https://img-cdn.gateio.im/social/moments-caac189901b7aaad5abd8be30bb4361a(! [PoCによるOrionProtocolリエントランシー攻撃分析])https://img-cdn.gateio.im/social/moments-7e21c34158a85d4c387fcdbec136d31b(! [PoCによるOrionProtocolリエントランシー攻撃分析])https://img-cdn.gateio.im/social/moments-24819b5154419e86ea523a25a9101f67(! [PoCによるOrionProtocolリエントランシー攻撃分析])https://img-cdn.gateio.im/social/moments-7c4bde9d6a35da4304844a3bbb934fae(! [PoCによるOrionProtocolリエントランシー攻撃分析])https://img-cdn.gateio.im/social/moments-7239f8886fe83c1da8b1b42545185811(! [PoCによるOrionProtocolリエントランシー攻撃分析])https://img-cdn.gateio.im/social/moments-e5042932f0e1b7fa96e3f6e749231957(! [PoCによるOrionProtocolリエントランシー攻撃分析])https://img-cdn.gateio.im/social/moments-4bd31735de09c63c490488e887118038(! [PoCによるOrionProtocolリエントランシー攻撃分析])https://img-cdn.gateio.im/social/moments-cd401091e63ab21864f39cd650014b97(! [PoCによるOrionProtocolリエントランシー攻撃分析])https://img-cdn.gateio.im/social/moments-e010d0f0c02fb8bbc648f755b0ac464c(! [PoCによるOrionProtocolリエントランシー攻撃分析])https://img-cdn.gateio.im/social/moments-f3c5f9416cfb9b7b791d86eeffb933be(## 攻撃の影響- イーサリアムチェーン上で2,844,766 USDTの損失- バイナンススマートチェーンで191,606 BUSDを失いました- 総額約290万ドル## 資金の流れ攻撃者が得た1,651枚のETHのうち、657.5枚は依然としてウォレットアドレスに残っており、残りはある混合サービスを通じて移動されています。初期資金はある取引所のホットウォレットアカウントから来ています。## セキュリティの提案1. スマートコントラクトは「チェック-効果-相互作用」(Checks-Effects-Interactions)モデルに厳密に従って記述してください。2. 再入ロックを実装し、関数が実行中に再度呼び出されるのを防ぐ。3. トークン交換を行う際には、さまざまなトークンの種類や交換パスを考慮し、異常時の処理を適切に行う。4. 定期的にスマートコントラクトのセキュリティ監査を行い、潜在的な脆弱性を迅速に発見し修正します。今回の事件は、プロジェクト側に対して、資金のやり取りに関わるスマートコントラクトの開発時に、安全性を非常に重視し、包括的な防護策を講じて、契約リスクを最小限に抑える必要があることを再度思い出させるものである。
OrionProtocolはリエントランシー攻撃を受け、290万ドルを失い、ETHとBSCのデュアルチェーンが影響を受けました
OrionProtocolのリエントランシー攻撃の分析
2023年2月2日午後、イーサリアムとバイナンススマートチェーン上のオリオンプロトコルは、契約の脆弱性によりリ入攻撃を受け、約290万ドルの損失を被りました。攻撃者は自作のトークン契約のコールバック機能を利用し、取引の過程で入金関数を繰り返し呼び出すことで、資金が誤って累積されて引き出されました。
攻撃プロセス
攻撃者は最初にカスタムトークン契約を作成し、必要な転送と承認操作を行いました。
攻撃者はあるDEXのswapメソッドを通じて借入を行い、その後ExchangeWithAtomic.swapThroughOrionPoolメソッドを呼び出してトークンの交換を行います。交換パスはUSDC → 攻撃者が作成したトークン → USDTに設定されています。
交換プロセス中に、攻撃者のトークン契約が transfer 関数を利用してコールバックを引き起こし、ExchangeWithAtomic.depositAsset 関数を繰り返し呼び出すことで、預金額が誤って累積される。
4.最後に、攻撃者は引き出し機能を通じて余分な資金を引き出し、攻撃を完了します。
! [PoCによるOrionProtocolリエントランシー攻撃分析](https://img-cdn.gateio.im/webp-social/moments-730464b2d4d7f6e0ff21a0289a2d5d68.webp0192837465674839201
脆弱性分析
この脆弱性は主に doSwapThroughOrionPool と ExchangeWithAtomic コントラクトの _doSwapTokens 関数に存在します。 主な質問は次のとおりです。
これにより、攻撃者はcurBalanceが更新される前にdepositAsset関数を繰り返し呼び出すことができ、資金の計算エラーが発生します。
! [PoCによるOrionProtocolリエントランシー攻撃分析])https://img-cdn.gateio.im/webp-social/moments-caac189901b7aaad5abd8be30bb4361a.webp(
! [PoCによるOrionProtocolリエントランシー攻撃分析])https://img-cdn.gateio.im/webp-social/moments-7e21c34158a85d4c387fcdbec136d31b.webp(
! [PoCによるOrionProtocolリエントランシー攻撃分析])https://img-cdn.gateio.im/webp-social/moments-24819b5154419e86ea523a25a9101f67.webp(
! [PoCによるOrionProtocolリエントランシー攻撃分析])https://img-cdn.gateio.im/webp-social/moments-7c4bde9d6a35da4304844a3bbb934fae.webp(
! [PoCによるOrionProtocolリエントランシー攻撃分析])https://img-cdn.gateio.im/webp-social/moments-7239f8886fe83c1da8b1b42545185811.webp(
! [PoCによるOrionProtocolリエントランシー攻撃分析])https://img-cdn.gateio.im/webp-social/moments-e5042932f0e1b7fa96e3f6e749231957.webp(
! [PoCによるOrionProtocolリエントランシー攻撃分析])https://img-cdn.gateio.im/webp-social/moments-4bd31735de09c63c490488e887118038.webp(
! [PoCによるOrionProtocolリエントランシー攻撃分析])https://img-cdn.gateio.im/webp-social/moments-cd401091e63ab21864f39cd650014b97.webp(
! [PoCによるOrionProtocolリエントランシー攻撃分析])https://img-cdn.gateio.im/webp-social/moments-e010d0f0c02fb8bbc648f755b0ac464c.webp(
! [PoCによるOrionProtocolリエントランシー攻撃分析])https://img-cdn.gateio.im/webp-social/moments-f3c5f9416cfb9b7b791d86eeffb933be.webp(
攻撃の影響
資金の流れ
攻撃者が得た1,651枚のETHのうち、657.5枚は依然としてウォレットアドレスに残っており、残りはある混合サービスを通じて移動されています。初期資金はある取引所のホットウォレットアカウントから来ています。
セキュリティの提案
今回の事件は、プロジェクト側に対して、資金のやり取りに関わるスマートコントラクトの開発時に、安全性を非常に重視し、包括的な防護策を講じて、契約リスクを最小限に抑える必要があることを再度思い出させるものである。