Four.meme 攻撃事件分析
著者:零時科技
背景紹介
four.memeは、Binance Academyが孵化したpump.funに似たmemecoinローンチパッドです。
私たちは、プラットフォーム上のmemecoin snowboard(https://four.meme/token/0x4abfd9a204344bd81a276c075ef89412c9fd2f64)がハッキングを受けたことを確認しました。損失は約15,000 USDです。攻撃取引は次の通りです:https://bscscan.com/tx/0x2902f93a0e0e32893b6d5c907ee7bb5dabc459093efa6dbc6e6ba49f85c27f61
攻撃および事件分析
four.memeの技術原理
four.memeは、bnbスマートチェーン上のpump.funに似たmemecoinローンチパッドです。類似のローンチパッドプラットフォームは主に3つの段階があります:
•段階1:ユーザーがプラットフォームでmemecoinの名前、ロゴ、説明、ソーシャルアカウント(オプション)などをカスタマイズして作成します。
•段階2:他のユーザーがプラットフォーム上でそのmemecoinを売買できます。
•段階3:そのmemecoinの時価総額が一定の閾値(24 BNB)に達したとき、DEX(PancakeSwap)に移行します。
以下に、各段階の具体的な技術的詳細を詳しく見ていきます。
段階1
ユーザーはローンチパッドプラットフォーム上で、インターフェースを通じて作成するmemecoinの具体的な情報を入力します。
入力が完了したら、手数料を支払うことでmemecoinのオンチェーン契約が作成されます。もちろん、この契約はローンチパッド公式の契約によって作成されるため、作成後のERC-20トークンのオーナーもローンチパッド公式契約です。以下にfour.memeのmemecoin作成の例を見てみましょう:
まず、ユーザーが手数料を支払い、ローンチパッド公式契約がmemecoinのERC-20トークン契約をデプロイし、1,000,000,000の初期資金をミントします(このmemecoinの予想される仮想プール総量は30 BNBです)。
その後、作成されたトークンのオーナーも同様にローンチパッド公式のスマート契約です。
これは、ローンチパッド上でmemecoinがそのユーザーによって作成されたとしても、実際にはオンチェーンのERC-20契約のオーナーがそのユーザーではないことを示しています。このようにすることで、ユーザーが自らミントするなどの悪意のある行為を防ぐことができます。このmemecoinのスマート契約がオンチェーンでデプロイされると、第二段階に進み、プラットフォーム上のすべてのユーザーが売買を行います。
段階2
プラットフォーム上の他のユーザーはプラットフォームを通じて売買できますが、売買後のトークンは他のユーザーにtransferで送信できません。オンチェーンのERC-20トークンのソースコードを見てみましょう。
その中でbeforeTokenTransferを通じて、パラメータmodeによって転送が制限されています。
この時、段階2のトークンに対応するmodeは1、つまりMODETRANSFER_RESTRICTEDであり、第三者への転送が制限されています。
この措置は、場外OTCが価格に与える影響を防ぐためのものです。売買時に、four.meme契約は最初にmodeを2に設定し、その後transferを利用してユーザーに転送します。転送が完了した後、再びmodeを1に設定し、他のユーザーの転送を制限します。これにより、購入後のmemecoinの転送が完了します。
段階3
そのmemecoinの時価総額が24 BNBに達すると、Bonding Curve Processは100%に達します。ローンチパッド公式は残りの20%のmemecoinと24 BNBをDEX PancakeSwapに移行します。これにより、段階3は正式に完了します。以下の取引は、ローンチパッド公式がmemecoinをPancakeSwapに移行する取引です。
私たちは、まずローンチパッド公式がmemecoinのmodeを0、つまりMODENORMALに設定し、ユーザーが場外取引を行えるようにします。次に、ローンチパッド公式はmemecoinとWBNBの取引ペアを作成し、最後に23.5BNB(そのうち0.5BNBは手数料)と2億memecoinの流動性をその取引ペアに追加しました。流動性を追加する際の価格はsqrtPriceX96 = 27169599998237907265358521です。sqrtPriceX96の計算式は以下の通りです。
したがって、流動性を追加する際のこのmemecoinの価格は0.0000001175 WBNBであり、23.5 WBNBを2億memecoinで割ることでも得られます。したがって、DEXに移行する際の各コインの価格は同じです。すべて0.0000001175 WBNBです。
攻撃原理
four.memeにおけるmemecoinのライフサイクル全体を理解した後、攻撃の流れを詳しく見ていきます。まず、攻撃者は事前に初期化されたDEX取引ペアを作成しました。そして、取引ペアのsqrtPriceX96を10000000000000000000000000000000000000000に設定し、正常値の368058418256012倍にしました。
そのmemecoinのbond curve processが100%に達したとき、ローンチパッドはそのmemecoinをDEXに移行し、createAndInitializePoolIfNecessaryを使用して取引ペアを作成します。以前に攻撃者によって作成され初期化された取引ペアがあるため、攻撃者が初期化した価格に従って流動性が追加されます。これは、memecoinの価格を不当に引き上げることに相当します。
この時、ローンチパッドは1つのmemecoinと23.5 WBNBを使用して流動性を追加しました。その後、疑わしい攻撃者が1600memecoinを使用して取引ペアの23.4 WBNBを交換し、これで攻撃が終了しました。
まとめ
今回の脆弱性の原因は、Four.memeの内盤のbonding curve processが100%のときに、DEXに移行する際にcreateAndInitializePoolIfNecessaryを使用してPancakeSwap取引ペアを作成したことです。事前に取引ペアが作成されていることを考慮せず、攻撃者が事前に作成し初期化した取引ペアを誤って使用し、攻撃者が設定した誤った価格で流動性を追加したことが原因です。その結果、移行後にそのmemecoinの価格が急騰し、攻撃者は手元のmemecoinを利用してプール内のWBNBを掘り尽くして攻撃を完了しました。プロジェクト側は、経済モデルやコードの実行ロジックを設計する際に多方面から検証を行い、契約のローンチ前にはできるだけ多くの監査会社に交差監査を選択することをお勧めします。