440万ドルが流出した「Raydium」ハッキング事件。全額補填が可決。

こんにちは。デフィ壱拾参号です!

2022年はクリプト業界史上最もハッキングがあった年となりましたが、(おそらく)2022年最後のハッキングとなったRaydiumハッキング事件についてまとめました。

事件の全貌

2022年12月16日10:12 UTC、Solanaで2番目に大きいDEXである「Raydium」から、SOL, RAY, ZBC, UXP, stSOLを含む複数の暗号資産が流出しました。攻撃者は、Raydiumの8つの流動性プールを侵害し、被害額は合計約 440 万米ドルに及びます。

引用:Raydiumによるレポート

これによる、集中流動性プールと RAYステーキングプログラムへの被害はありませんでしたが、オンチェーンデータ分析アプリのDefiLlamaによると、RaydiumのTVLは$47.98Mから$31.93Mに減少しました。

攻撃者は流出した資金を、ステーブルコインであるUSDCに交換し、Wormholeを使ってEthereumにブリッジしました。その後、UniswapでETHに交換したのちに、最終的にTornado Cashでミキシングしました。また、Ethereumでのガス代はTornado Cashを通して調達していたため、攻撃者の資金経路を特定することは非常に困難となっています。

ハッキング手法

続いてハッキング手法についてご紹介します。
攻撃者は開発者が手数料を引き出すために使用するためのwithdrawPNL関数を繰り返し実行していたことが明らかになっています。
ハッキングのトランザクション
このトランザクションはHggGrUeg4ReGvpPMLJMFKV69NTXL1r4wQ9Pk9Ljutwyvによって署名されており、これはRaydium運営のアカウントです。つまり、運営のアカウントの秘密鍵が流出したことが根本的な原因であると考えられます。そのため、今回の事件は、スマートコントラクトの脆弱性を突いたハッキングではなかったようです。

より詳細なハッキング手法

攻撃者が繰り返し実行したwithdrawPNL関数によって開発者が引き出せる手数料は、need_take_pc と need_take_coin によって事前に決定される仕組みになっており、一度引き出されると、need_take_pc と need_take_coin のカウンターは自動的にゼロになるように設定されています。そのため、withdrawPNL関数を繰り返し実行しても、何度も資金を引き出すことはできません。そこで攻撃者は取引なしに、withdrawPNL関数で引き出せる額を増やす工夫をしていました。

引き出す額を増やす巧妙な手口

攻撃者は、SetParams を SyncNeedTake と組み合わせて使用することで、取引量が発生する必要なく need_take_pc と need_take_coin の残高を膨らませ、手数料を変更・増加させました。
まとめると、攻撃者の手口は以下の通りです。

  1. withdrawlPNLを通じてプールから不正に手数料を受け取る
  2. SyncNeedTakeを実行し、架空の取引を行い、引き出せる手数料を増加させる。
  3. もう一度withdrawlPNLを実行し、上記を繰り返す

こうして攻撃者は資金を不正に繰り返し引き出すことを可能にし、結果的にプールの残高を累計440万ドル減少させました。

より詳細な分析はRaydiumのレポートをご覧ください。

事件後の対応

事件後のRaydiumの運営とコミュニティの対応をまとめました。

セキュリティ対策

12月16日 14:16 UTC に、Raydium はセキュリティパッチを展開しました。
これによって攻撃者が不正利用したアカウントの権限が取り消され、ハードウェアウォレットが保持している新しいアカウントに権限が移行されました。

12月17日 10:27 UTC にさらに追加のセキュリティ対策として、Raydium AMM V4 プログラムが Squads マルチシグ経由でアップグレードされました。このアップグレードでは、今回悪用されたSyncNeedTakenなどの、再度同様のハッキングがされた場合に、繰り返し手数料が引き出すために利用できる可能性がある不要な管理パラメーターが削除されました。

補填の提案

12月21日、Raydium運営はハッキングの被害をDAOのトレジャリーから全額補填する提案をしました。現在、Raydiumのトレジャリーに保管されている資産は合計約400万ドルで、そのうちRaydiumの独自トークンであるRAYは約100万ドルを占めます。より詳細な比率はこちらを参照してください。
補填案では、トレジャリーにあるRAY以外の300万米ドル相当のトークンを用いて流動性提供者の損失を補填することが提案されています。また、盗まれたRAYに関しては運営チームのために割り当てられていた分から補填するようです。したがって、補填プロセスにおけるRAYの売却はありません。

この提案は12月30日に可決されました。
投票が行われたRealms
Raydiusのツイートによると「Raydiumは資金の補填に関して前進しています。補償のためのロジスティクスに関する追加の更新は、ターゲット資産が取得されるにつれて、今後数日間続きます。」とのことです。

さいごに

今年ハッキングのあったAnkrやRoninのハッキングの根本的な原因は、今回の事件と同様に、プロトコルのデプロイキーが流出したことによるものでした。
本来トラストレスであるはずのDeFiにトラストポイントが生じているのはとても残念です。流動性を提供する際は、プロトコルをよく吟味する必要がありそうですね。

サムネイル引用

DefiLlama

関連記事