リエントランシー攻撃とは何ですか?スマートコントラクトのリスク (2026 年)

— By Tony Rabbit in Tutorials

リエントランシー攻撃とは何ですか?スマートコントラクトのリスク (2026 年)

再入攻撃は、スマート コントラクトの脆弱性を悪用し、状態が更新される前に関数を繰り返し呼び出して資金を流出させます。その方法を学びましょう。

ペースの速い分散型金融 (DeFi) の世界では、スマート コントラクトはイノベーションの根幹であり、前例のない効率で契約と取引を自動化します。ただし、その不変の性質は、脆弱性が壊滅的な結果をもたらす可能性があることも意味します。最も悪名高く執拗な脅威の中には、 リエントラント攻撃は、暗号通貨業界を何年も悩ませてきた高度なエクスプロイトで、数十億の損失をもたらし、今日私たちが見ているセキュリティ慣行を根本的に形作りました。

リエントラントを理解するのは開発者だけではありません。これは、流動性プロバイダーから DEXTools で新しいペアを追跡するトレーダーに至るまで、DeFi プロトコルを扱うすべての人にとって重要です。このガイドでは、リエントランシー攻撃とは何か、その仕組み、その歴史的影響、2026 年以降のデジタル資産を保護するための重要な防御策について詳しく説明します。

Diagram illustrating a reentrancy attack flow with an attacker contract
再入攻撃は、資金の送金と契約の状態の更新の間のタイミングのギャップを悪用します。

リエントランシー攻撃とは何ですか?

再入攻撃の核心は、スマート コントラクトの重大なタイミングの脆弱性を悪用します。具体的には、コントラクトが外部アドレスに資金を送信してから、そのトランザクションを反映するために内部状態を更新するまでの短い期間を対象としています。攻撃者はこのギャップを利用して脆弱な関数を繰り返し呼び出し、コントラクトが最初の引き出しを登録する前に資金を枯渇させます。

飲み物を供給するが、少し遅れてからのみ在庫数を更新する自動販売機を想像してください。その遅れの間に、素早く分配ボタンを複数回押すことができれば、1 杯分の値段で数杯の飲み物を手に入れることができます。再入攻撃も同様の原理で動作しますが、対象となるのは ETH やトークンなどのデジタル資産です。

リエントラント攻撃がどのように展開されるか

典型的なシナリオには、攻撃者が独自の悪意のあるスマート コントラクトを展開することが含まれます。次に、この攻撃者コントラクトは、通常は撤退関数を呼び出すことによって、脆弱なスマート コントラクトと対話します。脆弱なコントラクトが攻撃者コントラクトのアドレスに ETH を送信しようとすると、攻撃者コントラクトのフォールバック機能という重要なメカニズムが作動します。

フォールバック関数は、コントラクトが特定の関数呼び出しなしでプレーン ETH を受け取ったとき、または存在しない関数が呼び出されたときに実行される Solidity の特別な関数です。リエントランシー攻撃では、攻撃者のフォールバック関数は、ターゲット コントラクトの脆弱な引き出し関数に即座にコールバックするようにプログラムされています。この再帰呼び出しは、脆弱な契約がユーザーの残高または資金の総供給量を更新する機会を得る前に発生します。

このループは、コントラクトが空になるかガス制限に達するまで、再帰呼び出しのたびに脆弱なコントラクトから資金を排出し続けます。攻撃者は基本的に、同じ最初のリクエストを複数回取り消して、古い状態情報を悪用します。

重要なポイント: 再入攻撃は、資金の送金と契約の内部残高の更新の間の遅延を悪用し、攻撃者が繰り返し資産を引き出すことを可能にします。

悪名高い DAO ハックとその遺産

最も有名で影響力のあったリエントラント攻撃は 2016 年に発生し、DAO (分散型自律組織) をターゲットにしました。この画期的なプロジェクトは、分散型ガバナンスと投資における初期の野心的な実験でした。ただし、そのスマート コントラクトには再入可能な脆弱性が含まれていました。

