This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
OrionProtocolが290万ドルの再入攻撃を受け、ETHとBSCの両チェーンが損傷を受けました
OrionProtocolのリエントランシー攻撃の分析
イベント概要
2023年2月2日、OrionProtocolはイーサリアムとバイナンススマートチェーンで再入攻撃を受け、約290万ドルの損失が発生しました。攻撃者は契約の脆弱性を利用し、イーサリアムチェーン上で2,844,766 USDTを盗み、バイナンススマートチェーン上で191,606 BUSDを盗みました。
! [PoCによるOrionProtocolリエントランシー攻撃分析](https://img-cdn.gateio.im/webp-social/moments-730464b2d4d7f6e0ff21a0289a2d5d68.webp0192837465674839201
攻撃プロセス分析
攻撃者は最初にカスタムトークン契約を展開し、その後の攻撃の準備をしました。
UNI-V2のswapメソッドを使用して貸借を行い、ExchangeWithAtomic.swapThroughOrionPoolメソッドを呼び出してトークンを交換します。交換経路には攻撃者が作成したTokenコントラクトアドレスが含まれます。
swapThroughOrionPoolメソッドを実行する際、攻撃者はカスタムトークン契約内のコールバック関数を利用して、ExchangeWithAtomic.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(
資金の流れ
攻撃者の初期資金は、ある取引プラットフォームのホットウォレットから来ています。得られた1,651 ETHのうち、657.5 ETHは攻撃者のウォレットに残っており、残りはミキシングサービスを介して移動されました。
! [PoCによるOrionProtocolリエントランシー攻撃分析])https://img-cdn.gateio.im/webp-social/moments-24819b5154419e86ea523a25a9101f67.webp(
脆弱性分析
中心的な問題は、doSwapThroughOrionPool 関数にあります。 この関数が_doSwapTokensを実行すると、最初に転送操作が実行され、次に curBalance 変数が更新されます。 攻撃者は、カスタムトークンの転送関数にコールバックを追加し、curBalanceが更新される前にdepositAsset関数を再度呼び出すことで、残高の計算にエラーが発生する可能性があります。
! [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(
防止に関する提案
契約設計の際には、複数のTokenや交換経路がもたらす可能性のあるセキュリティリスクを考慮する必要があります。
"チェック-効果-相互作用"(Checks-Effects-Interactions)モードに従ってコントラクトコードを書く。つまり、最初に条件をチェックし、次に状態変数を更新し、最後に外部呼び出しを行う。
再入攻撃を防ぐために、再入ロックなどのセキュリティメカニズムを追加します。
定期的にコード監査と脆弱性スキャンを行い、潜在的なセキュリティリスクを迅速に修正します。
一度の取引の最大金額を制限し、取引頻度制限などの措置を設定して、潜在的な攻撃による損失を低減します。
これらの対策を講じることで、プロジェクトチームは契約の安全性を大幅に向上させ、同様の攻撃を受けるリスクを低減できます。スマートコントラクトの安全性に継続的に注目することは、Web3エコシステムの健全な発展を維持するために極めて重要です。