Back to Blog

No.8:SushiSwap事件:不器用な救済の試みが招いた一連の模倣攻撃

Code Auditing
2024年2月18日
6 min read

2023年4月9日、SushiSwapは未検証の外部パラメータに起因する脆弱性を突かれ、攻撃の標的となりました。被害総額は約330万ドルにのぼります。

Ethereum上の主要なプロトコルであり、広範なユーザーベースを抱えるSushiSwapのようなトップレベルのプロトコルであっても、コントラクトのアップグレード時に深刻な新たな問題を引き起こす可能性があることを示しています。これは、DeFiコミュニティに対して、セキュリティを常に最優先事項とするよう改めて警告するものです。 さらに、このセキュリティインシデントは、ホワイトハッカーによる救助の試みが引き金となって発生したものであり、コミュニティ内で大きな議論を呼びました。本稿では、2023年のセキュリティインシデント・トップ10の一つとして、この事件の概要を簡潔に紹介します。

背景

SushiSwap

SushiSwapは有名なDEXであり、Uniswapに対して吸血鬼攻撃(Vampire Attack)を仕掛け、大きな成功を収めました。ピーク時には80億ドルのTVL(預かり資産総額)を記録し、現在も約4億ドルの規模を維持しています。

アプロバル(承認)

簡単に説明すると、コントラクトがウォレット内の特定のトークンにアクセスし、送金することを許可する設定のことです。

利便性の観点から、多くのコントラクトがデフォルトで無制限のアプロバルを要求します。多くのユーザーはセキュリティリスクを懸念し、少額のみを各プロトコルに預け入れますが、実際にはプロトコルに対して無制限の資金操作権限を与えてしまっています。もしプロトコルが侵害されれば、そのアカウントで承認済みのすべてのトークンが失われる可能性があります。

脆弱性

未検証の外部パラメータ

RouteProcessor2コントラクトの processRoute() は、ユーザーが呼び出しフロー(routeパラメータ)を完全に制御できるようになっています。 そして uniswapV3SwapCallback() において、safeTransferFrom() の from パラメータが、ユーザーが提供した route からデコードされます。 その結果、RouteProcessor2コントラクトを承認していたユーザーは資産を失うこととなりました。

攻撃のプロセス

このインシデントには複数の攻撃トランザクションが関与していますが、ここでは最初のトランザクションを例に挙げます。 トランザクション: 0x43ff7e01423044cfb501b4fe9ef1386725c0ddc117dadd6e6620cb68bdeaf4f9

  1. 攻撃者は、注意深く構築された長い引数 route を指定して、脆弱な RouteProcessor2 コントラクトの processRoute() を呼び出しました。
  2. processRouteInternal() は、ユーザーが提供したルートに基づいて InputStream を作成します。
  3. トランザクションは攻撃者の route に沿って進み、swapUniV3() に到達します。ここで重要なのは、pool が stream からデコードされることです。つまり、攻撃者は自身が制御する pool を swap() 先として設定(lastCalledPool としてセット)することが可能でした。
  4. これにより、攻撃者がデプロイした悪意のあるコントラクトが呼び出され、そこから RouteProcessor2 の uniswapV3SwapCallback() をコールバックするための悪意のある calldata が渡されます。
  5. uniswapV3SwapCallback() には msg.sender のチェックが必要ですが、lastCalledPool が既に攻撃者のコントラクトに設定されていたため、ハッカーはこのチェックをバイパスできました。さらに重要な点として、safeTransferFrom() の from パラメータが、攻撃者が構築した calldata からデコードされました。
  6. 被害者の資産が、攻撃者がデプロイした悪意のあるコントラクトへと転送されます。

物議を醸したホワイトハッカーによる救助

特筆すべき点は、@trust__90 というユーザー名のホワイトハッカーがこの問題を特定し、資金の救出を試みましたが、その試みが災難を招いたことです。

  • プライベートRPCではなく、メンプールを使用してトランザクションをブロードキャストしたこと。
  • リスクにさらされている全資金ではなく、わずか100 Etherのみを救出しようとしたこと。