攻撃者はこの欠陥を悪用し、The DAO の契約から約 360 万 ETH を組織的に流出させました。盗難の規模の大きさは、初期のイーサリアムコミュニティに衝撃を与えました。この影響は非常に深刻だったので、最終的にはイーサリアム ブロックチェーンの物議を醸すハード フォークにつながり、ハッキングを元に戻したイーサリアム (ETH) と、ハッキングを含む元のチェーンを保存したイーサリアム クラシック (ETC) という 2 つの異なるチェーンが作成されました。

DAO ハッキングは、再入攻撃の壊滅的な可能性をはっきりと思い出させ、堅牢なスマート コントラクト セキュリティ実践の重要な必要性を強調しました。この根本的な出来事から何年も経った現在でも、リエントラントは依然として DeFi 悪用の主な原因であり、さまざまなプロトコル全体で 10 億ドルを超える歴史的損失に貢献しています。

Conceptual image of a secure smart contract with various defense mechanisms
スマート コントラクトをリエントラントやその他の脆弱性から保護するには、複数の防御層が不可欠です。

リエントラント攻撃の種類

基本原則は同じですが、再入攻撃はわずかに異なる形式で現れる可能性があります。

  • 単一機能の再入可能: これは古典的なタイプで、攻撃者が同じコントラクト内で同じ脆弱な関数 (引き出し関数など) を繰り返し呼び出します。
  • 機能間の再入可能: このより複雑な亜種では、攻撃者は状態変数を変更する 1 つの関数を呼び出した後、適切に更新される前にその状態変数の古い値に依存する別の脆弱な関数をすぐに呼び出す可能性があります。
  • クロスコントラクト再入可能: このタイプには複数の契約が含まれます。攻撃者は契約 A の脆弱性を悪用して契約 B の状態を操作し、これにより契約 A または別の関連する契約での再入が可能になる可能性があります。これは、コンポーネントが相互接続された複雑な DeFi プロトコルでよく発生します。

再入攻撃に対する防御

持続的な脅威を考慮して、スマート コントラクトの開発者と監査人は、リエントランシーに対するいくつかの堅牢な防御メカニズムを開発しました。安全な DeFi プロトコルにとって、これらの戦略の実装は交渉の余地がありません。

リエントラント防御メカニズム仕組み
チェック - 効果 - インタラクション パターン外部呼び出し (対話) が行われる前に、すべての状態変更 (効果) が適用されるようにします。
リエントランシーガード (ミューテックス)実行中に関数をロックし、最初の呼び出しが完了するまで再入力を禁止する修飾子。
プルオーバープッシュ支払い契約により資金をアドレスにプッシュするのではなく、ユーザーは積極的に資金を「プル」する必要があり、外部コールのリスクを軽減します。
プロフェッショナルなスマートコントラクト監査独立したセキュリティ専門家が、再入可能性を含むコードの脆弱性をレビューします。
  • チェック-効果-相互作用パターン: これはおそらく最も基本的な防御です。これは、スマート コントラクト機能が特定の順序に従う必要があることを規定しています。まず、必要なすべてのチェック (送信者の承認、残高チェックなど) を実行します。 2 番目に、残高の更新などのすべての状態変更 (効果) を適用します。その後、他のコントラクトまたはアドレスに対して外部呼び出し (対話) を行うことができます。資金を送金する前に状態を更新することで、再入可能期間が排除されます。
  • リエントランシー ガード ミューテックス修飾子: OpenZeppelin のようなライブラリは、次のような堅牢なソリューションを提供します。 nonReentrant 修飾子。この修飾子は、ミューテックス (相互排他) ロックとして機能します。マークが付いた機能の場合 nonReentrant が呼び出されるとフラグが設定され、最初の実行が完了するまでその関数 (または同じガードで保護されている他の関数) への以降の呼び出しが禁止されます。再入可能な呼び出しを実行しようとすると、単に元に戻ります。
  • プルオーバープッシュ支払い: ユーザーのアドレスに資金を自動的にプッシュする契約の代わりに、より安全なパターンは、ユーザーが資金を「引き出す」ことを許可することです。これは、契約に各ユーザーの未払い額が記録され、ユーザーは未払い残高を引き出すために別の取引を開始することを意味します。このアプローチにより、コントラクトによって開始された外部呼び出しに関連する攻撃対象領域が大幅に減少します。
  • プロフェッショナルなスマートコントラクト監査: コードレベルの防御ではありませんが、専門的な監査はセキュリティの不可欠な層です。独立系セキュリティ会社は、複雑な再入パターン、論理欠陥、その他の潜在的な悪用を含む脆弱性がないかスマート コントラクト コードを注意深くレビューします。定期的な監査、特に導入前および大幅なアップグレード後の監査は、DeFi プロトコルの整合性を維持するために重要です。
