Moonbeam から脱出しろ! Nomad Hacking

Watacchi
CryptoKudasaiJP
Published in
9 min readAug 5, 2022

--

8/2 世界を騒がせたNomad Bridge ハッキング、その裏での脱出劇をお届けします。Nomad Bridge ハッキングについて知らない人はまずこれを読みましょう。

補足として、あるNetwork上のトークンの価値については簡単に2種類に分類されています。

  1. 発行者が担保しているトークン(Native Token)

Ex. USDC (https://www.circle.com/en/usdc)

Ethereum, Solana, Avalanche, TRON, Algoland, Stellar, Flow, Hederaの記載があり、これらのネットワーク上のUSDCは発行者(Circle)が担保しているので、リスクは最小限といえるでしょう。

2. Bridge等が、別チェーンの1.を担保にして発行しているトークン

逆にその他のチェーン上はどうなっているのでしょうか?
今回の例ではNomad Bridge を経由してEVMOS上やMoonbeam上にUSDCが存在していました。

今回、Moonbeamでは2. のような状態になっていました。
ここでハッキングされ、Nomadが管理していたNative token達がなくなると?

Nomad USDCの価値を担保していたNative USDCがなくなりました。(補償されないとは言っていないが、往々にして補償されないことが多い)
しかしハッキングで混乱したMoonbeam王国はなんと自国内の取引を全て停止しています。ハッキングに関与していないことが分かってから取引を再開ました(約3時間程度)そのため、ハッキングには直接関与していないものの$GLMRもダンプ。(中にはGLMRを通じて取引所に脱出した人が投げ売りした分もあるとは思われますが。)

取引再開後、担保のないNomad USDCからNative tokenのGLMR、担保裏付けの残っているMultichain USDCへのスワップが急増し、NomadUSDCの価値は0.2USD程度に急落しました。

大体のハッキングの場合は、ハッキングからのトークン急落がほぼ同時に起こるが、Moonbeamの場合は取引再開まで数時間あったので、脱出作戦を考える時間がしばらくありました。

まず、今回Moonbeam上でNomadハッキングを喰らったのは、大体Nomadに流動性提供(LP)しておいたらNomadがトークン発行したときにもらえるor高いAPR最高!と考えていたアホなお触りマン達(筆者含む)でしょう。基本的に長期間無事に動いているプロダクトの方が普通は信頼性が高いので、何もなければMultichainがイイデスヨネ。

ここまでが前座でこれからが脱出編です。
Nomadハッキング後、Moonbeamはチェーンを停止

(ここでは例でUSDCにします。)

お触りしていた人は、 ETH-USDCをNomadでBridgeしてNomad-USDCにし、そのNomad-USDCをBeamswapで Nomad 3POOL (Nomad-USDC,USDT,DAIで構成されるステーブルプール)に預けて、債券トークンのBEAM3LPトークンを受け取っています。さらにBeam3LPトークンをbeamswapに預けておくとAPY60%だったので預けている人が多数かと思います。
この状態でハッキングが起きたため、脱北者のゴールは
1. Beamswap から Beam3LP tokenを引き出す
2. Beam3LP token を Nomad stable(のどれか)に交換する
3. Nomad Stable をロスの少ない multichain Stable やGLMRに交換し脱北

ふーん?再開したらUI(Beamswap公式Website)からやればイイジャン?
と思っているそこのあなた?
なんと、BeamSwapは取引停止中に 公式サイトからBeam3LPトークンを引き出せないようにUIを消してきました・・・!(8/3現在は復活。)

ナナナンダッテー! しかしここで役立つのが直コン技術です。取引再開後、即効で脱出するため計画を立てます。

まず脱出経路について。Nomad Stableと交換しやすい、価値が毀損されなさそうなトークンを選びます。最善はGLMR、multichain 担保トークンでしょう。

ここでBeam3LPトークンから引き出せるトークンを考えてみます。
Beam3LPは Nomad- USDC, USDT, DAIの3種のため、それぞれの流動性をチェックしてみます。すると、USDC-GLMRペアが約8Mドル分、Nomad-USDC, USDT, DAI + FRAXの4Stableが約14Mありました。
ここでFraxについてですが、Fraxにも AnyFrax(Multichain担保)、CelerFrax(Celer担保)、madFrax(Nomad担保)があり、それらのバスケットで構成されるFrax本体があります。
各Frax同士は Frax websiteで交換ができます。
https://app.frax.finance/

NomadハックではFraxも抜かれてるため、安全なのはAnyかCelerFRAXでしょう。
ここまでで、方針としてはGLMRもしくはCelerFRAX or AnyFraxに経路を決めました。(多分GLMRは誰でも考えうる一番目のルートなので厳しそう、ほぼFRAXにする方針としました。)

Moonbeam Explorerを監視し、BlockにTxが含まれるようになった後脱出を開始します。(外出しようとして数分出遅れました)

https://moonbeam.moonscan.io/address/0xc6ca172fc8bdb803c5e12731109744fb0200587b

まずは 3LP poolから債権トークンを出金します。
Deposit TXを確認し、Pool ID をチェックの上、Emergency Withdrawで債権トークンを出金します。

次に、債権トークンを3LPコントラクトに対してアプルーブします。
そして3LP からトークンを抜きますが、楽に抜くため1 tokenで出金します。

https://moonbeam.moonscan.io/address/0x09a793cca9d98b14350f2a767eb5736aa6b6f921

以前の誰かのTxを確認し、USDCはtoken index 0 であることがわかりました。他は直コン記事を読んでいればなんとかわかりますよね?

USDC出金完了です。そして Stellaswapの4LP poolでFraxに交換

https://app.frax.finance/swap/main でバスケットFraxをCelrFraxに交換

これで一安心ですね。毀損率も約0.3%で済みました。
GLMRの場合はみていた印象だと同じタイミングで10%、少し遅れると50%、現在だと10%前後まで落ちていますのでいかに事前の準備や実行タイミングが大事か分かりますね。

記事内容等わからないこと質問があればこちらへ。
https://t.me/KudasaiJPxB

参考: 取引再開後のUSDCの動きはこうなりました。

— — — — そしてここからは延長戦です — — — —

往々にしてハッキングの時はスンゴイ鞘が発生します。
一手間落ち着いたあと、バスケットFraxは0.5USD程度で落ち着いていました。これはハッキングされたFraxが約7Mで、Nomadが発行しているMoonbeam+EVMOS上のFRAXが約14M程度で裏付けが約50%消失しているからだと考えられました。

ここで、ある鯨がFRAXをぶん投げ、Fraxの価値が0.15USDまで低下します。この時点で裏付け資産から考えてもかなり割安にFRAXを買うことができました。
そしてこの時点までFrax運営の声明はありませんでしたが・・・

Frax Invesotr custodianというラベルのついたアドレスが、Fraxをリペグさせるために鬼買いを発動させます。
https://moonbeam.moonscan.io/tokentxns?a=0x5180db0237291A6449DdA9ed33aD90a38787621c

Frax運営の声明はありませんでしたが、オンチェーン上の行動は明らかにリペグさせるためのものでした。これによりFraxはほぼ1USDにリペグしました。

--

--