背景
four.memeは pump.fun と同様に Binance Academy によって育成されたミームコイン ランチパッドです。
プラットフォーム上のmemecoinスノーボード( https://four.meme/token/0x4abfd9a204344bd81a276c075ef89412c9fd2f64 )がハッカーによる攻撃を受けたことが検出されました。損失は約15,000ドルでした。攻撃トランザクションは次のとおりです: https://bscscan.com/tx/0x2902f93a0e0e32893b6d5c907ee7bb5dabc459093efa6dbc6e6ba49f85c27f61
攻撃とインシデントの分析
Four.memeの技術原理
four.meme は、bnb スマートチェーン上の pump.fun に似たミームコイン ランチパッドです。同様のランチパッド プラットフォームには、主に 3 つのステージがあります。
• フェーズ 1: ユーザーは、名前、ロゴ、説明、ソーシャル アカウント (オプション) などをカスタマイズして、プラットフォーム上でミームコインを作成します。
• フェーズ2: 他のユーザーがプラットフォーム上でミームコインを売買できる
• フェーズ3: ミームコインの市場価値が一定の閾値(24 BNB)に達すると、DEX(PancakeSwap)に移行されます。
以下では、各段階の具体的な技術的詳細について詳しく見ていきます。
フェーズ1
ローンチパッド プラットフォームでは、ユーザーはインターフェースを通じて、作成したいミームコインの特定の情報を入力します。
フォームに記入後、手数料を支払い、ミームコインオンチェーン契約の作成を完了します。もちろん、この契約はlaunchpadの公式契約によって作成されるため、作成されたERC-20トークンの所有者もlaunchpadの公式契約者となります。以下に、four.meme によって作成された memecoin の例を示します。
まず、ユーザーが手数料を支払い、ローンチパッドの公式契約により、ミームコイン ERC-20 トークン契約の展開が完了し、1,000,000,000の初期資金が発行されます (ミームコインの仮想プールの合計は 30 BNB になると予想されます)。
すると、作成されたトークンの所有者は、Launchpad 公式サイトのスマート コントラクトでもあることがわかります。
つまり、memecoin は launchpad 上でユーザーによって作成されますが、チェーン上の ERC-20 コントラクトの所有者は実際にはユーザーではありません。これにより、ユーザーが独自にミントするなどの悪意のある行為を防ぐことができます。ミームコインのスマート コントラクトがチェーン上に展開されると、第 2 段階に入り、プラットフォーム上のすべてのユーザーが売買できるようになります。
フェーズ2
プラットフォーム上の他のユーザーはプラットフォームを通じて売買できますが、売買後のトークンは転送を通じて他のユーザーに譲渡することはできません。チェーン上のERC-20トークンのソースコードを見ることができます。
_beforeTokenTransferでは、転送はパラメータ_modeによって制限されます。
この時点で、フェーズ 2 のトークンに対応する _mode は 1 であり、これは MODE_TRANSFER_RESTRICTED であり、サードパーティの転送が制限されていることがわかります。
この措置は店頭取引(OTC)が価格に影響するのを防ぐためだ。購入または販売する場合、four.meme コントラクトは最初に _mode を 2 に設定し、次に transfer を使用してユーザーに資金を転送します。転送が完了すると、_mode は 1 に設定され、他のユーザーによる資金の転送が制限されます。購入後にmemecoinの転送を完了します。
フェーズ3
ミームコインの市場価値が 24 BNB に達すると、結合曲線プロセスは 100% に達します。 Launchpadの関係者は、残りの20%のmemecoinと24BNBをDEX PancakeSwapに移行する予定です。この時点で、フェーズ 3 は正式に完了します。次のトランザクションは、memecoin から PancakeSwap への公式の Launchpad 移行です。
まず、Launchpad は memecoin の _mode を 0 (MODE_NORMAL) に正式に設定し、ユーザーが店頭取引を行えるようにしていることがわかります。次に、Launchpad は正式に memecoin と WBNB の取引ペアを作成し、最終的に 23.5BNB (うち 0.5 BNB は手数料) と 2 億 memecoin の流動性を取引ペアに追加しました。流動性を追加する価格は、sqrtPriceX96 = 27169599998237907265358521 です。 sqrtPriceX96 の計算式は次のようになります。
したがって、流動性を追加するときのこのミームコインの価格は 0.0000001175 WBNB であり、これは 23.5 WBNB を 2 億ミームコインで割ることによっても得られるため、DEX に移行する各コインの価格は同じになります。どちらも0.0000001175 WBNBです。
攻撃の原則
four.meme における memecoin のライフサイクル全体を理解できたので、攻撃プロセスを詳しく見てみましょう。まず、攻撃者は初期化された DEX 取引ペアを事前に作成しました。また、取引ペアのsqrtPriceX96は100000000000000000000000000000000000000000000000に設定されており、これは通常の値の368058418256012倍です。
ミームコインの債券作成プロセスが 100% に達すると、Launchpad は、ミームコインを DEX に移行するときに、createAndInitializePoolIfNecessary を使用して取引ペアを作成します。トランザクション ペアは以前に攻撃者によって作成され、初期化されているためです。したがって、流動性は作成時に攻撃者によって初期化された価格で追加されます。これは、ミームコインの価格を不可解に引き上げることに相当します。
現時点では、ローンチパッドは 1 ミームコインと 23.5 WBNB を使用して流動性を追加しました。その後、攻撃者と疑われる人物は1,600ミームコインを使用してトランザクションペアで23.4WBNBを交換し、攻撃を終了しました。
要約する
この脆弱性の原因は、Four.meme が DEX に移行するときに、内部ディスク上の結合曲線プロセスが 100% であったことです。 PancakeSwap 取引ペアを作成するには、createAndInitializePoolIfNecessary を使用します。取引ペアが事前に作成されている状況は考慮されておらず、攻撃者が事前に作成して初期化した取引ペアを誤って使用することで、攻撃者が設定した誤った価格を利用して流動性が追加されます。これにより、移行後にミームコインの価格が急騰し、攻撃者は手持ちのミームコインを使用してプール内のWBNBを空にして攻撃を完了しました。プロジェクト関係者は、経済モデルやコード操作ロジックを設計する際に多者間検証を実施し、契約がオンラインになる前に監査を行う際には、相互監査のために複数の監査会社を選択するようにすることをお勧めします。