注意: 高度なツールやパターンを使用しても、複雑なコントラクトのやり取りに再入可能性が入り込む可能性があります。警戒、厳格なテスト、継続的なセキュリティ レビューが最も重要です。

スマートコントラクトセキュリティの未来

DeFi エコシステムが進化し続けるにつれて、攻撃と防御の方法も進化しています。リエントランシーは依然として重大な脅威ですが、DAO ハッキング以来、開発者が利用できる集合的な知識とツールは大幅に成熟しました。安全なコーディング実践の重視、監査済みライブラリの広範な採用、形式的検証の重要性の高まりはすべて、ブロックチェーン環境の回復力の向上に貢献しています。

ユーザーにとって、これらのリスクとそれらを軽減するために講じられる措置を理解することは不可欠です。新しいプロトコルを操作する前に必ずデューデリジェンスを行い、監査レポートを確認し、資金がどのように扱われるかという中核的な仕組みを理解してください。 DEXTools のようなプラットフォームは、プロジェクトのアクティビティやトークンの状態に関する貴重な洞察を提供しますが、基本的なセキュリティの知識が最善の防御策であることに変わりはありません。

スマートコントラクトの脆弱性との戦いは続いていますが、継続的な教育と堅牢なセキュリティ対策の実装により、より安全で信頼できる分散型の未来を共同で構築することができます。リエントランシーは歴史的な功績かもしれませんが、その教訓は永遠に残ります。

よくある質問

リエントランシー攻撃とは簡単に言うと何ですか?

リエントラント攻撃とは、コントラクトが残高を更新する前に、攻撃者がスマート コントラクトの引き出し関数を繰り返し呼び出し、1 回のリクエストで事実上資金を複数回排出することです。

再入攻撃を伴う有名なハッキングはどれですか?

2016 年の DAO ハッキングでは、再入攻撃を使用して約 360 万 ETH が流出し、イーサリアムとイーサリアム クラシック ブロックチェーンの分割につながったことは有名です。

スマートコントラクトを再入攻撃からどのように保護できますか?

主な防御策には、チェック-効果-相互作用パターン (外部呼び出しの前に状態を更新する)、リエントランシー ガード ミューテックス修飾子 (OpenZeppelin の非リエントラントなど)、プルオーバープッシュ支払いシステム、および専門的なスマート コントラクト監査が含まれます。

DeFiではリエントランシー攻撃は依然として脅威ですか?

はい、高度なセキュリティ対策にもかかわらず、リエントランシーは依然として DeFi エクスプロイトの主な原因であり、これまで複雑な相互作用と監視により 10 億ドルを超える損失を引き起こしてきました。

再入攻撃にはどのような種類がありますか?

タイプには、単一関数のリエントランシー (同じ関数を呼び出す)、クロス関数のリエントランシー (異なる関数間で状態を悪用する)、クロスコントラクトのリエントランシー (相互接続された複数のコントラクトが関与する) が含まれます。