これにより、MEVボットや他の攻撃者が複数の便乗攻撃(copycat transactions)を実行する機会が生まれ、実質的に資金の大半が流出することとなりました。この事件後、@trust__90 氏は非難を浴び、自身の行動を弁明するに至りました。

BlockSecによる救助

今回の攻撃において、私たちも100 Etherを救出し、被害者である0xsifu氏に返還しました。

現在までに、私たちは20件以上の実際のハッキングを阻止し、1,400万ドル以上の資産を救出してきました。

セキュリティに関する推奨事項

アップグレードは常に監査を受けるべき

DeFiコミュニティに対して改めて強調します。セキュリティは常に最優先事項であるべきです。監査はセキュリティを完全に保証するものではありませんが、監査がないことは安全を全く保証しません。

アプロバル問題への緩和策

2023年はアプロバル攻撃に関する事件が多発しました。この機会に、アプロバル管理の重要性を再確認しましょう。 必要な金額のみを承認する、あるいは利便性を優先する場合でも、必要な量よりわずかに多い金額のみを承認するのが安全な運用です。

BlockSecのMetaSuitesは、便利なアプロバル診断機能を提供しています。さらに、Revoke Cashのようなツールを使用して、定期的に承認状況を確認することも有効です。

監視および自動応答メカニズムの導入

Ethereumは「暗黒の森」であり、DeFiコミュニティに関わる全員が、専門家であっても様々なリスクや課題に直面しています。 2023年、私たちは業界初となる自動応答システムであるPhalcon Securityを立ち上げました。これは単なる攻撃の監視だけでなく、リアルタイムで脅威を積極的に遮断するために設計されています。Phalconの検証済みの能力は、20件以上の実際のハッキングを阻止し、1,400万ドル以上の資産を救出するという実績により、その有効性が証明されています。この革新的なソリューションにより、すべてのステークホルダーが投資を守るための積極的な対策が講じられているという安心感を得ることができます。

このシリーズの他の記事を読む:

Sign up for the latest updates
安全な保管を超えて、第2部:ウォレットの暗号技術を安全に実装する
Security Insights

安全な保管を超えて、第2部:ウォレットの暗号技術を安全に実装する

攻撃者は、保護された秘密鍵のコピーを読み取らずに、その秘密鍵を復元できるのでしょうか。『Beyond Secure Storage』の第2部では、乱数の品質不足、エントロピーの損失、署名用ノンスの不備によって鍵の予測や復元が可能になった6件の事例を検証します。そこから鍵生成と署名に関する実装要件を導き出し、決済機関がコードレビューと導入済みシステムのテストを通じて、それらをどう評価できるかを説明します。

安全な保管を超えて、第1部:安全な決済・署名ワークフローの設計
Security Insights

安全な保管を超えて、第1部:安全な決済・署名ワークフローの設計

攻撃者が秘密鍵を盗まずに、認可されていない操作が有効な署名を得ることは、なぜ可能なのでしょうか。「安全な保管の先へ」第1回では、Bitget、Bybit、Binanceなどの事例を通じて、支払い要求、トランザクションの構築、署名、実行、決済の各段階における認可の不備を検討します。そのうえで、認可されていない操作を防ぎ、損失を抑えるための設計原則を導き出し、レビュー、監査、ペネトレーションテスト、演習によって、それらの防御策をどう検証できるかを説明します。

NEAR Intentsの悪用:返金処理の欠陥とセキュリティ上の教訓
Security Insights

NEAR Intentsの悪用:返金処理の欠陥とセキュリティ上の教訓

NEAR Intentsへの攻撃では、過大な払い戻しイベントを利用し、預け入れた資産が返還された後も内部残高を維持しました。本分析では、レシートの処理の流れと、合計3,865,021 USDTに上るBNB Chainでの7件の出金を再構成します。また、これらの資金流出とプロジェクトが報告した全額回収を区別し、NEARスマートコントラクトの開発と監査におけるセキュリティ上の考慮事項を示します。

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit