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
- 攻撃者は、注意深く構築された長い引数
routeを指定して、脆弱な RouteProcessor2 コントラクトのprocessRoute()を呼び出しました。
processRouteInternal()は、ユーザーが提供したルートに基づいてInputStreamを作成します。
- トランザクションは攻撃者の
routeに沿って進み、swapUniV3()に到達します。ここで重要なのは、poolがstreamからデコードされることです。つまり、攻撃者は自身が制御するpoolをswap()先として設定(lastCalledPoolとしてセット)することが可能でした。
- これにより、攻撃者がデプロイした悪意のあるコントラクトが呼び出され、そこから RouteProcessor2 の
uniswapV3SwapCallback()をコールバックするための悪意のあるcalldataが渡されます。 uniswapV3SwapCallback()にはmsg.senderのチェックが必要ですが、lastCalledPoolが既に攻撃者のコントラクトに設定されていたため、ハッカーはこのチェックをバイパスできました。さらに重要な点として、safeTransferFrom()のfromパラメータが、攻撃者が構築したcalldataからデコードされました。
- 被害者の資産が、攻撃者がデプロイした悪意のあるコントラクトへと転送されます。
物議を醸したホワイトハッカーによる救助
特筆すべき点は、@trust__90 というユーザー名のホワイトハッカーがこの問題を特定し、資金の救出を試みましたが、その試みが災難を招いたことです。
- プライベートRPCではなく、メンプールを使用してトランザクションをブロードキャストしたこと。
- リスクにさらされている全資金ではなく、わずか100 Etherのみを救出しようとしたこと。
これにより、MEVボットや他の攻撃者が複数の便乗攻撃(copycat transactions)を実行する機会が生まれ、実質的に資金の大半が流出することとなりました。この事件後、@trust__90 氏は非難を浴び、自身の行動を弁明するに至りました。
人々は何も知らないまま酷いことを言っていますので、詳細を共有させてください。
— Trust (@trust__90) April 10, 2023
ホワイトハッカーとしての実行の3時間前に、Immunefiの担当者とプライベートで連携を開始していました。90分後、資産が現在フロントエンドで使用されており、…
BlockSecによる救助
今回の攻撃において、私たちも100 Etherを救出し、被害者である0xsifu氏に返還しました。
現在までに、私たちは20件以上の実際のハッキングを阻止し、1,400万ドル以上の資産を救出してきました。Hey, @0xsifu 攻撃トランザクションを阻止し、100 Etherを救出することに成功しました。ご連絡をお待ちしております。
— BlockSec (@BlockSecTeam) April 9, 2023
セキュリティに関する推奨事項
アップグレードは常に監査を受けるべき
DeFiコミュニティに対して改めて強調します。セキュリティは常に最優先事項であるべきです。監査はセキュリティを完全に保証するものではありませんが、監査がないことは安全を全く保証しません。
アプロバル問題への緩和策
2023年はアプロバル攻撃に関する事件が多発しました。この機会に、アプロバル管理の重要性を再確認しましょう。 必要な金額のみを承認する、あるいは利便性を優先する場合でも、必要な量よりわずかに多い金額のみを承認するのが安全な運用です。
BlockSecのMetaSuitesは、便利なアプロバル診断機能を提供しています。さらに、Revoke Cashのようなツールを使用して、定期的に承認状況を確認することも有効です。
監視および自動応答メカニズムの導入
Ethereumは「暗黒の森」であり、DeFiコミュニティに関わる全員が、専門家であっても様々なリスクや課題に直面しています。 2023年、私たちは業界初となる自動応答システムであるPhalcon Securityを立ち上げました。これは単なる攻撃の監視だけでなく、リアルタイムで脅威を積極的に遮断するために設計されています。Phalconの検証済みの能力は、20件以上の実際のハッキングを阻止し、1,400万ドル以上の資産を救出するという実績により、その有効性が証明されています。この革新的なソリューションにより、すべてのステークホルダーが投資を守るための積極的な対策が講じられているという安心感を得ることができます。
このシリーズの他の記事を読む:
- 導入: 2023年の「注目すべき」セキュリティインシデント・トップ10
- #1: Flashbotsリレーの脆弱性を突いたMEVボットの収穫
- #2: Euler Financeインシデント: 2023年最大のハッキング
- #3: KyberSwapインシデント: 極めて巧妙な計算による丸め誤差の巧みな悪用
- #4: Curveインシデント: コンパイラのバグが招いた、正常なソースコードからの不正バイトコード生成
- #5: Platypus Finance: 幸運にも3度の攻撃から生還
- #6: Hundred Financeインシデント: 脆弱なフォークプロトコルにおける精度関連の悪用の連鎖
- #7: ParaSpaceインシデント: 業界で最も深刻な攻撃を阻止するための時間との戦い
- #9: MEV Bot 0xd61492: 巧妙な悪用によって捕食者から被食者へ
- #10: ThirdWebインシデント: 信頼されたモジュール間の非互換性が招いた脆弱性



