なぜ起きた?Predy Financeの46万ドルのエクスプロイト|Web3 Security Mag

2024年5月14日、Arbitrumで展開されているPerpetualプロトコル「Predy Finance」がエクスプロイト(プロトコルの脆弱性への攻撃)を受け、約46万ドルのプール資金が不正に引き抜かれた。Predy Finance側は10%の報奨金と引き換えに資金の返還を求めたが犯人は現在のところ交渉に応じておらず、約46万ドルが全損している状況だ。

今回のインシデントが発生した本質的な原因はなんだったのか?それをオープンに発信することで、他のプロジェクトにとっても貴重なリファレンスになるのではないか?というBunzzの取材オファーに、Predyチームは「いつでも対応します」と二つ返事で応えた。インタビュー時ではさらに、エクスプロイトが発生した根本原因の一つでもある運営体制や開発プロセスについても話が及び、始終オープンなご説明をいただいた。事態を正面から受け止め、すでに前を向いて開発を進めるPredyチームへリスペクトを送りつつ、エクスプロイトの全経緯をお伝えする。

インタビュアー:Kenta (Bunzz CEO)

 

寄稿者Kenta Akutsu(Bunzz CEO)

 

■CEO / Kenta Akutsu プロフィール
2019年 経産省主催「ブロックチェーンハッカソン2019」にてコンピュータ・ソフトウェア協会賞、副賞をW受賞。同年8月、web3スタートアップとしてLasTrust株式会社を創業。2021年に1stプロダクト「CloudCerts」を上場企業に事業売却。2022年 Bunzz pte ltd創業。2ndプロダクトとして「Bunzz」をローンチ。主にブロックチェーン領域における新規事業開発の統括、ドリブンを主なフィールドとしてバリューを提供。

【登壇歴】
金融庁・日本経済新聞社主催「FIN/SUM BB 2020」、
文科省主催「スキームD」(文科省公認ピッチアクター)

【受賞歴】
B Dash Crypto 2022 Web3ピッチ優勝
日経BP「スタートアップス」にて「VC・CVCが選んだ92社」にノミネート
『Unicorn Pitches Japan』 ブロンズ受賞
『世界発信コンペティション2021』受賞
総務省後援『ASPIC IoT・AI・クラウドアワード2020』審査委員会賞
経産省主催『ブロックチェーンハッカソン2019』受賞
「世界発信コンペティション2021』 受賞。
 

Predy Financeとは - 概要と特徴

hoge

引用:Predy Financeのプロダクトページより

PredyはインテントベースのPerpetual Futures(永久先物)とGamma Short(Leveraged Uniswap LP position with Delta Neutral)を提供するDEXプロトコルだ。Arbitrumメインネットで展開され、順調にTV(Total Value Locked)を伸ばしてきた。独自のレンディングプールを備え、Perpetualプロトコル(以下:Perp)はMax40倍のレバレッジをかけられるユニークな特徴も備えている。今回のエクスプロイトではこのレディングプールのメカニズムが標的となった。

エクスプロイトはなぜ起きたのか?

5月14日、最初にエクスプロイトを検知したのはPredyチームではなく、SlowMist(中国拠点のWeb3サイバーセキュリティ企業)だった。「おそらくSlowMistはインシデントの可能性のある(つまりプールされている資金が一定量ある)コントラクトにフラグを立てているのだと思う」とPredyチームのコントリビューターの一人であるIbe氏は話す。

SlowMistのポストによってエクスプロイトが起きたことを知らされたチームは、原因の特定をまず急いだ。

hoge

引用:SlowMist(@SlowMist) - X

SlowMistのツイートを見ていたのはPredyだけではなかった。HypernativeLabs(オンチェーンデータの解析によるリスク防止を提供するプラットフォーム)がPredyチームへ即時コンタクトし、共同でトラブルシューティングに当たってくれたという。

hoge

引用:Predy finance(@predyfinance) -X

「Predyチームとしてエクスプロイトは初経験だった。対処や具体的なタスクがいくつか浮かんだが、それが正しいアクションなのか、ディスカッションする外部の組織としてHypernative Labがサポートしてくれたのは助かった」とIbe氏。これまでまったく接点のなかったプロジェクトや監査ファームがオンチェーン解析とXの発信内容だけでクイックに連携する様は、まさにWeb3ならではだ。

PredyチームはHypernativeLabsの助言もあり、問題のあったコントラクトのファンクションへのアクセス権を書き換え、根本原因を取り除くことに成功。Xにて、被害範囲はレンディングプールのみで顧客資産は毀損されていないことを公式にアナウンスし、2日後の16日にはMediumでエクスプロイトの全容を公開し事態は収束した。プロトコルが破壊されたわけではないが、2024年5月28日時点でもPredyは停止されており、再開に向けて取り組んでいる。

Predy Financeへの攻撃手法を解剖する

hoge
出典:Predy Financeの攻撃手法(作成:Bunzz Audit)

Predy Financeは2024年1月に最新バージョンである"V6"をArbtrumメインネットへデプロイした。今回の攻撃対象になったのは、このV6の真新しいコントラクトで、本格的な監査は行われていなかった。なぜ監査できなかったのか。運営内部の事情や背景は後ほど触れるとして、攻撃者はどのように46万ドルを抜いたのか、手法を見ていこう。

STEP1:重複したコントラクトの作成

Predy内で、Perp対象となるトークンペアのコントラクトをデプロイした。
Predyはユーザ自身がPerp対象のトークンペアのコントラクトを作成できる仕様になっている。もともとPredyチームがデプロイしたUSDC<>WETHのコントラクトがあり、攻撃者はこれと同内容のものをデプロイした。(上図内Step1)

STEP2:レンディングプールのコントラクトのファンクションをコール

STEP1で作成したコントラクトのオーナーが攻撃者自身であることを利用し、レンディングプールのコントラクト(Market Contract)のファンクション「PredyPool.take」をコール(ここまではPredy側の想定の範囲内の利用方法だという。PredyはユーザがFlashLoan等のトレードでもプロダクトをマネーレゴの一部として直接コントラクトを叩けるように設定していた)(上図内Step2)

STEP3:攻撃者自身が作成したコントラクトにsupplyし、プール内の全資金を移動

攻撃者は、「PredyPool.supply」をコールし、プロトコル内の適切なコントラクトにではなく、自身がStep1で作成したコントラクトにsupplyすることでプール内の全資金を2回に分け移動させた。(上図内Step3)

エクスプロイトの技術的根本原因

「Step1、2までは想定の範囲内だった。むしろプロトコルを成立させる要素として、プールのコントラクトから資金をtakeしたりsupplyできるようにする必要があった。想定外だったのは、Step3でSupply先をユーザ自身のコントラクトに指定すること」とPredy Teamは話した。しかし攻撃手法としてはsupply先の指定を変えるだけのため、非常にシンプルとも言える。予め脆弱性を検知する余地はなかったのだろうか?

エクスプロイトの運営上の根本原因

「今回のことは、PMFを達成し、チームとしての総合力が試されるフェーズと、体制が整う前のフェーズの間に起こった」とPredyチームは語る。

もともとPredyは、現在のV6に至るまでに多数のメジャーアップデートを行ってきた。MVPとしてV5までのバージョンをリリースし、市場へ受け入れられるか、収益モデルが成立するかのテストの意味合いが強く、監査に大きなコストはかけてこなかった(過去に2度監査レポートを取得し、その後はImmuneFi(バグバウンティプラットフォーム)を利用)

Predyだけでなく、資金調達前のプロジェクトにはこういったジレンマが発生することがある。つまり包括的かつ深い監査には大手監査ファームの利用が必須だが、TopTierの監査費用は数万〜数十万USドルであり、「PMF達成前のプロダクトに支払うセキュリティ対策費としては高すぎる」というミスマッチが起こる。筆者も「かけられる監査予算はTVLに比例する。スケールしなければ監査するメリットも薄い」と他プロトコルから耳にしたことがある。これがPMF前のプロジェクトのリスクとセキュリティに対するリアルな考え方だ。

またPredy チームは「知名度のある監査機関から過去にAudit Reportを取得したが、そこそこ高いコストなのに、「監査しましたよ」というだけの中身のない、形だけのハンコが押されたレポートで、継続的に買う気にはなれなかった。たとえあそこに依頼していたとしても、今回の脆弱性を発見できたとは思えない」と赤裸々に語った。この話を補足すると、監査業界では監査人によって監査レポートの質に大きなばらつきがあるのが公然の事実で業界課題となっている。レポートで指摘されなかった潜在的脆弱性はインシデントが起きるまでそうとはわからない上に、CEXや投資家からのデューデリの一貫で"アリバイ"としての監査レポートが求められるケースもあり、その際は脆弱性を潰すという本来の目的より「知名度のある監査ファームからお墨付きをもらっている」ことが優先される。つまり「ハンコ」が目的化しているプロジェクトもある。これも平均的な監査の質を下げる一因となっている。

(余談だが、この業界課題はBunzzのAudit事業を始めた理由でもあり、Ibe氏の話は非常に共感できた。低コストで質の高い監査を行うケーパビリティを持った監査サービスがない業界構造が問題で、この現状が変わらなければ、エクスプロイトは本質的に無くならない。Bunzz AuditではAIと脆弱性データベースを利用し、人間によるマニュアル依存の監査から脱却しコストを大幅に下げた。ローンチ初期のプロダクトから多数のご利用をいただいている。また最近では成果報酬型の事業モデルの検討も進めているので、関心のあるプロジェクトはぜひご相談いただきたい。)

hoge

引用:Bunzz Auditのランディングページより 

Predy Financeの今後

「今回のエクスプロイトはプールのコントラクトの脆弱性であり、Perpとして致命的なセキュリティホールがあったわけではない。Predyは引き続きインテントベースのアーキテクチャでスケールを目指す。もちろんプロトコル全体のコントラクトの脆弱性に関してこれまで以上にケアをしていく。エクスプロイト後の反省もあり、Code4renaで100,000ドルのバグバウンティを開始した。今回はユーザの個人資産が抜かれたわけではなく、プロジェクト側の資産が毀損しただけなので、良い経験だったとも思っている。PredyはV6でPMFを達成し、大きくスケールできる手応えがある。ぜひ使ってみてほしい」とIbe氏は語った。

また「今回のエクスプロイトの原因は、Predyの開発プロセスにもある。監査後もコントラクトのアップデートが頻繁にあり、本来であればその都度監査が必要だが、スケジュールとコストが見合わなかった。そのため今後は開発プロセスの中でクイックに脆弱性をスキャンできるツールの導入も進めていきたい」とも語った。

Bunzz AuditがPredyの継続監査を開始

前述の通り、Bunzz Auditでは成果報酬型の監査サービスを試験的に開始している。今回のインタビューで、あらためてPredyに協力したい想いも募り、無償での監査を申し出たところご快諾いただいた。とくにBunzz Audit V2で採用予定のFormal Verification、Fuzzing、Dynamic AnalysysといったHuman Auditでは難しい高度なアプローチをPredyのコントラクトに適用する予定である。

Fuzzing(ファジング):ファジングとは、プログラムに対して大量のランダムまたは準ランダムな入力を与えて、その動作を観察するテスト手法。

Formal Verification(形式検証):数学的な手法を用いて、ソフトウェアやシステムが特定の仕様や特性に準拠していることを証明するアプローチ。

Dynamic Analysis(動的解析):動的解析は、プログラムを実行し、その実行時の動作を監視し、バグやセキュリティ問題を検出する方法。